Limitare i valori previsti per un modello di serie temporali
Questo tutorial ti insegna a utilizzare i limiti per restringere i risultati di previsione restituiti da un modello di serie temporali. In questo tutorial crei due modelli di serie temporali sugli stessi dati, uno che utilizza i limiti e uno che non li utilizza. In questo modo puoi confrontare i risultati restituiti dai modelli e capire la differenza che fa la specifica dei limiti.
Utilizza i dati di new_york.citibike_trips
per addestrare i modelli in questo tutorial. Questo set di dati contiene informazioni sui viaggi in bicicletta di Citi Bike a New York.
Prima di seguire questo tutorial, devi avere familiarità con la previsione di una singola serie temporale. Per un'introduzione a questo argomento, completa il tutorial sulla previsione di una singola serie temporale dai dati di Google Analytics.
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.
Obiettivi
In questo tutorial utilizzi quanto segue:
- L'istruzione
CREATE MODEL
per creare un modello di serie temporali. - 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
- 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.
-
Enable the BigQuery API.
-
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.
-
Enable the BigQuery API.
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.
Visualizza la serie temporale di cui vuoi fare la previsione
Prima di creare il modello, è utile vedere come appare la serie temporale di input.
Nella query seguente, la clausola FROM bigquery-public-data.new_york.citibike_trips
indica che stai eseguendo una query sulla tabella citibike_trips
nel
new_york
set di dati.
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 corse in bicicletta di Citi Bike.
#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, svolgi i seguenti passaggi:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'editor di 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. I risultati della query sono simili al seguente.
Utilizza la console Google Cloud per creare un grafico dei dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico. Nel riquadro Configurazione del grafico, scegli A barre per il Tipo di grafico:
Creare un modello di serie temporali
Crea un modello di serie temporali utilizzando i dati dei viaggi di NYC Citi Bike.
La seguente query GoogleSQL crea un modello che prevede il numero totale giornaliero di viaggi in bicicletta. L'istruzione 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', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
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 dozzine di modelli candidati e sceglie quello migliore con il criterio di informazione di Akaike (AIC) più basso.
Inoltre, poiché il valore predefinito è data_frequency='AUTO_FREQUENCY'
, la procedura di addestramento deduce automaticamente la frequenza dei dati della serie temporale di input. L'istruzione CREATE MODEL
utilizza
decompose_time_series=TRUE
per impostazione predefinita, pertanto sia la cronologia sia le parti di previsione della serie temporale vengono salvate nel modello. L'impostazione del parametro time_series_id_col = 'start_station_id'
consente al modello di adattarsi e prevedere più serie temporali utilizzando una singola query basata su start_station_id
. Puoi utilizzare queste informazioni per comprendere ulteriormente come viene prevista la serie temporale recuperando i componenti delle serie temporali distinti, ad esempio i periodi stagionali.
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'editor di 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', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Fai clic su Esegui.
Il completamento della query richiede circa 80 secondi, dopodiché il tuo modello (
nyc_citibike_arima_model
) viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.
Prevedi la serie temporale e visualizza i risultati
Per spiegare come viene effettuata la previsione della serie temporale, visualizza tutti i componenti della serie temporale secondaria, come la stagionalità e la tendenza, utilizzando la funzione
ML.FORECAST
.
A tale scopo, procedi nel seguente modo:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'editor di query.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id
Fai clic su Esegui. I risultati della query sono simili ai seguenti:
Utilizza la console Google Cloud per creare un grafico dei dati delle serie temporali. Nel riquadro Risultati query, fai clic sulla scheda Grafico:
Il grafico mostra che i valori previsti per il numero totale giornaliero di corse CitiBike in cui start_station_id=79
sono numeri negativi, il che non è utile. L'utilizzo di un modello con limiti migliora invece i dati previsti.
Creare un modello di serie temporali con limiti
Crea un modello di serie temporali con limiti utilizzando i dati dei viaggi di NYC Citi Bike.
La seguente query GoogleSQL crea un modello che prevede il numero totale giornaliero di viaggi in bicicletta. L'istruzione CREATE MODEL
crea e addestra un modello denominato bqml_tutorial.nyc_citibike_arima_model_with_limits
.
La differenza principale tra questo modello e il modello creato in precedenza è l'aggiunta dell'opzione forecast_limit_lower_bound=0
. Questa opzione fa sì che il modello preveda solo valori maggiori di 0, in base ai valori della colonna specificata dall'argomento time_series_data_col
, in questo caso num_trips
.
#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', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
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'editor di 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', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Fai clic su Esegui.
Il completamento della query richiede circa 100 secondi, dopodiché il tuo modello (
nyc_citibike_arima_model_with_limits
) viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.
Fai una previsione della serie temporale utilizzando il modello con limiti
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'editor di query.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id ORDER BY forecast_timestamp,start_station_id
Fai clic su Esegui.
Utilizza la console Google Cloud per creare un grafico dei dati delle serie temporali. Nel riquadro Risultati query, fai clic sulla scheda Grafico:
Il modello ARIMA PLUS rileva che il numero totale giornaliero di corse in bicicletta Citi Bike in cui start_station_id=79
è in calo. I valori di previsione futuri seguiranno questa tendenza e daranno numeri di previsione relativamente più piccoli man mano che si va avanti nel futuro. Il grafico mostra che i valori previsti per il numero totale giornaliero di corse CitiBike in cui start_station_id=79
sono numeri positivi, il che è più utile. Il modello con limiti
rileva che il numero totale giornaliero di corse in bicicletta Citi Bike in cui start_station_id=79
è in calo, ma fornisce comunque valori di previsione significativi.
Come mostrato in questo tutorial, le opzioni forecast_limit_lower_bound
e forecast_limit_upper_bound
possono aiutarti a ottenere valori di previsione più significativi in scenari simili a quello mostrato qui, ad esempio quando prevedi i prezzi delle azioni o i numeri di vendite future.
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 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 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 eseguire più previsioni di serie temporali con una singola query dai dati dei viaggi di Citi Bike di New York.
- Scopri come accelerare ARIMA_PLUS per prevedere 1 milione di serie temporali in poche ore.
- Per saperne di più sul machine learning, consulta Machine Learning Crash Course.
- Per una panoramica di BigQuery ML, consulta Introduzione a BigQuery ML.
- Per scoprire di più sulla console Google Cloud, consulta Utilizzare la console Google Cloud.