Esegui il rilevamento di anomalie con un modello di previsione di serie temporali multivariato
Questo tutorial mostra come eseguire le seguenti attività:
- Crea un modello di previsione delle serie temporali
ARIMA_PLUS_XREG. - Rileva le anomalie nei dati delle serie temporali eseguendo la funzione
ML.DETECT_ANOMALIESsul modello.
Questo tutorial utilizza le seguenti tabelle del set di dati pubblico epa_historical_air_quality, che contiene informazioni giornaliere su PM 2.5, temperatura e velocità del vento raccolte da più città degli Stati Uniti:
epa_historical_air_quality.pm25_nonfrm_daily_summaryepa_historical_air_quality.wind_daily_summaryepa_historical_air_quality.temperature_daily_summary
Autorizzazioni obbligatorie
Per creare il set di dati, devi disporre dell'autorizzazione IAM
bigquery.datasets.create.Per creare il modello, devi disporre delle seguenti autorizzazioni:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.models.getDatabigquery.jobs.create
Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- BigQuery: You incur costs for the data you process in BigQuery.
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.
Per saperne di più, consulta la pagina relativa ai prezzi di BigQuery.
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Crea un set di dati
Per creare un set di dati BigQuery, seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud , vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Explorer:

Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.
In Explorer, espandi il progetto, quindi fai clic su Set di dati.
Nella pagina Set di dati, fai clic su Crea set di dati.
Nel riquadro Crea set di dati, segui questi passaggi:
In ID set di dati, inserisci
bqml_tutorial.Per Località dei dati, seleziona USA.
Lascia invariate le altre impostazioni predefinite.
Fai clic su Crea set di dati.
bq
Per creare un nuovo set di dati, utilizza il
comando bq mk --dataset.
Crea un set di dati denominato
bqml_tutorialcon la località dei dati impostata suUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Verifica che il set di dati sia stato creato:
bq ls
API
Chiama il metodo datasets.insert con una risorsa del set di dati definita:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
prepara i dati di addestramento
I dati relativi a PM2.5, temperatura e velocità del vento si trovano in tabelle separate.
Crea la tabella bqml_tutorial.seattle_air_quality_daily dei dati di addestramento combinando i dati di queste tabelle pubbliche.
bqml_tutorial.seattle_air_quality_daily contiene le seguenti colonne:
date: la data dell'osservazionePM2.5: il valore medio di PM2,5 per ogni giornowind_speed: la velocità media del vento per ogni giornotemperature: la temperatura più alta di ogni giorno
La nuova tabella contiene i dati giornalieri dall'11 agosto 2009 al 31 gennaio 2022.
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione SQL:
CREATE TABLE `bqml_tutorial.seattle_air_quality_daily` AS WITH pm25_daily AS ( SELECT avg(arithmetic_mean) AS pm25, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass' GROUP BY date_local ), wind_speed_daily AS ( SELECT avg(arithmetic_mean) AS wind_speed, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.wind_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant' GROUP BY date_local ), temperature_daily AS ( SELECT avg(first_max_value) AS temperature, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature' GROUP BY date_local ) SELECT pm25_daily.date AS date, pm25, wind_speed, temperature FROM pm25_daily JOIN wind_speed_daily USING (date) JOIN temperature_daily USING (date)
Crea il modello
Crea un modello di serie temporali multivariato utilizzando i dati di bqml_tutorial.seattle_air_quality_daily come dati di addestramento.
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione SQL:
CREATE OR REPLACE MODEL `bqml_tutorial.arimax_model` OPTIONS ( model_type = 'ARIMA_PLUS_XREG', auto_arima=TRUE, time_series_data_col = 'temperature', time_series_timestamp_col = 'date' ) AS SELECT * FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date < "2023-02-01";
Il completamento della query richiede diversi secondi, dopodiché il modello
arimax_modelviene visualizzato nel set di datibqml_tutorialed è accessibile nel riquadro Explorer.Poiché la query utilizza un'istruzione
CREATE MODELper creare un modello, non sono presenti risultati della query.
Esegui il rilevamento di anomalie sui dati storici
Esegui il rilevamento di anomalie sui dati storici che hai utilizzato per addestrare il modello.
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione SQL:
SELECT * FROM ML.DETECT_ANOMALIES ( MODEL `bqml_tutorial.arimax_model`, STRUCT(0.6 AS anomaly_prob_threshold) ) ORDER BY date ASC;
I risultati sono simili ai seguenti:
+-------------------------+-------------+------------+--------------------+--------------------+---------------------+ | date | temperature | is_anomaly | lower_bound | upper_bound | anomaly_probability | +--------------------------------------------------------------------------------------------------------------------+ | 2009-08-11 00:00:00 UTC | 70.1 | false | 67.647370742988727 | 72.552629257011262 | 0 | +--------------------------------------------------------------------------------------------------------------------+ | 2009-08-12 00:00:00 UTC | 73.4 | false | 71.7035428351283 | 76.608801349150838 | 0.20478819992561115 | +--------------------------------------------------------------------------------------------------------------------+ | 2009-08-13 00:00:00 UTC | 64.6 | true | 67.740408724826068 | 72.6456672388486 | 0.945588334903206 | +-------------------------+-------------+------------+--------------------+--------------------+---------------------+
Esegui il rilevamento di anomalie sui nuovi dati
Esegui il rilevamento di anomalie sui nuovi dati generati.
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione SQL:
SELECT * FROM ML.DETECT_ANOMALIES ( MODEL `bqml_tutorial.arimax_model`, STRUCT(0.6 AS anomaly_prob_threshold), ( SELECT * FROM UNNEST( [ STRUCT<date TIMESTAMP, pm25 FLOAT64, wind_speed FLOAT64, temperature FLOAT64> ('2023-02-01 00:00:00 UTC', 8.8166665, 1.6525, 44.0), ('2023-02-02 00:00:00 UTC', 11.8354165, 1.558333, 40.5), ('2023-02-03 00:00:00 UTC', 10.1395835, 1.6895835, 46.5), ('2023-02-04 00:00:00 UTC', 11.439583500000001, 2.0854165, 45.0), ('2023-02-05 00:00:00 UTC', 9.7208335, 1.7083335, 46.0), ('2023-02-06 00:00:00 UTC', 13.3020835, 2.23125, 43.5), ('2023-02-07 00:00:00 UTC', 5.7229165, 2.377083, 47.5), ('2023-02-08 00:00:00 UTC', 7.6291665, 2.24375, 44.5), ('2023-02-09 00:00:00 UTC', 8.5208335, 2.2541665, 40.5), ('2023-02-10 00:00:00 UTC', 9.9086955, 7.333335, 39.5) ] ) ) );
I risultati sono simili ai seguenti:
+-------------------------+-------------+------------+--------------------+--------------------+---------------------+------------+------------+ | date | temperature | is_anomaly | lower_bound | upper_bound | anomaly_probability | pm25 | wind_speed | +----------------------------------------------------------------------------------------------------------------------------------------------+ | 2023-02-01 00:00:00 UTC | 44.0 | true | 36.89918003713138 | 41.8044385511539 | 0.88975675709801583 | 8.8166665 | 1.6525 | +----------------------------------------------------------------------------------------------------------------------------------------------+ | 2023-02-02 00:00:00 UTC | 40.5 | false | 34.439946284051572 | 40.672021330796483 | 0.57358239699845348 | 11.8354165 | 1.558333 | +--------------------------------------------------------------------------------------------------------------------+-------------------------+ | 2023-02-03 00:00:00 UTC | 46.5 | true | 33.615139992931191 | 40.501364463964549 | 0.97902867696346974 | 10.1395835 | 1.6895835 | +-------------------------+-------------+------------+--------------------+--------------------+---------------------+-------------------------+
Esegui la pulizia
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.