In questo tutorial imparerai a creare un set di modelli di serie temporali per eseguire più previsioni di serie temporali con una singola query. Imparerai inoltre ad applicare diverse strategie di addestramento rapido per velocizzare significativamente la query e a valutare la precisione delle previsioni. Utilizzerai i dati di new_york.citibike_trips
.
Questi dati contengono informazioni sui viaggi in Citi bike a New York.
Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Previsione di singole serie temporali dai dati di Google Analytics.
Obiettivi
In questo tutorial utilizzerai quanto segue:
- Dichiarazione
CREATE MODEL
: per creare un modello di serie temporali o un insieme di modelli di serie temporali. - La funzione
ML.ARIMA_EVALUATE
: per valutare il modello. - La funzione
ML.ARIMA_COEFFICIENTS
: per esaminare i coefficienti del modello. - La funzione
ML.EXPLAIN_FORECAST
consente di recuperare i vari componenti delle serie temporali, ad esempio stagionalità e tendenza, da utilizzare per spiegare i risultati della previsione. - Looker Studio: per visualizzare i risultati della previsione.
- (Facoltativo) La funzione
ML.FORECAST
per prevedere le visite totali giornaliere.
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 tuo 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à, archivia il tuo set di dati nella stessa località.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
(Facoltativo) Passaggio due: visualizza le serie temporali da prevedere
Prima di creare il modello, è utile vedere l'aspetto della serie temporale di input. Puoi farlo utilizzando Looker Studio.
Nella query seguente, la clausola FROM bigquery-public-data.new_york.citibike_trips
indica che stai eseguendo una query sulla tabella citibike_trips
nel
set di dati new_york
.
Nell'istruzione SELECT
, la query utilizza la
funzione EXTRACT
per estrarre le informazioni sulla data dalla colonna starttime
. La query utilizza
la clausola COUNT(*)
per ottenere il numero totale giornaliero di viaggi in bici Citi.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date
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 EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date
Fai clic su Esegui.
Dopo l'esecuzione della query, l'output è simile allo screenshot seguente. Nello screenshot puoi vedere che questa serie temporale ha 1184 punti dati giornalieri, che coprono più di 4 anni. 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 Dati, sotto il riquadro Grafico, vai alla sezione Metrica. Aggiungi il campo num_trips e rimuovi la metrica predefinita Conteggio record:
Dopo aver completato il passaggio precedente, viene visualizzato il seguente diagramma. Il grafico mostra che la serie temporale di input ha pattern sia settimanali che annuali. Anche le serie temporali sono in aumento.
Passaggio 3. Crea il modello delle serie temporali per eseguire la previsione di singole serie temporali
Successivamente, crea un modello di serie temporali utilizzando i dati relativi alle corse della Citi bike a New York.
La seguente query GoogleSQL crea un modello utilizzato per prevedere le corse totali giornaliere
in bicicletta. La clausola CREATE MODEL
crea e addestra un modello denominato bqml_tutorial.nyc_citibike_arima_model
.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips' ) AS SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date
La clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica che stai creando un modello di serie temporali basato su ARIMA. Per impostazione predefinita, auto_arima=TRUE
, quindi l'algoritmo auto.ARIMA
ottimizza automaticamente gli iperparametri nei modelli ARIMA_PLUS
. L'algoritmo adatta decine di modelli candidati e sceglie quello migliore con il criterio delle informazioni Akaike (AIC) più basso.
Inoltre, poiché il valore predefinito è data_frequency='AUTO_FREQUENCY'
, il processo di addestramento deduce automaticamente la frequenza dei dati della serie temporale di input. Infine, l'istruzione CREATE MODEL
utilizza
decompose_time_series=TRUE
per impostazione predefinita e gli utenti possono comprendere meglio come viene prevista la serie temporale
recuperando i componenti separati delle serie temporali, come i periodi stagionali e
l'effetto delle festività.
Esegui la query CREATE MODEL
per creare e addestrare il modello:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Editor query.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips' ) AS SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date
Fai clic su Esegui.
Il completamento della query richiede circa 17 secondi, dopodiché il modello (
nyc_citibike_arima_model
) viene visualizzato nel pannello di navigazione. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non vengono visualizzati i risultati della query.
Passaggio 4. Prevedi le serie temporali e visualizza i risultati
Per spiegare come vengono previste le serie temporali, visualizza tutti i componenti delle serie temporali secondarie, ad esempio stagionalità e tendenza, utilizzando la funzione ML.EXPLAIN_FORECAST
.
Per farlo, 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.nyc_citibike_arima_model`, STRUCT(365 AS horizon, 0.9 AS confidence_level))
Fai clic su Esegui.
Al termine della query, fai clic sul pulsante Esplora i dati e poi su Esplora con Looker Studio. Nel browser si apre una nuova scheda. Poi, nel riquadro Grafico, trova l'icona Grafico delle serie temporali e fai clic su di essa, come mostrato nello screenshot seguente.
Nel riquadro Dati, segui questi passaggi:
- Nella sezione Dimensione intervallo di date, seleziona
time_series_timestamp (Date)
. - Nella sezione Dimensione, seleziona
time_series_timestamp (Date)
. - Nella sezione Metrica, rimuovi la metrica predefinita
Record Count
e aggiungi quanto segue:time_series_data
prediction_interval_lower_bound
prediction_interval_upper_bound
trend
seasonal_period_yearly
seasonal_period_weekly
spikes_and_dips
step_changes
- Nella sezione Dimensione intervallo di date, seleziona
Nel riquadro Stile, scorri verso il basso fino all'opzione Dati mancanti e utilizza Interruzioni di riga invece di Linea a zero.
Dopo aver completato questi passaggi, nel riquadro di sinistra viene visualizzato il seguente diagramma.
Passaggio cinque: prevedi più serie temporali contemporaneamente
Successivamente, potresti voler prevedere il numero totale giornaliero di viaggi con partenza da
diverse stazioni Citi bike. Per farlo, devi prevedere molte serie temporali.
Puoi scrivere più query CREATE MODEL
, ma può essere un processo noioso e che richiede molto tempo, soprattutto quando hai un numero elevato di serie temporali.
Per migliorare questo processo, BigQuery ML consente di creare un insieme di modelli di serie temporali per prevedere più serie temporali utilizzando una singola query. Inoltre, tutti i modelli delle serie temporali vengono montati contemporaneamente.
Nella seguente query GoogleSQL, la clausola CREATE MODEL
crea e addestra un set di modelli denominato bqml_tutorial.nyc_citibike_arima_model_group
.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name', auto_arima_max_order = 5 ) AS SELECT start_station_name, EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` WHERE start_station_name LIKE '%Central Park%' GROUP BY start_station_name, date
La clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica che stai creando un set di modelli di ARIMA_PLUS
di serie temporali basati su ARIMA. Oltre a time_series_timestamp_col
e
time_series_data_col
, devi specificare time_series_id_col
, che viene utilizzato per
annotare diverse serie temporali di input. L'opzione auto_arima_max_order
controlla lo spazio di ricerca per l'ottimizzazione degli iperparametri nell'algoritmo auto.ARIMA.
Infine, l'istruzione CREATE MODEL
utilizza
decompose_time_series=TRUE
per impostazione predefinita e gli utenti possono comprendere ulteriormente in che modo la serie temporale viene analizzata
nella pipeline di addestramento recuperando i risultati della decomposizione.
La clausola SELECT ... FROM ... GROUP BY ...
indica che devi creare più serie temporali, ognuna delle quali è associata a un diverso start_station_name
. Per semplicità, utilizza la clausola WHERE ... LIKE ...
per
limitare le stazioni di partenza a quelle il cui nome contiene Central Park
.
Per eseguire la query CREATE MODEL
al fine di creare e addestrare il modello, 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 CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name', auto_arima_max_order = 5 ) AS SELECT start_station_name, EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` WHERE start_station_name LIKE '%Central Park%' GROUP BY start_station_name, date
Fai clic su Esegui.
Il completamento della query richiede circa 24 secondi, dopodiché il modello (
nyc_citibike_arima_model_group
) viene visualizzato nel pannello di navigazione. Poiché la query utilizza un'istruzioneCREATE MODEL
, non vengono visualizzati i risultati della query.
Passaggio 6: esamina le metriche di valutazione dell'insieme di modelli di serie temporali
Dopo aver creato i modelli, puoi utilizzare la funzione ML.ARIMA_EVALUATE
per visualizzare le metriche di valutazione di tutti i modelli creati.
Nella seguente query GoogleSQL, la clausola FROM
utilizza la funzione ML.ARIMA_EVALUATE
rispetto al tuo modello, bqml_tutorial.nyc_citibike_arima_model_group
. Le metriche di valutazione dipendono solo dall'input di addestramento, pertanto il tuo modello è l'unico input.
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.nyc_citibike_arima_model_group`)
Fai clic su Esegui.
Il completamento della query richiede meno di un secondo. Una volta completata la query, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero essere simili ai seguenti:
I risultati includono le seguenti colonne:
start_station_name
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
start_station_name
, la prima colonna, annota le serie temporali a cui si abbina ogni modello di serie temporale. È uguale a quello specificato datime_series_id_col
.Le quattro colonne seguenti (
non_seasonal_p
,non_seasonal_d
,non_seasonal_q
ehas_drift
) definiscono un modello ARIMA nella pipeline di addestramento. Le tre metriche successive (log_likelihood
,AIC
evariance
) sono pertinenti per il processo di adattamento del modello ARIMA. Il processo di adattamento determina il miglior modello ARIMA utilizzando l'algoritmoauto.ARIMA
, uno per ogni serie temporale.Le colonne
has_holiday_effect
,has_spikes_and_dips
ehas_step_changes
vengono compilate solo quandodecompose_time_series=TRUE
.La colonna
seasonal_periods
è il pattern stagionale all'interno della serie temporale di input. Ogni serie temporale può avere diversi schemi stagionali. Ad esempio, dalla figura puoi vedere che una serie temporale ha un modello annuale, mentre le altre no.
Passaggio 7: esamina i coefficienti dei tuoi modelli
La funzione ML.ARIMA_COEFFICIENTS
viene utilizzata per recuperare i coefficienti del modello ARIMA_PLUS
,
bqml_tutorial.nyc_citibike_arima_model_group
. ML.ARIMA_COEFFICIENTS
prende il modello come unico input.
Per eseguire la query ML.ARIMA_COEFFICIENTS
, 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_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`)
Fai clic su Esegui.
Il completamento della query richiede meno di un secondo. I risultati dovrebbero essere simili al seguente screenshot:
I risultati includono le seguenti colonne:
start_station_name
ar_coefficients
ma_coefficients
intercept_or_drift
start_station_name
, la prima colonna, annota le serie temporali a cui si abbina ogni modello di serie temporale.ar_coefficients
mostra i coefficienti della parte autoregressiva (AR) del modello ARIMA. Analogamente,ma_coefficients
mostra i coefficienti del modello della parte della media mobile (MA). Sono entrambi array, le cui lunghezze sono rispettivamente uguali anon_seasonal_p
enon_seasonal_q
.intercept_or_drift
è il termine costante nel modello ARIMA.
Passaggio 8: utilizza il modello per prevedere più serie temporali contemporaneamente con le spiegazioni
La funzione ML.EXPLAIN_FORECAST
prevede i valori delle serie temporali future con un intervallo di previsione utilizzando
il tuo modello, bqml_tutorial.nyc_citibike_arima_model_group
, e allo stesso tempo
restituisce tutti i componenti separati della serie temporale.
La clausola STRUCT(3 AS horizon, 0.9 AS confidence_level)
indica che la query prevede tre punti temporali futuri e genera un intervallo di previsione con un grado di confidenza del 90%. La funzione ML.EXPLAIN_FORECAST
prende il modello, oltre a 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.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level))
Fai clic su Esegui.
Il completamento della query richiede meno di un secondo. I risultati dovrebbero essere simili ai seguenti:
I risultati includono le seguenti colonne:
start_station_name
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
Le righe di output sono ordinate per
start_station_name
e per ognistart_station_name
, le righe di output sono nell'ordine cronologico ditime_series_timestamp
. I vari componenti sono elencati come colonne dell'output. Per ulteriori informazioni, consulta la definizione diML.EXPLAIN_FORECAST
.
(Facoltativo) Passaggio 9: utilizza il modello per prevedere più serie temporali contemporaneamente
La funzione ML.FORECAST
può essere utilizzata anche per prevedere i valori di serie temporali future con un
intervallo di previsione utilizzando il tuo modello,
bqml_tutorial.nyc_citibike_arima_model_group
.
Come nel caso di ML.EXPLAIN_FORECAST
, la clausola STRUCT(3 AS horizon, 0.9 AS confidence_level)
indica che, per ogni serie temporale, la query prevede tre punti di tempo futuri e genera un intervallo di previsione con una confidenza del 90%.
La funzione ML.FORECAST
prende il modello, nonché 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.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level))
Fai clic su Esegui.
Il completamento della query richiede meno di un secondo. I risultati dovrebbero essere simili ai seguenti:
I risultati includono le seguenti colonne:
start_station_name
forecast_timestamp
forecast_value
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_upper_bound
confidence_interval_lower_bound
(a breve deprecato)confidence_interval_upper_bound
(a breve deprecato)
La prima colonna,
start_station_name
, annota le serie temporali a cui si abbina ogni modello di serie temporale. Ognistart_station_name
ha un horizon di righe per i risultati di previsione.Per ogni
start_station_name
, le righe di output sono ordinate nell'ordine cronologico diforecast_timestamp
. Nella previsione delle serie temporali, l'intervallo di previsione, acquisito dai limiti inferiore e superiore, è importante quantoforecast_value
.forecast_value
è il punto medio dell'intervallo di previsione. L'intervallo di previsione dipende dastandard_error
econfidence_level
.
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 creato in questo tutorial:
Se necessario, apri la pagina BigQuery nella console Google Cloud.
Nel menu di navigazione, fai clic sul set di dati bqml_tutorial che hai creato.
Fai clic su Elimina set di dati per eliminare il set di dati, la tabella e tutti i dati.
Nella finestra di dialogo Elimina set di dati, digita il nome del set di dati (
bqml_tutorial
) per confermare il comando di eliminazione, 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 accelerare ARIMA_PLUS per consentire la previsione di 1 milione di serie temporali in poche ore.
- Per ulteriori informazioni sul machine learning, consulta Machine Learning Crash Course.
- Per una panoramica di BigQuery ML, consulta Introduzione a BigQuery ML.
- Per saperne di più sulla console Google Cloud, consulta Utilizzo della console Google Cloud.