Prevedere serie temporali gerarchiche con un modello univariato ARIMA_PLUS
Questo tutorial ti insegna a utilizzare un
ARIMA_PLUS
modello di serie temporali univariate
per prevedere serie temporali gerarchiche. Prevede il valore futuro
per una determinata colonna in base ai valori storici della colonna
e calcola anche i valori aggregati per la colonna per una o più dimensioni di
interesse.
I valori previsti vengono calcolati per ogni punto temporale, per ogni valore in una o più colonne che specificano le dimensioni di interesse. Ad esempio, se volessi prevedere gli incidenti stradali giornalieri e hai specificato una colonna della dimensione contenente dati statali, i dati previsti conterranno i valori per ogni giorno per lo stato A, poi i valori per ogni giorno per lo stato B e così via. Se volessi prevedere gli incidenti stradali giornalieri e le colonne delle dimensioni specificate contenenti dati relativi a stati e città, i dati previsti conterrebbero i valori per ogni giorno per lo stato A e la città A, poi i valori per ogni giorno per lo stato A e la città B e così via. Nei modelli di serie temporali gerarchiche, la riconciliazione gerarchica viene utilizzata per aggregare e riconciliare ogni serie temporale secondaria con la relativa serie temporale principale. Ad esempio, la somma dei valori previsti per tutte le città dello stato A deve essere uguale al valore previsto per lo stato A.
In questo tutorial crei due modelli di serie temporali sugli stessi dati, uno che utilizza la previsione gerarchica e uno che non la utilizza. In questo modo puoi confrontare i risultati restituiti dai modelli.
Questo tutorial utilizza i dati della tabella pubblica
bigquery-public-data.iowa_liquor.sales.sales
. Questa tabella contiene informazioni su oltre 1 milione di prodotti di liquori in diversi negozi che utilizzano i dati pubblici sulle vendite di alcolici dell'Iowa.
Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Prevedere più serie temporali con un modello univariabile.
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.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
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:
- Creazione di un modello di serie temporali multiple e di un modello di serie temporali gerarchiche multiple per prevedere i valori delle vendite di bottiglie utilizzando l'istruzione
CREATE MODEL
. - Recuperare i valori delle vendite di bottiglie previsti dai modelli utilizzando la
funzione
ML.FORECAST
.
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.
- 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.
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).
Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Crea un set di dati denominato
bqml_tutorial
con la posizione dei dati impostata suUS
e una descrizione diBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anziché utilizzare il flag
--dataset
, il comando utilizza la scorciatoia-d
. Se ometti-d
e--dataset
, il comando crea per impostazione predefinita un set di dati.Verifica che il set di dati sia stato creato:
bq ls
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.liquor_forecast` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
Il completamento della query richiede circa 37 secondi, dopodiché il
liquor_forecast
modello viene visualizzato nel riquadro Esplora. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.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.liquor_forecast`, STRUCT(20 AS horizon, 0.8 AS confidence_level)) ORDER BY store_number, county, city, zip_code, forecast_timestamp;
I risultati dovrebbero essere simili ai seguenti:
L'output inizia con i dati di previsione per la prima serie temporale:
store_number=2190
,zip_code=50314
,city=DES MOINES
,county=POLK
. Man mano che scorri i dati, vengono visualizzate le previsioni per ogni serie temporale univoca successiva. Per generare previsioni che aggregano i totali per diverse dimensioni, ad esempio le previsioni per un determinato paese, devi generare una previsione gerarchica.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.liquor_forecast_hierarchical` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
Il completamento della query richiede circa 45 secondi, dopodiché il
bqml_tutorial.liquor_forecast_hierarchical
viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.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.liquor_forecast_hierarchical`, STRUCT(30 AS horizon, 0.8 AS confidence_level)) WHERE city = 'LECLAIRE' ORDER BY county, city, zip_code, store_number, forecast_timestamp;
I risultati dovrebbero essere simili ai seguenti:
Notare come viene visualizzata la previsione aggregata per la città di LeClaire,
store_number=NULL
,zip_code=NULL
,city=LECLAIRE
,county=SCOTT
. Mentre esamini le altre righe, osserva le previsioni per gli altri sottogruppi. Ad esempio, l'immagine seguente mostra le previsioni aggregate per il codice postale52753
,store_number=NULL
,zip_code=52753
,city=LECLAIRE
,county=SCOTT
:- Puoi eliminare il progetto che hai creato.
- In alternativa, puoi conservare il progetto ed eliminare il set di dati.
Se necessario, apri la pagina BigQuery nella consoleGoogle 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.- 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.
- Scopri come prevedere una singola serie temporale con un modello univariabile
- Scopri come prevedere più serie temporali con un modello univariato
- Scopri come eseguire la scalabilità di un modello univariabile quando prevedi più serie temporali su molte righe.
- Scopri come prevedere una singola serie temporale con un modello multivariabile
- Per una panoramica di BigQuery ML, consulta Introduzione all'AI e all'apprendimento automatico in BigQuery.
Crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML.
Console
bq
Per creare un nuovo set di dati, utilizza il comando
bq mk
con il flag --location
. Per un elenco completo dei possibili parametri, consulta la documentazione di riferimento del comando bq mk --dataset
.
API
Chiama il metodo datasets.insert
con una risorsa set di dati definita.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per effettuare l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare ADC per un ambiente di sviluppo locale.
Creare un modello di serie temporali
Crea un modello di serie temporali utilizzando i dati sulle vendite di alcolici in Iowa.
La seguente query GoogleSQL crea un modello che prevede il numero totale giornaliero di bottiglie vendute nel 2015 nei contee di Polk, Linn e Scott.
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
dell'istruzione CREATE MODEL
per specificare una o più colonne nei dati di input
per le quali vuoi ottenere le previsioni. 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.
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 il migliore, ovvero il modello con il criterio di informazione di Akaike (AIC) più basso.
L'impostazione dell'opzione holiday_region
su US
consente una definizione del modello più accurata per i punti di tempo delle festività degli Stati Uniti se nella serie temporale sono presenti modelli di festività degli Stati Uniti.
Per creare il modello:
Utilizza il modello per prevedere i dati
Prevedi i valori futuri delle serie temporali utilizzando la funzione ML.FORECAST
.
Nella query seguente, la clausola STRUCT(20 AS horizon, 0.8 AS confidence_level)
indica che la query prevede 20 punti temporali futuri e genera un intervallo di previsione con un livello di confidenza dell'80%.
Per prevedere i dati con il modello:
Creare un modello di serie temporali gerarchico
Crea una previsione delle serie temporali gerarchiche utilizzando i dati sulle vendite di alcolici in Iowa.
La seguente query GoogleSQL crea un modello che genera predizioni gerarchiche per il numero totale giornaliero di bottiglie vendute nel 2015 nelle contee di Polk, Linn e Scott.
Nella seguente query, l'opzione HIERARCHICAL_TIME_SERIES_COLS
nell'istruzione
CREATE MODEL
indica che stai creando una previsione gerarchica
in base a un insieme di colonne specificate. Ognuna di queste colonne viene raggruppata
e aggregata. Ad esempio, dalla query precedente, il valore della colonna store_number
viene aggregato per mostrare le previsioni per ogni valore county
,city
e zip_code
. Separatamente, anche i valori zip_code
e store_number
vengono aggregati per mostrare le previsioni per ciascun valore county
e city
.
L'ordine delle colonne è importante perché definisce la struttura della gerarchia.
Per creare il modello:
Utilizzare il modello gerarchico per prevedere i dati
Recupera i dati di previsione gerarchici dal modello utilizzando la funzione ML.FORECAST
.
Per prevedere i dati con il modello:
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.
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:
Elimina il progetto
Per eliminare il progetto: