In questo tutorial imparerai a creare un modello di serie temporali multivariato (ARIMA_PLUS_XREG
) per eseguire previsioni di serie temporali utilizzando le seguenti tabelle di esempio dal set di dati epa_historical_air_quality
:
epa_historical_air_quality.pm25_nonfrm_daily_summary
tabella di esempio.epa_historical_air_quality.wind_daily_summary
tabella di esempio.epa_historical_air_quality.temperature_daily_summary
tabella di esempio.
Il set di dati epa_historical_air_quality
contiene informazioni giornaliere relative al PM 2, 5, alla temperatura e alla velocità del vento raccolte da diverse città degli Stati Uniti.
Obiettivi
In questo tutorial utilizzerai:
- L'istruzione
CREATE MODEL
per creare un modello di serie temporale. - Funzione
ML.ARIMA_EVALUATE
: consente di ispezionare le informazioni di valutazione relative all'ARIMA nel modello. - La funzione
ML.ARIMA_COEFFICIENTS
per esaminare i coefficienti del modello. - La funzione
ML.FORECAST
per prevedere gli orari PM 2.5. - La funzione
ML.EVALUATE
per valutare il modello con dati effettivi. - La funzione
ML.EXPLAIN_FORECAST
consente di recuperare i vari componenti delle serie temporali (come stagionalità, tendenze e attribuzioni delle funzionalità) che puoi utilizzare per spiegare i risultati della previsione.
Costi
Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:
- BigQuery
- BigQuery ML
Per ulteriori informazioni sui costi di BigQuery, consulta la pagina Prezzi di BigQuery.
Per ulteriori informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
- BigQuery viene abilitato automaticamente nei nuovi progetti.
Per attivare BigQuery in un progetto preesistente, vai a
Attiva l'API BigQuery.
Passaggio 1: crea il set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML:
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, fai clic sul nome del progetto.
Fai clic su
Visualizza azioni > Crea set di dati.Nella pagina Crea set di dati, segui questi passaggi:
In ID set di dati, inserisci
bqml_tutorial
.Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).
I set di dati pubblici vengono archiviati in
US
più regioni. Per semplicità, memorizza il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Passaggio 2: crea una tabella delle serie temporali con funzionalità extra
I dati relativi a PM 2, 5, temperatura e velocità del vento sono riportati in tabelle separate.
Per semplificare le query seguenti, puoi creare una nuova tabella bqml_tutorial.seattle_air_quality_daily
unendo queste tabelle con le seguenti colonne:
- date: la data dell'osservazione
- PM 2.5: il valore medio di PM 2.5 per ogni giorno
- vento_velocità: la velocità media del vento per ogni giorno
- temperatura: la temperatura più alta di ogni giorno
La nuova tabella contiene i dati giornalieri dall'11/08/2009 al 31/01/2022.
Nella seguente query GoogleSQL, la clausola FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary
indica che stai eseguendo una query sulle tabelle *_daily_summary
nel set di dati epa_historical_air_quality
. Queste sono tabelle partizionate.
#standardSQL 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)
Per eseguire la query, segui questi passaggi:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la query GoogleSQL riportata sopra nell'area di testo Editor query.
Fai clic su Esegui.
(Facoltativo) Passaggio tre: visualizza le serie temporali per le quali vuoi eseguire la previsione
Prima di creare il modello, è utile vedere l'aspetto delle serie temporali di input. Puoi farlo utilizzando Looker Studio.
Nella seguente query GoogleSQL, la clausola FROM bqml_tutorial.seattle_air_quality_daily
indica che stai eseguendo una query sulla tabella seattle_air_quality_daily
nel set di dati bqml_tutorial
appena creato.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Per eseguire la query, segui questi passaggi:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Editor query.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Fai clic su Esegui.
Dopo l'esecuzione di questa query, l'output è simile allo screenshot seguente. Nello screenshot puoi vedere che questa serie temporale ha 3960 punti dati. Fai clic sul pulsante Esplora i dati e poi su Esplora con Looker Studio. Looker Studio si apre in una nuova scheda. Completa i seguenti passaggi nella nuova scheda.
Nel riquadro Grafico, scegli Grafico delle serie temporali:
Nel riquadro CONFIGURAZIONE, sotto il riquadro Grafico, vai alla sezione Metrica. Aggiungi i campi pm25, temperature e wind_speed, quindi rimuovi la metrica predefinita Record Count (Conteggio record). Puoi anche impostare un intervallo di date personalizzato, ad esempio dal 1° gennaio 2019 al 31 dicembre 2021, per abbreviare le serie temporali. come illustrato nella figura che segue.
Una volta completati questi passaggi, viene visualizzato il seguente grafico. Il grafico mostra che la serie temporale di input ha un modello stagionale settimanale.
Passaggio 4: crea il modello delle serie temporali
Quindi, crea un modello di serie temporale utilizzando i dati sulla qualità dell'aria riportati sopra.
La seguente query GoogleSQL crea un modello utilizzato per prevedere pm25
.
La clausola CREATE MODEL
crea e addestra un modello denominato bqml_tutorial.seattle_pm25_xreg_model
.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.seattle_pm25_xreg_model` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS_XREG', time_series_timestamp_col = 'date', time_series_data_col = 'pm25') AS SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')
La clausola OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...)
indica che stai creando un'ARIMA con un modello con regressori esterni. Per impostazione predefinita, auto_arima=TRUE
, l'algoritmo auto.ARIMA
ottimizza automaticamente gli iperparametri nei modelli ARIMA_PLUS_XREG
. L'algoritmo si adatta a decine di modelli candidati e sceglie il migliore con il criterio informativo di Akaike (AIC) più basso.
Inoltre, poiché il valore predefinito è data_frequency='AUTO_FREQUENCY'
, il processo di addestramento deduce automaticamente la frequenza dei dati delle serie temporali di input.
Esegui la query CREATE MODEL
per creare e addestrare il tuo modello:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la query GoogleSQL riportata sopra nell'area di testo Editor query.
Fai clic su Esegui.
Il completamento della query richiede circa 20 secondi, dopodiché il modello (
seattle_pm25_xreg_model
) viene visualizzato nel pannello di navigazione. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non vedi i risultati della query.
Passaggio 5: esamina le metriche di valutazione di tutti i modelli valutati
Dopo aver creato il modello, puoi utilizzare la funzione ML.ARIMA_EVALUATE
per visualizzare le metriche di valutazione di tutti i modelli candidati valutati durante il processo di ottimizzazione automatica degli iperparametri.
Nella seguente query GoogleSQL, la clausola FROM
utilizza la funzione ML.ARIMA_EVALUATE
sul tuo modello, bqml_tutorial.seattle_pm25_xreg_model
. Per impostazione predefinita, questa query restituisce le metriche di valutazione di tutti i modelli candidati.
Per eseguire la query ML.ARIMA_EVALUATE
, segui questi passaggi:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Editor query.
#standardSQL SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Fai clic su Esegui.
Al termine della query, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero essere simili al seguente screenshot:
I risultati includono le seguenti colonne:
non_seasonal_p
non_seasonal_d
non_seasonal_q
has_drift
log_likelihood
AIC
variance
seasonal_periods
has_holiday_effect
has_spikes_and_dips
has_step_changes
error_message
Le quattro colonne seguenti (
non_seasonal_{p,d,q}
ehas_drift
) definiscono un modello ARIMA nella pipeline di addestramento. Le tre metriche successive (log_likelihood
,AIC
evariance
) sono pertinenti al processo di adattamento del modello ARIMA.L'algoritmo
auto.ARIMA
utilizza innanzitutto il test KPSS per stabilire che il valore migliore dinon_seasonal_d
è 1. Quando il valore dinon_seasonal_d
è 1, auto.ARIMA addestra in parallelo 42 diversi modelli ARIMA candidati. Tieni presente che quandonon_seasonal_d
non è 1, auto.ARIMA addestra 21 diversi modelli candidati. In questo esempio, sono validi tutti i 42 modelli candidati. Di conseguenza, l'output contiene 42 righe, in cui ogni riga è associata a un modello ARIMA candidato. Tieni presente che per alcune serie temporali, alcuni modelli candidati non sono validi in quanto non invertibili o non stazionari. Questi modelli non validi vengono esclusi dall'output, il che renderà l'output meno di 42 righe. Questi modelli candidati sono ordinati in base ad AIC in ordine crescente. Il modello nella prima riga ha l'AIC più basso ed è considerato il modello migliore. Questo modello migliore viene salvato come modello finale e viene utilizzato quando chiamiML.FORECAST
,ML.EVALUATE
eML.ARIMA_COEFFICIENTS
come mostrato nei passaggi seguenti.La colonna
seasonal_periods
riguarda il pattern stagionale all'interno della serie temporale di input. Poiché non ha nulla a che fare con la modellazione ARIMA, pertanto ha lo stesso valore in tutte le righe di output. Registra un brevetto settimanale, che rientra nelle nostre aspettative, come descritto nel passaggio 2.Le colonne
has_holiday_effect
,has_spikes_and_dips
ehas_step_changes
vengono compilate solo quandodecompose_time_series=TRUE
. Riguardano l'effetto festività, i picchi e i cali e le variazioni dei passi all'interno delle serie temporali di input, che non sono correlate alla definizione del modello ARIMA. Di conseguenza, sono tutte uguali per tutte le righe di output, ad eccezione dei modelli che hanno avuto esito negativo.La colonna
error_message
mostra il possibile errore riscontrato durante il processo di adattamento diauto.ARIMA
. Un possibile motivo potrebbe essere che le colonnenon_seasonal_p
,non_seasonal_d
,non_seasonal_q
ehas_drift
selezionate non sono in grado di stabilizzare le serie temporali. Per recuperare il possibile messaggio di errore di tutti i modelli candidati, impostashow_all_candidate_models=true
.
Passaggio 6: esamina i coefficienti del modello
La funzione ML.ARIMA_COEFFICIENTS
recupera i coefficienti del modello del tuo modello ARIMA_PLUS,
bqml_tutorial.seattle_pm25_xreg_model
. ML.ARIMA_COEFFICIENTS
prende il modello
come unico input.
Esegui la query ML.ARIMA_COEFFICIENTS
:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Editor query.
#standardSQL SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Fai clic su Esegui.
I risultati dovrebbero avere il seguente aspetto:
I risultati includono le seguenti colonne:
ar_coefficients
ma_coefficients
intercept_or_drift
processed_input
weight
category_weights.category
category_weights.weight
ar_coefficients
mostra i coefficienti della parte autoregressiva (AR) del modello ARIMA. Allo stesso modo,ma_coefficients
mostra i coefficienti del modello della parte con media mobile (MA). Sono entrambi array, le cui lunghezze sono rispettivamente pari anon_seasonal_p
enon_seasonal_q
. Dall'output diML.ARIMA_EVALUATE
, il modello migliore nella riga superiore hanon_seasonal_p
pari a 0 enon_seasonal_q
pari a 5. Pertanto,ar_coefficients
è un array vuoto ema_coefficients
è un array length-5.intercept_or_drift
è il termine costante nel modello ARIMA.processed_input
e le colonneweight
ecategory_weights
corrispondenti mostrano le ponderazioni di ogni caratteristica e l'intercetta nel modello di regressione lineare. Se la caratteristica è una caratteristica numerica, la ponderazione è indicata nella colonnaweight
. Se l'elemento è un elemento di categoria,category_weights
è unARRAY
diSTRUCT
, doveSTRUCT
contiene i nomi e le ponderazioni delle categorie.
Passaggio 7: utilizza il modello per prevedere le serie temporali
La funzione ML.FORECAST
prevede i valori delle serie temporali future con un intervallo di previsione utilizzando
i valori del modello bqml_tutorial.seattle_pm25_xreg_model
e delle caratteristiche future.
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%. ML.FORECAST
prende il modello, i valori
delle caratteristiche futuri e un paio di argomenti facoltativi.
Per eseguire la query ML.FORECAST
, segui questi passaggi:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Editor query.
#standardSQL 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') ))
Fai clic su Esegui.
I risultati dovrebbero avere il seguente aspetto:
I risultati includono le seguenti colonne:
forecast_timestamp
forecast_value
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_upper_bound
Le righe di output sono ordinate in ordine cronologico di
forecast_timestamp
. Nella previsione di serie temporali, l'intervallo di previsione, che viene acquisito dai limiti inferiore e superiore, è importante quantoforecast_value
.forecast_value
è il punto centrale dell'intervallo di previsione. L'intervallo di previsione dipende dastandard_error
econfidence_level
.
Passaggio 8: valuta l'accuratezza delle previsioni con i dati effettivi
Per valutare l'accuratezza della previsione con i dati effettivi, puoi utilizzare la funzione ML.EVALUATE
con il tuo modello, bqml_tutorial.seattle_pm25_xreg_model
e la tabella di dati effettiva.
Per eseguire la query ML.EVALUATE
, segui questi passaggi:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Editor query.
#standardSQL 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))
Il secondo parametro riguarda i dati effettivi con le caratteristiche future, che vengono utilizzati per prevedere i valori futuri da confrontare con i dati effettivi. Il terzo parametro è uno struct di parametri per questa funzione.
Fai clic su Esegui.
I risultati dovrebbero avere il seguente aspetto:
Passaggio 9. Spiega i risultati della previsione
Per comprendere come viene prevista la serie temporale, la funzione ML.EXPLAIN_FORECAST
prevede i valori delle serie temporali future con un intervallo di previsione utilizzando il modello bqml_tutorial.seattle_pm25_xreg_model
e allo stesso tempo restituisce tutti i componenti separati della serie temporale.
Come la funzione ML.FORECAST
, 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 una confidenza dell'80%. La funzione ML.EXPLAIN_FORECAST
prende come input il modello,
i valori futuri delle funzionalità e un paio di argomenti facoltativi.
Per eseguire la query ML.EXPLAIN_FORECAST
, segui questi passaggi:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Editor query.
#standardSQL 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') ))
Fai clic su Esegui.
Il completamento della query richiede meno di un secondo. I risultati dovrebbero avere il seguente aspetto:
I risultati includono le seguenti colonne:
time_series_timestamp
time_series_type
time_series_data
time_series_adjusted_data
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_lower_bound
trend
seasonal_period_yearly
seasonal_period_quarterly
seasonal_period_monthly
seasonal_period_weekly
seasonal_period_daily
holiday_effect
spikes_and_dips
step_changes
residual
attribution_temperature
attribution_wind_speed
attribution___INTERCEPT__
Le righe di output sono ordinate in ordine cronologico di
time_series_timestamp
. I diversi componenti sono elencati come colonne dell'output. Per maggiori informazioni, consultaML.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 mantenere 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 che hai creato in questo tutorial:
Se necessario, apri la pagina di BigQuery nella console Google Cloud.
Nella barra 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
), quindi 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 del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Scopri come eseguire più previsioni di serie temporali con una singola query dai dati dei viaggi Citi bike di New York
- Scopri come accelerare ARIMA_PLUS per effettuare previsioni su 1 milione di serie temporali in poche ore.
- Per scoprire di più sul machine learning, consulta il corso intensivo sul machine learning.
- Per una panoramica di BigQuery ML, consulta Introduzione a BigQuery ML.
- Per scoprire di più sulla console Google Cloud, consulta Utilizzo della console Google Cloud.