Previsione gerarchica di serie temporali
Questo tutorial spiega come generare una serie temporale gerarchica. In questo tutorial creerai due modelli di serie temporali sugli stessi dati, uno dei quali utilizza la previsione gerarchica e l'altro no. Ciò consente di confrontare i risultati restituiti dai modelli.
Userai i dati di iowa_liquor.sales.sales
per addestrare i modelli in questo tutorial. Questo set di dati contiene informazioni per oltre 1 milione di liquori venduti in diversi negozi utilizzando i dati pubblici sulle vendite di liquori dell'Iowa.
Prima di seguire questo tutorial, dovresti acquisire familiarità con la previsione di più serie temporali. Per un'introduzione a questo argomento, completa il tutorial Previsione di più serie temporali 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
: per creare un modello di serie temporale e un modello gerarchico di serie temporali. - La funzione
ML.FORECAST
consente di prevedere le vendite 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
- 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, 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 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.
Riconciliazione gerarchica
Le previsioni di serie temporali spesso possono essere suddivise o aggregate in base a diverse dimensioni di interesse. Queste sono note come serie temporali gerarchiche. Ad esempio, i dati del censimento che rivelano la popolazione totale per stato possono essere suddivisi per città e codice postale. Al contrario, possiamo aggregare i dati per ogni paese o continente.
Esistono diverse tecniche che puoi utilizzare per generare e riconciliare previsioni gerarchiche. Prendiamo l'esempio seguente, che mostra una struttura gerarchica semplificata per le vendite di liquori nello stato dell'Iowa:
Il livello più basso mostra il livello del negozio, seguito dal livello di codice postale, dalla città, dalla contea e infine dallo stato. L'obiettivo delle previsioni gerarchiche è garantire che tutte le previsioni in ogni livello debbano essere riconciliate. Ad esempio, dati i dati precedenti, significa che le previsioni per Clive e Des Moines devono sommarsi a quelle di Polk. Analogamente, le previsioni di Polk, Linn e Scott dovrebbero sommarsi a quelle in Iowa.
Esistono un paio di tecniche comuni che puoi utilizzare per generare previsioni riconciliate per ogni livello. Una tecnica è nota come approccio dal basso verso l'alto. Con questo approccio, le previsioni vengono generate al livello inferiore della gerarchia prima di sommare gli altri livelli. Prendendo l'esempio precedente, le previsioni per ciascun negozio vengono utilizzate per creare i modelli di previsione per gli altri livelli (prima per CAP, seguito per città e così via).
Creare un modello di serie temporale
Innanzitutto, crea un modello di serie temporale utilizzando i dati sulle vendite di liquori in Iowa.
La seguente query GoogleSQL crea un modello che prevede il numero totale giornaliero di bottiglie vendute nel 2015 nelle contee di Polk, Linn e Scott. L'istruzione CREATE MODEL
crea e addestra un modello denominato bqml_tutorial.liquor_forecast
.
#standardSQL 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;
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. L'impostazione dell'opzione holiday_region
su US
consente una definizione del modello più precisa su
questi orari per le festività degli Stati Uniti, se nelle serie temporali esistono tendenze relative alle festività degli Stati Uniti.
Esegui la query CREATE MODEL
per creare e addestrare il tuo modello:
Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.
Inserisci la seguente query GoogleSQL nell'Editor query.
#standardSQL 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;
Fai clic su Esegui.
Il completamento della query richiede circa 37 secondi, dopodiché il modello (
liquor_forecast
) viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non vengono restituiti risultati.
Esaminare i risultati del modello delle serie temporali
Dopo aver creato il modello, puoi utilizzare la funzione ML.FORECAST
per visualizzare i risultati della previsione.
Esegui la funzione ML.FORECAST
sul modello liquor_forecast
specificandolo nella clausola FROM
.
Per impostazione predefinita, questa query restituisce le previsioni per tutte le serie temporali univoche nei dati, identificate dalle colonne store_number
, zip_code
, city
e county
.
Per eseguire la query ML.FORECAST, segui questi passaggi:
Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.
Inserisci la seguente query GoogleSQL nell'Editor query.
#standardSQL 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
Fai clic su Esegui.
L'esecuzione della query dovrebbe richiedere circa 5 secondi. Dopo l'esecuzione della query, l'output mostra i risultati seguenti.
Osserva come viene visualizzata la previsione per la prima serie temporale (store_number=2190, zip_code=50314, city=DES MOINES, County=POLK). Se esamini le altre righe, noterai le previsioni per gli altri gruppi.
In generale, le previsioni vengono generate per ogni serie temporale unica. Per generare previsioni per livelli aggregati, come le previsioni per un determinato paese, devi generare una previsione gerarchica.
Creare un modello di serie temporale con previsioni gerarchiche
Creare una previsione gerarchica delle serie temporali, utilizzando i dati sulle vendite di liquori in Iowa.
La seguente query GoogleSQL crea un modello che genera previsioni gerarchiche per il numero totale giornaliero di bottiglie vendute nel 2015 nelle contee di Polk, Linn e Scott. L'istruzione CREATE MODEL
crea e addestra un modello denominato bqml_tutorial.liquor_forecast_hierarchical
.
#standardSQL 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 parametro HIERARCHICAL_TIME_SERIES_COLS
indica che stai creando una previsione gerarchica basata su un insieme di colonne. Ognuna di queste colonne è aggregata e aggregata. Ad esempio, dalla query precedente, questo significa che store_number
è stato aggregato in modo da mostrare le previsioni per ogni county
, city
e zip_code
. Separatamente, vengono raggruppati anche zip_code
e store_number
per mostrare le previsioni per ogni county
e city
. L'ordine delle colonne è importante perché definisce la struttura della gerarchia.
Esegui la query CREATE MODEL
per creare e addestrare il tuo modello:
Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.
Inserisci la seguente query GoogleSQL nell'Editor query.
#standardSQL 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;
Fai clic su Esegui.
Il completamento della query richiede circa 45 secondi, dopodiché il modello (
bqml_tutorial.liquor_forecast_hierarchical
) viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non vengono restituiti risultati.
Esaminare i risultati del modello gerarchico delle serie temporali
Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.
Inserisci la seguente query GoogleSQL nell'Editor query.
#standardSQL 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
Fai clic su Esegui.
L'esecuzione della query dovrebbe richiedere circa 5 secondi. Dopo l'esecuzione della query, l'output mostra i risultati seguenti.
Osserva come viene visualizzata la previsione aggregata per la città di LeClaire (store_number=NULL, zip_code=NULL, city=LECLAIRE, County=SCOTT). Se esamini le altre righe, noterai le previsioni per gli altri gruppi secondari. Ad esempio, la seguente immagine mostra le previsioni aggregate per il codice postale 52753 (store_number=NULL, zip_code=52753, city=LECLAIRE, County=SCOTT):
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 di 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.
Passaggi successivi
- Scopri come eseguire più previsioni di serie temporali con una singola query dai dati dei viaggi Citi bike di New York.
- 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 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.