Limitare i valori previsti per un modello di serie temporale
Questo tutorial insegna a utilizzare i limiti per restringere i risultati previsti restituiti da un modello di serie temporale. In questo tutorial creerai due modelli di serie temporali sugli stessi dati: un modello che utilizza i limiti e l'altro che non li utilizza. In questo modo puoi confrontare i risultati restituiti dai modelli e capire la differenza.
I dati di new_york.citibike_trips
verranno utilizzati per addestrare i modelli in questo tutorial. Questo set di dati contiene informazioni sulle corse Citi Bike a New York.
Prima di seguire questo tutorial, dovresti aver acquisito 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 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 sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Obiettivi
In questo tutorial, utilizzerai:
- L'istruzione
CREATE MODEL
: consente di 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 la pagina relativa ai 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.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API BigQuery.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
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 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 in
US
più regioni. Per semplicità, memorizza il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Visualizza le serie temporali per le quali vuoi eseguire la previsione
Prima di creare il modello, è utile vedere l'aspetto delle serie temporali 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 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 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 tracciare i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico. Nel riquadro Configurazione grafico, scegli Barra come Tipo di grafico:
Creare un modello di serie temporale
Crea un modello di serie temporali utilizzando i dati delle corse NYC Citi Bike.
La seguente query GoogleSQL crea un modello che prevede le corse giornaliere totali 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' ) AS SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date
La clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica che stai creando un modello di serie temporale basato su
ARIMA. Per impostazione predefinita, auto_arima=TRUE
, l'algoritmo auto.ARIMA
ottimizza automaticamente gli iperparametri nei modelli ARIMA_PLUS
. L'algoritmo si adatta a decine di modelli candidati e sceglie il migliore con il criterio informativo di Akaike (AIC) più basso.
Inoltre, poiché il valore predefinito è data_frequency='AUTO_FREQUENCY'
, il processo di addestramento deduce automaticamente la frequenza dei dati delle serie temporali di input. Infine, l'istruzione CREATE MODEL
utilizza
decompose_time_series=TRUE
per impostazione predefinita, quindi entrambe le parti della cronologia e della previsione della serie temporale vengono salvate nel modello. Puoi utilizzare queste informazioni per comprendere meglio come vengono previste le serie temporali recuperando i componenti separati delle serie temporali, come i periodi stagionali.
Esegui la query CREATE MODEL
per creare e addestrare il tuo 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' ) AS SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' 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 riquadro Spazio di esplorazione. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.
Prevedere le serie temporali e visualizzare i risultati
Per spiegare come vengono previste le serie temporali, utilizza la funzione ML.FORECAST
per visualizzare tutti i componenti delle serie temporali secondarie, come stagionalità e tendenza.
A tale scopo, proceda 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, 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 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 FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name ) )) ORDER BY forecast_timestamp
Fai clic su Esegui. I risultati della query sono simili ai seguenti:
Utilizza la console Google Cloud per tracciare 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 corse Citi Bike sono numeri negativi, il che non è utile. L'utilizzo di un modello con limiti invece migliora i dati di previsione.
Creare un modello di serie temporale con limiti
Crea un modello di serie temporali con limiti, utilizzando i dati delle corse NYC Citi Bike.
La seguente query GoogleSQL crea un modello che prevede le corse giornaliere totali in bicicletta. L'istruzione CREATE MODEL
crea e addestra un modello denominato bqml_tutorial.nyc_citibike_arima_model_with_limits
.
L'unica differenza 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.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_with_limits` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', forecast_limit_lower_bound = 0 ) AS SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date
Esegui la query CREATE MODEL
per creare e addestrare il tuo 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_with_limits` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', forecast_limit_lower_bound = 0 ) AS SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date
Fai clic su Esegui.
Il completamento della query richiede circa 17 secondi, dopodiché il modello (
nyc_citibike_arima_model_with_limits
) viene visualizzato nel riquadro Spazio di esplorazione. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono 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, 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 FROM ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_with_limits`, 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 FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name ) )) ORDER BY forecast_timestamp
Fai clic su Esegui.
Utilizza la console Google Cloud per tracciare 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 corse Citi Bike è in calo. I valori di previsione futuri seguiranno questa tendenza e forniranno cifre di previsione relativamente ridotte man mano che si procede. Il grafico mostra che i valori previsti per il numero totale giornaliero di corse Citi Bike sono numeri positivi, il che è più utile. Il modello con limiti rileva che il numero totale giornaliero di corse Citi Bike è in calo, ma fornisce comunque valori di previsione significativi.
Come illustrato 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 per la previsione di prezzi azionari o dati 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 preferisci riutilizzare il progetto, puoi eliminare il set di dati che hai 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
), 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.
Cosa succederà
- Scopri come eseguire più previsioni di serie temporali utilizzando una singola query dai dati delle corse NYC Citi Bike.
- Scopri come accelerare ARIMA_PLUS per effettuare previsioni su 1 milione di serie temporali in poche ore.
- Per saperne di più sul machine learning, consulta il corso intensivo sul machine learning.
- 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.