Questo tutorial ti insegna a utilizzare un modello di serie temporali univariato per prevedere il valore futuro di una determinata colonna in base ai valori storici per quella colonna.
Questo tutorial prevede più serie temporali. I valori previsti vengono calcolati per ogni punto temporale, per ogni valore in una o più colonne specificate. Ad esempio, se volessi prevedere il meteo e hai specificato una colonna contenente i dati della città, i dati previsti conterranno le previsioni per tutti i punti in cui è presente la città A, poi i valori previsti per tutti i punti in cui è presente la città B e così via.
Questo tutorial utilizza i dati della tabella pubblica
bigquery-public-data.new_york.citibike_trips
. Questa tabella contiene informazioni sui viaggi in bicicletta Citi Bike a New York.
Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Previsione di una singola serie temporale con un modello univariabile.
Obiettivi
Questo tutorial ti guida nella realizzazione delle seguenti attività:
- Creazione di un modello di serie temporali per prevedere il numero di giri in bici utilizzando l'istruzione
CREATE MODEL
. - Valutazione delle informazioni sull'analisi ARIMA (media mobile integrata autoregressiva) nel modello utilizzando la funzione
ML.ARIMA_EVALUATE
. - Controllare i coefficienti del modello utilizzando la
funzione
ML.ARIMA_COEFFICIENTS
. - Recuperare le informazioni sulle gite in bicicletta previste dal modello utilizzando la
funzione
ML.FORECAST
. - Recuperare i componenti della serie temporale, come la stagionalità e la tendenza, utilizzando la funzione
ML.EXPLAIN_FORECAST
. Puoi esaminare questi componenti delle serie temporali per spiegare i valori previsti.
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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery viene attivato automaticamente nei nuovi progetti.
Per attivare BigQuery in un progetto preesistente, vai a
Enable the BigQuery API.
Autorizzazioni richieste
- Per creare il set di dati, devi disporre dell'autorizzazione IAM
bigquery.datasets.create
. Per creare la risorsa di connessione, devi disporre delle seguenti autorizzazioni:
bigquery.connections.create
bigquery.connections.get
Per creare il modello, devi disporre delle seguenti autorizzazioni:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.models.getData
bigquery.jobs.create
Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Crea un 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:
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 sono archiviati nella
US
multiregione. Per semplicità, archivia il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Visualizzare i dati di input
Prima di creare il modello, puoi visualizzare facoltativamente i dati delle serie temporali di input per avere un'idea della distribuzione. Puoi farlo utilizzando Looker Studio.
L'istruzione SELECT
della seguente 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 corse in bicicletta di Citi Bike.
Per visualizzare i dati delle serie temporali:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date;
Al termine della query, fai clic su Esplora i dati > Esplora con Looker Studio. Looker Studio si apre in una nuova scheda. Completa i seguenti passaggi nella nuova scheda.
In Looker Studio, fai clic su Inserisci > Grafico delle serie temporali.
Nel riquadro Grafico, scegli la scheda Configurazione.
Nella sezione Metrica, aggiungi il campo num_trips e rimuovi la metrica predefinita Conteggio record. Il grafico risultante è simile al seguente:
Crea il modello delle serie temporali
Vuoi prevedere il numero di corse in bicicletta per ogni
stazione Citi Bike, il che richiede molti modelli di serie temporali, uno per ogni
stazione Citi Bike inclusa nei dati di input. Per farlo, puoi scrivere più
CREATE MODEL
query, ma questa può essere una procedura tediosa e lunga, soprattutto se hai un numero elevato di serie temporali. In alternativa, puoi utilizzare una singola query per creare e adattare un insieme di modelli di serie temporali al fine di prevedere più serie temporali contemporaneamente.
Nella seguente query, la clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica che stai creando un modello di serie temporali basato su ARIMA. Utilizza l'opzione time_series_id_col
del comando CREATE MODEL
per specificare una o più colonne nei dati di input per le quali vuoi ottenere le previsioni, in questo caso la stazione Citi Bike, rappresentata dalla colonna start_station_name
. Utilizza la clausola WHERE
per limitare le stazioni di partenza a quelle con Central Park
nei nomi. L'opzione auto_arima_max_order
dell'istruzione CREATE MODEL
controlla lo spazio di ricerca per l'ottimizzazione degli iperparametri nell'algoritmo auto.ARIMA
. L'opzione decompose_time_series
del comando CREATE MODEL
ha per impostazione predefinita il valore TRUE
, in modo che le informazioni sui dati delle serie temporali vengano restituite quando valuti il modello nel passaggio successivo.
Per creare il modello:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
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;
Il completamento della query richiede circa 24 secondi, dopodiché il
nyc_citibike_arima_model_group
modello viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
, non vengono visualizzati i risultati della query.
Questa query crea dodici modelli di serie temporali, uno per ciascuna delle dodici
stazione di partenza di Citi Bike nei dati di input. Il costo in termini di tempo, circa 24 secondi, è solo 1,4 volte superiore a quello della creazione di un singolo modello di serie temporali a causa del parallelismo. Tuttavia, se rimuovi la clausolaWHERE ... LIKE ...
, ci sarebbero più di 600 serie temporali da prevedere e non verrebbero previste completamente in parallelo a causa delle limitazioni della capacità degli slot. In questo caso, la query richiederà circa 15 minuti per essere completata. Per ridurre il tempo di esecuzione della query con il compromesso di un potenziale lieve calo della qualità del modello, puoi diminuire il valore dell'opzione auto_arima_max_order
a 3
o 4
dal valore predefinito di 5
.
In questo modo, lo spazio di ricerca dell'ottimizzazione degli iperparametri nell'algoritmo auto.ARIMA
viene ridotto. Per ulteriori informazioni, consulta
Large-scale time series forecasting best practices
.
Valuta il modello
Valuta il modello di serie temporali utilizzando la funzione ML.ARIMA_EVALUATE
. La funzione ML.ARIMA_EVALUATE
mostra le metriche di valutazione generate per il modello 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 seguente query e fai clic su Esegui:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
I risultati dovrebbero essere simili ai seguenti:
La colonna
start_station_name
identifica la colonna di dati di input per la quale sono state create le serie temporali. Si tratta della colonna specificata nell'opzionetime_series_id_col
dell'istruzioneCREATE MODEL
.Le colonne di output
non_seasonal_p
,non_seasonal_d
,non_seasonal_q
ehas_drift
definiscono un modello ARIMA nella pipeline di addestramento. Le colonne di outputlog_likelihood
,AIC
evariance
sono pertinenti alla procedura di adattamento del modello ARIMA.La procedura di adattamento determina il miglior modello ARIMA utilizzando l'algoritmoauto.ARIMA
, uno per ogni serie temporale.L'algoritmo
auto.ARIMA
utilizza il test KPSS per determinare il valore migliore pernon_seasonal_d
, che in questo caso è1
. Quandonon_seasonal_d
è1
, l'algoritmo auto.ARIMA addestra in parallelo 42 diversi modelli ARIMA candidati. In questo esempio, tutti e 42 i modelli candidati sono validi, pertanto 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 restituito in ordine crescente in base all'AIC. Il modello nella prima riga ha il valore AIC più basso ed è considerato il migliore. Questo modello migliore viene salvato come modello finale e viene utilizzato quando chiamiML.FORECAST
,ML.EVALUATE
eML.ARIMA_COEFFICIENTS
come mostrato nei passaggi che seguono.La colonna
seasonal_periods
contiene informazioni sul pattern stagionale identificato nei dati delle serie temporali. Ogni serie temporale può avere modelli stagionali diversi. Ad esempio, dalla figura puoi vedere che una serie temporale ha un andamento annuale, mentre altre no.Le colonne
has_holiday_effect
,has_spikes_and_dips
ehas_step_changes
vengono compilate solo quandodecompose_time_series=TRUE
. Queste colonne riflettono anche informazioni sui dati delle serie temporali di input e non sono correlate alla definizione del modello ARIMA. Queste colonne hanno anche gli stessi valori in tutte le righe di output.Per ulteriori informazioni sulle colonne di output, consulta la funzione
ML.ARIMA_EVALUATE
.
Sebbene auto.ARIMA
valuti dozzine di modelli ARIMA candidati per ogni serie temporale, per impostazione predefinita auto.ARIMA
genera solo le informazioni del miglior modello per rendere compatta la tabella di output.ML.ARIMA_EVALUATE
Per visualizzare tutti i modelli candidati,
puoi impostare l'argomento show_all_candidate_model
della funzione ML.ARIMA_EVALUATE
su TRUE
.
Controllare i coefficienti del modello
Controlla 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 seguente query e fai clic su Esegui:
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
Il completamento della query richiede meno di un secondo. I risultati dovrebbero essere simili ai seguenti:
La colonna
start_station_name
identifica la colonna di dati di input per la quale sono state create le serie temporali. Si tratta della colonna specificata nell'opzionetime_series_id_col
dell'istruzioneCREATE MODEL
.La colonna di output
ar_coefficients
mostra i coefficienti del modello della parte autoregressiva (AR) del modello ARIMA. Analogamente, la colonna di outputma_coefficients
mostra i coefficienti del modello della parte media mobile (MA) del modello ARIMA. Entrambe le colonne contengono valori di array, le cui lunghezze sono uguali rispettivamente anon_seasonal_p
enon_seasonal_q
. Il valoreintercept_or_drift
è il termine costante nel modello ARIMA.Per ulteriori informazioni sulle colonne di output, consulta la 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(3 AS horizon, 0.9 AS confidence_level)
indica che la query prevede tre punti di tempo futuri e genera un intervallo di previsione con un livello di confidenza del 90%.
Per prevedere i dati con il modello:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
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.
La query richiede meno di un secondo. I risultati dovrebbero essere simili ai seguenti:
La prima colonna,
start_station_name
, annota la serie temporale a cui è adattato ogni modello di serie temporale. Ognistart_station_name
contiene tre righe di risultati previsti, come specificato dal valorehorizon
.Per ogni
start_station_name
, le righe di output sono in ordine cronologico in base al valore della colonnaforecast_timestamp
. Nella previsione delle serie temporali, l'intervallo di previsione, rappresentato dai valori delle colonneprediction_interval_lower_bound
eprediction_interval_upper_bound
, è importante quanto il valore della colonnaforecast_value
. Il valoreforecast_value
è il punto medio dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonnestandard_error
econfidence_level
.Per ulteriori informazioni sulle colonne di output, consulta la funzione
ML.FORECAST
.
Spiega i risultati della previsione
Puoi ottenere le metriche di spiegabilità oltre ai dati di previsione utilizzando la funzione
ML.EXPLAIN_FORECAST
. La funzione ML.EXPLAIN_FORECAST
prevede i valori futuri delle serie temporali e restituisce anche tutti i componenti distinti della serie temporale. Se vuoi solo restituire i dati di previsione, utilizza la funzione ML.FORECAST
come mostrato in
Utilizzare il modello per prevedere i dati.
La clausola STRUCT(3 AS horizon, 0.9 AS confidence_level)
utilizzata nella funzione ML.EXPLAIN_FORECAST
indica che la query prevede 3 punti di tempo futuri e genera un intervallo di previsione con un livello di confidenza del 90%.
Per spiegare i risultati del modello:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level));
Il completamento della query richiede meno di un secondo. I risultati dovrebbero essere simili ai seguenti:
Le prime migliaia di righe restituite sono tutte costituite da dati storici. Devi scorrere i risultati per visualizzare i dati di previsione.
Le righe di output vengono ordinate prima per
start_station_name
, poi in ordine cronologico in base al valore della colonnatime_series_timestamp
. Nella previsione delle serie temporali, l'intervallo di previsione, rappresentato dai valori delle colonneprediction_interval_lower_bound
eprediction_interval_upper_bound
, è importante quanto il valore della colonnaforecast_value
. Il valoreforecast_value
è il punto medio dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonnestandard_error
econfidence_level
.Per ulteriori informazioni sulle colonne di output, consulta
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.
Eliminare 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.
Nella barra 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, conferma il comando di eliminazione digitando il nome del set di dati (
bqml_tutorial
) e poi fai clic su Elimina.
Elimina il progetto
Per eliminare il progetto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
- Scopri come prevedere una singola serie temporale con un modello univariabile
- Scopri come prevedere una singola serie temporale con un modello multivariabile
- Scopri come eseguire il scaling di un modello univariabile quando prevedi più serie temporali su molte righe.
- Scopri come prevedere in modo gerarchico più serie temporali con un modello univariabile
- Per una panoramica di BigQuery ML, consulta Introduzione all'AI e all'apprendimento automatico in BigQuery.