Limitare i valori previsti per un modello di serie temporali
Questo tutorial insegna a utilizzare i limiti per restringere i risultati previsti restituiti da un modello di serie temporali. In questo tutorial, creerai due modelli di serie temporali sugli stessi dati: un modello che utilizza i limiti e un modello che non utilizza limiti. Questo ti consente di confrontare i risultati restituiti dai modelli e capire la differenza che fa la specifica dei limiti.
Puoi utilizzare
new_york.citibike_trips
per addestrare i modelli in questo tutorial. Questo set di dati contiene informazioni sui viaggi in Citi bike a New York.
Prima di seguire questo tutorial, dovresti avere familiarità con la previsione di serie temporali singole. Completa la Tutorial: previsione di serie temporali singole dai dati di Google Analytics per un'introduzione a questo argomento.
Autorizzazioni richieste
- Per creare il set di dati, è necessario il
bigquery.datasets.create
Autorizzazione IAM. 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 ulteriori informazioni su ruoli e autorizzazioni IAM in per BigQuery, consulta Introduzione a IAM.
Obiettivi
In questo tutorial utilizzerai quanto segue:
- La
CREATE MODEL
per creare un modello di serie temporali. - La
ML.FORECAST
funzione: 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 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.
-
Attiva l'API BigQuery.
-
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.
-
Attiva l'API BigQuery.
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 tuo progetto.
Fai clic su
Visualizza azioni > Crea il 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 nell'
US
più regioni. Per semplicità, per archiviare il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea il set di dati.
Visualizza le serie temporali per cui vuoi eseguire la previsione
Prima di creare il modello, è utile vedere quale serie temporale di input .
Nella query seguente, FROM bigquery-public-data.new_york.citibike_trips
indica che viene eseguita una query sulla tabella citibike_trips
nel
new_york
set di dati.
Nell'istruzione SELECT
, la query utilizza la classe
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'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. I risultati della query sono simili ai seguenti.
Utilizzare la console Google Cloud per creare un grafico per i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico. Nel riquadro Configurazione grafico, scegli Barra per Tipo di grafico:
crea un modello di serie temporali
Creare un modello di serie temporali utilizzando i dati relativi alle corse della Citi bike a New York.
La seguente query GoogleSQL crea un modello che prevede il totale giornaliero
gite in bici. La 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;
OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica che viene creata
Basato su ARIMA
modello di serie temporale. Per impostazione predefinita,
auto_arima=TRUE
,
quindi l'algoritmo auto.ARIMA
regola automaticamente gli iperparametri in
ARIMA_PLUS
modelli. L'algoritmo si adatta a decine di modelli candidati e sceglie
il migliore con il minimo
Criterio delle informazioni Akaike (AIC).
Inoltre, poiché il valore predefinito è
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 le parti della cronologia sia quelle di previsione della serie temporale vengono salvate nel modello. L'impostazione del parametro time_series_id_col = 'start_station_id'
fa sì che il modello si 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 componenti delle serie temporali separate, come 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 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 modello (
nyc_citibike_arima_model
) viene visualizzato nel riquadro Explorer. Poiché usa un'istruzioneCREATE MODEL
per creare un modello, non sono presenti i risultati della query.
Prevedere le serie temporali e visualizzare i risultati
Per spiegare come vengono previste le serie temporali, visualizza tutte le serie temporali secondarie
quali la stagionalità e le tendenze, utilizzando
ML.FORECAST
personalizzata.
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 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:
Utilizzare la console Google Cloud per creare un grafico per i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico:
Il grafico mostra che i valori previsti per il numero totale giornaliero di Citi
Corse in bicicletta in cui start_station_id=79
sono numeri negativi, il che non è utile. L'utilizzo di un modello con limiti migliora i dati previsti.
Creare un modello di serie temporali con limiti
Creare un modello di serie temporali con dei limiti, utilizzando i dati sulle corse della Citi bike a New York.
La seguente query GoogleSQL crea un modello che prevede il totale giornaliero
gite in bici. La CREATE MODEL
crea e addestra un modello denominato bqml_tutorial.nyc_citibike_arima_model_with_limits
.
La differenza fondamentale tra questo modello e quello creato in precedenza è l'aggiunta dell'opzione forecast_limit_lower_bound=0
. Questa opzione fa sì che il modello preveda solo valori superiori a 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 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 modello (
nyc_citibike_arima_model_with_limits
) viene visualizzato nel riquadro Explorer. Poiché usa un'istruzioneCREATE MODEL
per creare un modello, non sono presenti i risultati della query.
Prevedere le serie temporali utilizzando il modello con limiti
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'editor 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.
Utilizzare la console Google Cloud per creare un grafico per i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico:
Il modello ARIMA PLUS rileva che il numero totale giornaliero di viaggi in Citi bike in cui start_station_id=79
è in diminuzione. I valori di previsione futuri seguiranno questa tendenza e restituiranno numeri di previsione relativamente minori più a lungo nel futuro. Il grafico mostra che i valori previsti per il numero totale giornaliero di Citi
Gite in bicicletta in cui i start_station_id=79
sono numeri positivi, il che è più utile. Il modello con limiti
rileva che il numero totale giornaliero di viaggi in Citi bike in cui start_station_id=79
è in diminuzione, 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 durante la previsione dei prezzi delle azioni o dei numeri di vendita futuri.
Elimina il set di dati
L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle nel progetto. Se se preferisci riutilizzare il progetto, puoi eliminare il set di dati creato tutorial:
Se necessario, apri la pagina BigQuery nel 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 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, digita per confermare il comando di eliminazione 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.
Whatsnext
- Scopri come eseguire previsioni per più serie temporali con una singola query dai dati sulle corse di NYC Citi Bike.
- 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 saperne di più sulla console Google Cloud, consulta Utilizzo della console Google Cloud.