Prevedi serie temporali gerarchiche con un modello univariato ARIMA_PLUS
Questo tutorial ti insegna come utilizzare un
ARIMA_PLUS modello di serie temporali univariato
per prevedere serie temporali gerarchiche. Prevede il valore futuro per una determinata colonna, in base ai valori storici di quella colonna, e calcola anche i valori di rollup per quella 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 di traffico giornalieri e specificassi una colonna di dimensioni contenente i dati dello stato, i dati previsti conterrebbero i valori per ogni giorno per lo stato A, quindi i valori per ogni giorno per lo stato B e così via. Se volessi prevedere gli incidenti di traffico giornalieri e specificassi le colonne delle dimensioni contenenti i dati di stato e città, i dati previsti conterrebbero i valori per ogni giorno per lo stato A e la città A, quindi 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 eseguire il rollup 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, creerai 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 alcolici in diversi negozi che utilizzano i dati pubblici sulle vendite di alcolici in Iowa.
Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Prevedi più serie temporali con un modello univariato.
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 ulteriori informazioni sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Obiettivi
In questo tutorial, utilizzerai 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. - Recupero dei valori delle vendite di bottiglie previsti dai modelli utilizzando la
ML.FORECASTfunzione.
Costi
Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:
- BigQuery
- BigQuery ML
Per ulteriori informazioni sui costi di BigQuery, consulta la pagina dei prezzi di BigQuery.
Per ulteriori informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.
- Accedi al tuo Google Cloud account. 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
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.
-
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.
- BigQuery è abilitato automaticamente nei nuovi progetti.
Per attivare BigQuery in un progetto preesistente, vai a
Abilita l'API BigQuery.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.
Crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML.
Console
Nella Google Cloud console, vai alla pagina BigQuery.
Nel riquadro Spazio di esplorazione, 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 seleziona Stati Uniti.
Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
bq
Per creare un nuovo set di dati, utilizza il
bq mk --dataset comando.
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 datasets.insert
metodo con una risorsa del set di dati definita.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Crea 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 nelle contee di Polk, Linn e Scott.
Nella query seguente, la
OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
clausola indica che stai creando un
ARIMAbasato su
ARIMA. Utilizza l'
TIME_SERIES_IDopzione
dell'istruzione CREATE MODELper specificare una o più colonne nei dati di input
per cui vuoi ottenere le previsioni. L'
auto_arima_max_orderopzione
dell'istruzione CREATE MODELcontrolla lo
spazio di ricerca per l'ottimizzazione degli iperparametri nell'algoritmo auto.ARIMA. L'opzione
decompose_time_series
dell'istruzione CREATE MODEL ha come valore predefinito TRUE, in modo che le informazioni sui dati delle serie temporali vengano restituite quando valuti il modello nel passaggio successivo.
La OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
clausola 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
ARIMA_PLUS modelli. L'algoritmo adatta decine di modelli candidati e sceglie
il modello migliore, ovvero quello con il criterio di informazione di Akaike (AIC) più basso.
L'impostazione dell'opzione
holiday_region
su US consente una modellazione più accurata dei punti temporali delle festività statunitensi se nelle serie temporali sono presenti pattern di festività statunitensi.
Per creare il modello:
Nella Google Cloud console, vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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é puoi accedere al modello
liquor_forecast. Poiché la query utilizza un'istruzioneCREATE MODELper creare un modello, non vengono visualizzati i risultati della query.
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:
Nella Google Cloud console, vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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 previsti per la prima serie temporale:
store_number=2190,zip_code=50314,city=DES MOINES,county=POLK. Man mano che scorri i dati, vedrai le previsioni per ogni serie temporale univoca successiva. Per generare previsioni che aggregano i totali per dimensioni diverse, ad esempio le previsioni per una contea specifica, devi generare una previsione gerarchica.
Crea un modello di serie temporali gerarchiche
Crea una previsione di serie temporali gerarchiche utilizzando i dati sulle vendite di alcolici 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.
Nella query seguente, l'opzione HIERARCHICAL_TIME_SERIES_COLS nell'istruzione CREATE MODEL indica che stai creando una previsione gerarchica basata su un insieme di colonne che specifichi. Ogni colonna viene sottoposta a rollup e aggregata. Ad esempio, dalla query precedente, ciò significa che il valore della colonna store_number viene sottoposto a rollup per mostrare le previsioni per ogni valore di county, city e zip_code. Separatamente, anche i valori zip_code e store_number vengono sottoposti a rollup per mostrare le previsioni per ogni valore di county e city.
L'ordine delle colonne è importante perché definisce la struttura della gerarchia.
Per creare il modello:
Nella Google Cloud console, vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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é è possibile accedere al modello
bqml_tutorial.liquor_forecast_hierarchicalnel riquadro Spazio di esplorazione. Poiché la query utilizza un'istruzioneCREATE MODELper creare un modello, non vengono visualizzati i risultati della query.
Utilizza il modello gerarchico per prevedere i dati
Recupera i dati delle previsioni gerarchiche dal modello utilizzando la funzione ML.FORECAST.
Per prevedere i dati con il modello:
Nella Google Cloud console, vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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:
Nota come la previsione aggregata viene visualizzata per la città di LeClaire,
store_number=NULL,zip_code=NULL,city=LECLAIRE,county=SCOTT. Man mano che esamini il resto delle righe, vedrai 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:
Libera spazio
Per evitare che al tuo Google Cloud account 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.
- Puoi eliminare il progetto che hai creato.
- In alternativa, puoi mantenere il progetto ed eliminare il set di dati.
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 Google Cloud console.
Nella 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 il nome del set di dati (
bqml_tutorial) per confermare il comando di eliminazione, quindi fai clic su Elimina.
Elimina il progetto
Per eliminare il progetto:
- Nella Google Cloud console, 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 prevedere una singola serie temporale con un modello univariato
- Scopri come prevedere più serie temporali con un modello univariato
- Scopri come scalare un modello univariato quando prevedi più serie temporali su molte righe.
- Scopri come prevedere una singola serie temporale con un modello multivariato
- Per una panoramica di BigQuery ML, consulta Introduzione all'AI e al ML in BigQuery.