Questo tutorial spiega come utilizzare un modello di serie temporali multivariato per prevedere il valore futuro di una determinata colonna, in base al valore storico di più caratteristiche di input.
Questo tutorial prevede una singola serie temporale. I valori previsti vengono calcolati una volta per ogni punto temporale nei dati di input.
Questo tutorial utilizza i dati del set di dati pubblico bigquery-public-data.epa_historical_air_quality. Questo set di dati contiene informazioni sul particolato (PM2.5) giornaliero, sulla temperatura e sulla velocità del vento raccolte in diverse città degli Stati Uniti.
Obiettivi
Questo tutorial ti guiderà nel completamento delle seguenti attività:
- Creare un modello di serie temporali per prevedere i valori di PM2.5 utilizzando l'istruzione
CREATE MODEL. - Valutare le informazioni del modello ARIMA (Autoregressive Integrated Moving Average) utilizzando la funzione
ML.ARIMA_EVALUATE. - Ispezionare i coefficienti del modello utilizzando la funzione
ML.ARIMA_COEFFICIENTS. - Recupero dei valori PM2.5 previsti dal modello utilizzando la funzione
ML.FORECAST. - Valutare l'accuratezza del modello utilizzando la funzione
ML.EVALUATE. - Recupero di componenti delle serie temporali, come stagionalità, tendenza e attribuzioni delle caratteristiche, utilizzando la funzione
ML.EXPLAIN_FORECAST. Puoi esaminare questi componenti delle serie temporali per spiegare i valori previsti.
Costi
Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:
- BigQuery
- BigQuery ML
Per ulteriori informazioni sui costi di BigQuery, consulta la pagina Prezzi di BigQuery.
Per saperne di più sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.
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.
- BigQuery viene abilitato automaticamente nei nuovi progetti.
Per attivare BigQuery in un progetto preesistente, vai a
Abilita l'API BigQuery, se non è già abilitata.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.
Autorizzazioni richieste
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.
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" } }
Crea una tabella di dati di input
Crea una tabella di dati che puoi utilizzare per addestrare e valutare il modello. Questa tabella combina le colonne di diverse tabelle del set di dati bigquery-public-data.epa_historical_air_quality per fornire dati meteorologici giornalieri. Inoltre, crei le seguenti colonne da utilizzare come variabili di input per il modello:
date: la data dell'osservazionepm25il valore medio di PM2.5 per ogni giornowind_speed: la velocità media del vento per ogni giornotemperature: la temperatura più alta di ogni giorno
Nella seguente query GoogleSQL, la clausola FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary indica che stai eseguendo query sulle tabelle *_daily_summary nel set di dati epa_historical_air_quality. Queste tabelle sono tabelle partizionate.
Per creare la tabella dei dati di input:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
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);
Visualizza i dati di input
Prima di creare il modello, puoi facoltativamente visualizzare i dati delle serie temporali di input per farti un'idea della distribuzione. Puoi farlo utilizzando Data Studio.
Segui questi passaggi per visualizzare i dati delle serie temporali:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`;
Al termine della query, fai clic su Apri in > Data Studio. Data Studio si apre in una nuova scheda. Completa i seguenti passaggi nella nuova scheda.
In Data Studio, fai clic su Inserisci > Grafico delle serie temporali.
Nel riquadro Grafico, scegli la scheda Configurazione.
Nella sezione Metrica, aggiungi i campi pm25, temperature e wind_speed e rimuovi la metrica predefinita Conteggio record. Il grafico risultante è simile al seguente:
Osservando il grafico, puoi vedere che la serie temporale di input ha un pattern stagionale settimanale.
Crea il modello di serie temporali
Crea un modello di serie temporali per prevedere i valori del particolato, rappresentati dalla colonna pm25, utilizzando i valori delle colonne pm25, wind_speed e temperature come variabili di input. Addestra il modello sui dati sulla qualità dell'aria della tabella bqml_tutorial.seattle_air_quality_daily, selezionando i dati raccolti tra il 1° gennaio 2012 e il 31 dicembre 2020.
Nella query seguente, la clausola OPTIONS(model_type='ARIMA_PLUS_XREG',
time_series_timestamp_col='date', ...) indica che stai creando un modello ARIMA con regressori esterni. L'opzione auto_arima dell'istruzione CREATE MODEL è impostata su TRUE per impostazione predefinita, quindi l'algoritmo auto.ARIMA ottimizza automaticamente gli iperparametri nel modello. L'algoritmo adatta decine di modelli candidati e sceglie il modello migliore, ovvero quello con il valore più basso dell'Akaike Information Criterion (AIC).
L'opzione data_frequency delle istruzioni CREATE MODEL è impostata su AUTO_FREQUENCY per impostazione predefinita, quindi il processo di addestramento deduce automaticamente la frequenza dei dati della serie temporale di input.
Per creare il modello, segui questi passaggi:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
CREATE OR REPLACE MODEL `bqml_tutorial.seattle_pm25_xreg_model` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS_XREG', time_series_timestamp_col = 'date', # Identifies the column that contains time points time_series_data_col = 'pm25') # Identifies the column to forecast AS SELECT date, # The column that contains time points pm25, # The column to forecast temperature, # Temperature input to use in forecasting wind_speed # Wind speed input to use in forecasting FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31');
Il completamento della query richiede circa 20 secondi, dopodiché puoi accedere al modello
seattle_pm25_xreg_model. Poiché la query utilizza un'istruzioneCREATE MODELper creare un modello, non vengono visualizzati i risultati della query.
Valuta i modelli candidati
Valuta i modelli di serie temporali utilizzando la funzione ML.ARIMA_EVALUATE. La funzione ML.ARIMA_EVALUATE mostra le metriche di valutazione di tutti i modelli candidati valutati durante il processo di ottimizzazione automatica degli iperparametri.
Per valutare il modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);
I risultati dovrebbero essere simili ai seguenti:
Le colonne di output
non_seasonal_p,non_seasonal_d,non_seasonal_qehas_driftdefiniscono un modello ARIMA nella pipeline di addestramento. Le colonne di outputlog_likelihood,AICevariancesono pertinenti al processo di adattamento del modello ARIMA.L'algoritmo
auto.ARIMAutilizza il test KPSS per determinare il valore migliore pernon_seasonal_d, che in questo caso è1. Quandonon_seasonal_dè1, l'algoritmoauto.ARIMAaddestra 42 diversi modelli ARIMA candidati in parallelo. In questo esempio, tutti i 42 modelli candidati sono validi, quindi l'output contiene 42 righe, una per ogni modello ARIMA candidato. Se alcuni modelli non sono validi, vengono esclusi dall'output. Questi modelli candidati vengono restituiti in ordine crescente in base all'AIC. Il modello nella prima riga ha l'AIC più basso ed è considerato il modello migliore. Il modello migliore viene salvato come modello finale e viene utilizzato quando chiami funzioni comeML.FORECASTsul modello.La colonna
seasonal_periodscontiene informazioni sul pattern stagionale identificato nei dati delle serie temporali. Non ha nulla a che fare con la modellazione ARIMA, pertanto ha lo stesso valore in tutte le righe di output. Riporta un pattern settimanale, che concorda con i risultati che hai visto se hai scelto di visualizzare i dati di input.Le colonne
has_holiday_effect,has_spikes_and_dipsehas_step_changesforniscono informazioni sui dati delle serie temporali di input e non sono correlate alla modellazione ARIMA. Queste colonne vengono restituite perché il valore dell'opzionedecompose_time_seriesnell'istruzioneCREATE MODELèTRUE. Anche queste colonne hanno gli stessi valori in tutte le righe di output.La colonna
error_messagemostra gli errori che si sono verificati durante il processo di fitting diauto.ARIMA. Una possibile causa degli errori è che le colonnenon_seasonal_p,non_seasonal_d,non_seasonal_qehas_driftselezionate non sono in grado di stabilizzare la serie temporale. Per recuperare il messaggio di errore di tutti i modelli candidati, imposta l'opzioneshow_all_candidate_modelssuTRUEquando crei il modello.Per saperne di più sulle colonne di output, consulta la sezione sulla funzione
ML.ARIMA_EVALUATE.
Esamina i coefficienti del modello
Esamina i coefficienti del modello di serie temporali utilizzando la funzione ML.ARIMA_COEFFICIENTS.
Per recuperare i coefficienti del modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);
I risultati dovrebbero essere simili ai seguenti:
La colonna di output
ar_coefficientsmostra i coefficienti del modello della parte autoregressiva (AR) del modello ARIMA. Analogamente, la colonna di outputma_coefficientsmostra i coefficienti del modello della parte di media mobile (MA) del modello ARIMA. Entrambe le colonne contengono valori di array, le cui lunghezze sono rispettivamente uguali anon_seasonal_penon_seasonal_q. Nell'output della funzioneML.ARIMA_EVALUATEhai visto che il modello migliore ha un valorenon_seasonal_pdi0e un valorenon_seasonal_qdi5. Pertanto, nell'outputML.ARIMA_COEFFICIENTS, il valorear_coefficientsè un array vuoto e il valorema_coefficientsè un array di 5 elementi. Il valoreintercept_or_driftè il termine costante nel modello ARIMA.Le colonne di output
processed_input,weightecategory_weightsmostrano i pesi per ogni caratteristica e l'intercetta nel modello di regressione lineare. Se la caratteristica è numerica, il peso si trova nella colonnaweight. Se la caratteristica è una caratteristica categorica, il valorecategory_weightsè un array di valori di struct, in cui ogni valore di struct contiene il nome e il peso di una determinata categoria.Per saperne di più sulle colonne di output, consulta la sezione sulla funzione
ML.ARIMA_COEFFICIENTS.
Utilizza il modello per prevedere i dati
Prevedi i valori futuri delle serie temporali utilizzando la funzione ML.FORECAST.
Nella seguente query GoogleSQL, la clausola STRUCT(30 AS horizon, 0.8 AS confidence_level) indica che la query prevede 30 punti temporali futuri e genera un intervallo di previsione con un livello di confidenza dell'80%.
Segui questi passaggi per prevedere i dati con il modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ));
I risultati dovrebbero essere simili ai seguenti:
Le righe di output sono in ordine cronologico in base al valore della colonna
forecast_timestamp. Nella previsione delle serie temporali, l'intervallo di previsione, rappresentato dai valori delle colonneprediction_interval_lower_boundeprediction_interval_upper_bound, è importante quanto il valore della colonnaforecast_value. Il valoreforecast_valueè il punto centrale dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonnestandard_erroreconfidence_level.Per saperne di più sulle colonne di output, consulta la sezione sulla funzione
ML.FORECAST.
Valuta l'accuratezza della previsione
Valuta l'accuratezza della previsione del modello utilizzando la funzione ML.EVALUATE.
Nella seguente query GoogleSQL, la seconda istruzione SELECT fornisce i dati con le caratteristiche future, che vengono utilizzate per prevedere i valori futuri da confrontare con i dati effettivi.
Per valutare l'accuratezza del modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, ( SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ), STRUCT( TRUE AS perform_aggregation, 30 AS horizon));
I risultati dovrebbero essere simili ai seguenti:
Per saperne di più sulle colonne di output, consulta la sezione sulla funzione
ML.EVALUATE.
Spiega i risultati della previsione
Oltre ai dati di previsione, puoi ottenere metriche di spiegabilità utilizzando la funzione ML.EXPLAIN_FORECAST. La funzione ML.EXPLAIN_FORECAST prevede i valori futuri delle serie temporali e restituisce anche tutti i componenti separati delle serie temporali.
Analogamente alla funzione ML.FORECAST, la clausola STRUCT(30 AS horizon, 0.8 AS confidence_level) utilizzata nella funzione ML.EXPLAIN_FORECAST indica che la query prevede 30 punti temporali futuri e genera un intervallo di previsione con un'affidabilità dell'80%.
Per spiegare i risultati del modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente e fai clic su Esegui:
SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ));
I risultati dovrebbero essere simili ai seguenti:
Le righe di output sono ordinate cronologicamente in base al valore della colonna
time_series_timestamp.Per saperne di più sulle colonne di output, consulta la sezione sulla funzione
ML.EXPLAIN_FORECAST.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
- Puoi eliminare il progetto che hai creato.
- In alternativa, puoi conservare il progetto ed eliminare il set di dati.
Elimina il set di dati
L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle nel progetto. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati creato in questo tutorial:
Se necessario, apri la pagina BigQuery nella consoleGoogle Cloud .
Nel riquadro di navigazione, fai clic sul set di dati bqml_tutorial che hai creato.
Fai clic su Elimina set di dati sul lato destro della finestra. Questa azione elimina il set di dati, la tabella e tutti i dati.
Nella finestra di dialogo Elimina set di dati, conferma il comando di eliminazione digitando il nome del set di dati (
bqml_tutorial) e fai clic su Elimina.
Elimina il progetto
Per eliminare il progetto:
- 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.
Passaggi successivi
- Scopri come prevedere una singola serie temporale con un modello univariato
- Scopri come prevedere più serie temporali con un modello univariato
- Scopri come scalare un modello univariato quando prevedi più serie temporali su molte righe.
- Scopri come prevedere gerarchicamente più serie temporali con un modello univariato
- Per una panoramica di BigQuery ML, consulta Introduzione all'AI e al ML in BigQuery.