Limita i valori previsti per un modello di serie temporali ARIMA_PLUS
Questo tutorial spiega come utilizzare i limiti per restringere i risultati previsti restituiti da un modello di serie temporali ARIMA_PLUS. In questo tutorial creerai 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 comprendere la differenza che comporta la specifica dei limiti.
Utilizza i dati new_york.citibike_trips per addestrare i modelli in questo tutorial. Questo set di dati contiene informazioni sulle corse di Citi Bike a New York City.
Prima di seguire questo tutorial, dovresti avere familiarità con la previsione di singole serie temporali. Per un'introduzione a questo argomento, completa il tutorial Previsione di serie temporali singole dai dati di Google Analytics.
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.
Obiettivi
In questo tutorial utilizzerai 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 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.
Enable the BigQuery API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
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" } }
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery per l'utilizzo di BigQuery DataFrames. Per saperne di più, consulta la documentazione di riferimento di BigQuery DataFrames.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale.
Visualizza la serie temporale di cui vuoi eseguire la previsione
Prima di creare il modello, è utile vedere l'aspetto della serie temporale di input.
SQL
Nella query seguente, la clausola FROM bigquery-public-data.new_york.citibike_trips indica che stai eseguendo 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 corse 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, segui questi 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 ai seguenti.
Utilizza la console Google Cloud per creare un grafico dei dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Visualizzazione. Nel riquadro Configurazione della visualizzazione, scegli Barra per Tipo di visualizzazione:
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery per l'utilizzo di BigQuery DataFrames. Per saperne di più, consulta la documentazione di riferimento di BigQuery DataFrames.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale.
Nell'esempio seguente, bigquery-public-data.new_york.citibike_trips indica che stai eseguendo una query sulla tabella citibike_trips nel set di dati new_york.
Il risultato è simile al seguente:
Crea un modello di serie temporali
Creare un modello di serie temporali utilizzando i dati dei percorsi di NYC Citi Bike.
La seguente query GoogleSQL crea un modello che prevede il numero totale giornaliero di corse 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 decine di modelli candidati e sceglie quello migliore con il valore più basso di Akaike Information Criterion (AIC).
Inoltre, poiché l'impostazione predefinita è data_frequency='AUTO_FREQUENCY', il processo 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, quindi sia la parte della cronologia che quella della previsione della serie temporale vengono salvate nel modello. L'impostazione del parametro time_series_id_col = 'start_station_id' fa sì che il modello adatti e preveda più serie temporali utilizzando una singola query basata su start_station_id. Puoi utilizzare queste informazioni per comprendere meglio come viene prevista la serie temporale recuperando i singoli componenti della serie temporale, 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é puoi accedere al modello (
nyc_citibike_arima_model). Poiché la query utilizza un'istruzioneCREATE MODELper creare un modello, non sono presenti risultati della query.
Prevedi la serie temporale e visualizza i risultati
Per spiegare come viene prevista la serie temporale, visualizza tutti i componenti delle serie temporali secondarie, come la stagionalità e la tendenza, utilizzando la funzione ML.FORECAST.
A questo 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 delle query, fai clic sulla scheda Visualizzazione:
Il grafico mostra che i valori previsti per il numero totale giornaliero di corse Citi Bike in cui start_station_id=79 sono numeri negativi, il che non è utile. L'utilizzo di un modello con limiti, invece, migliora i dati previsti.
Crea un modello di serie temporali con limiti
Crea un modello di serie temporali con limiti utilizzando i dati dei percorsi di Citi Bike di New York.
La seguente query GoogleSQL crea un modello che prevede il numero totale giornaliero di corse 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 che hai 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 nella 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é puoi accedere al modello (
nyc_citibike_arima_model_with_limits). Poiché la query utilizza un'istruzioneCREATE MODELper creare un modello, non sono presenti risultati della query.
Prevedi la 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
Fai clic su Esegui.
Utilizza la console Google Cloud per creare un grafico dei dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Visualizzazione:
Il modello ARIMA PLUS rileva che il numero totale giornaliero di corse Citi Bike in cui start_station_id=79 sta diminuendo. I valori di previsione futuri seguiranno questa tendenza e forniranno 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 Citi Bike 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 Citi Bike in cui start_station_id=79 sta diminuendo, ma fornisce comunque valori di previsione significativi.
Come mostra 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 delle vendite future.
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 eseguire la previsione di più serie temporali con una singola query dai dati dei tragitti di Citi Bike di New York.
- Scopri come accelerare ARIMA_PLUS per consentire la previsione di 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 Utilizzo della console Google Cloud .