Questo tutorial ti insegna a utilizzare un modello di serie temporali multivariate per prevedere il valore futuro per una determinata colonna, in base al valore storico di più funzionalità di input.
Questo tutorial prevede più serie temporali. I valori previsti vengono calcolati per ogni punto temporale, per ogni valore in una o più colonne specificate. Ad esempio, se volessi prevedere il meteo e hai specificato una colonna contenente i dati dello stato, i dati previsti conterranno le previsioni per tutti i punti in tempo per lo stato A, quindi i valori previsti per tutti i punti in tempo per lo stato B e così via. Se volessi prevedere il meteo e colonne specifiche contenenti dati relativi a stati e città, i dati previsti conterrebbero le previsioni per tutti i punti di tempo per lo stato A e la città A, quindi i valori previsti per tutti i punti di tempo per lo stato A e la città B e così via.
Questo tutorial utilizza i dati delle tabelle pubbliche
bigquery-public-data.iowa_liquor_sales.sales
e
bigquery-public-data.covid19_weathersource_com.postal_code_day_history
. La tabella bigquery-public-data.iowa_liquor_sales.sales
contiene
dati sulle vendite di alcolici raccolti da più città dello stato dell'Iowa. La tabellabigquery-public-data.covid19_weathersource_com.postal_code_day_history
contiene dati meteorologici storici, come temperatura e umidità, provenienti da tutto il mondo.
Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Previsione di una singola serie temporale con un modello multivariato.
Obiettivi
Questo tutorial ti guiderà nel completamento delle seguenti attività:
- Creazione di un modello di serie temporali per prevedere gli ordini dei negozi di liquori utilizzando l'istruzione
CREATE MODEL
. - Recuperare i valori degli ordini previsti dal modello utilizzando la
funzione
ML.FORECAST
. - Recuperare i componenti della serie temporale, ad esempio stagionalità, tendenza e attribuzioni delle funzionalità, utilizzando la funzione
ML.EXPLAIN_FORECAST
. Puoi esaminare questi componenti delle serie temporali per spiegare i valori previsti. - Valuta l'accuratezza del modello utilizzando la
funzione
ML.EVALUATE
. - Rileva le anomalie utilizzando il modello con la
funzione
ML.DETECT_ANOMALIES
.
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
- 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.
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 nella
US
multiregione. Per semplicità, archivia il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Crea una tabella di dati di input
Crea una tabella di dati da utilizzare per addestrare e valutare il modello. Questa tabella combina le colonne delle tabelle bigquery-public-data.iowa_liquor_sales.sales
e bigquery-public-data.covid19_weathersource_com.postal_code_day_history
per analizzare in che modo il meteo influisce sul tipo e sul numero di articoli ordinati dai negozi di liquori. Inoltre, crea le seguenti colonne aggiuntive che puoi utilizzare come variabili di input per il modello:
date
: la data dell'ordinestore_number
: il numero univoco del negozio che ha effettuato l'ordineitem_number
: il numero univoco dell'articolo ordinatobottles_sold
: il numero di bottiglie ordinate dell'articolo associatotemperature
: la temperatura media presso la sede del negozio alla data dell'ordinehumidity
: l'umidità media presso la sede del negozio alla data dell'ordine
Per creare la tabella di dati di input:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
CREATE OR REPLACE TABLE `bqml_tutorial.iowa_liquor_sales_with_weather` AS WITH sales AS ( SELECT DATE, store_number, item_number, bottles_sold, SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code FROM `bigquery-public-data.iowa_liquor_sales.sales` AS sales WHERE SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL ), aggregated_sales AS ( SELECT DATE, store_number, item_number, ANY_VALUE(zip_code) AS zip_code, SUM(bottles_sold) AS bottles_sold, FROM sales GROUP BY DATE, store_number, item_number ), weather AS ( SELECT DATE, SAFE_CAST(postal_code AS INT64) AS zip_code, avg_temperature_air_2m_f AS temperature, avg_humidity_specific_2m_gpkg AS humidity, FROM `bigquery-public-data.covid19_weathersource_com.postal_code_day_history` WHERE SAFE_CAST(postal_code AS INT64) IS NOT NULL ), avg_weather AS ( SELECT DATE, zip_code, AVG(temperature) AS temperature, AVG(humidity) AS humidity, FROM weather GROUP BY DATE, zip_code ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, avg_weather.temperature AS temperature, avg_weather.humidity AS humidity FROM aggregated_sales LEFT JOIN avg_weather ON aggregated_sales.zip_code=avg_weather.zip_code AND aggregated_sales.DATE=avg_weather.DATE;
Crea il modello delle serie temporali
Crea un modello di serie temporali per prevedere le bottiglie vendute per ogni combinazione di ID negozio e ID articolo, per ogni data della tabella bqml_tutorial.iowa_liquor_sales_with_weather
precedente al 1° settembre 2022. Utilizza la temperatura e l'umidità medie della sede del negozio
in ogni data come caratteristiche da valutare durante la previsione. Nella tabella bqml_tutorial.iowa_liquor_sales_with_weather
sono presenti circa 1 milione di combinazioni distinte di numero di articolo e numero di negozio, il che significa che esistono 1 milione di serie temporali diverse da prevedere.
Per creare il modello:
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.multi_time_series_arimax_model` OPTIONS( model_type = 'ARIMA_PLUS_XREG', time_series_id_col = ['store_number', 'item_number'], time_series_data_col = 'bottles_sold', time_series_timestamp_col = 'date' ) AS SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE < DATE('2022-09-01');
Il completamento della query richiede circa 38 minuti, dopodiché il modello
multi_time_series_arimax_model
viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per 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 seguente query GoogleSQL, la clausola STRUCT(5 AS horizon, 0.8 AS confidence_level)
indica che la query prevede 5 punti temporali futuri e genera un intervallo di previsione con un livello di confidenza dell'80%.
La firma dei dati degli input per la funzione ML.FORECAST
è uguale alla firma dei dati di addestramento che hai utilizzato per creare il modello. La colonna bottles_sold
non è inclusa nell'input, perché
si tratta dei dati che il modello sta cercando di prevedere.
Per prevedere i dati con il modello:
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.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE>=DATE('2022-09-01') ) );
I risultati dovrebbero essere simili ai seguenti:
Le righe di output sono ordinate in base al valore
store_number
, poi al valoreitem_ID
e infine in ordine cronologico in base al valore della colonnaforecast_timestamp
. Nella previsione delle serie temporali, l'intervallo di previsione, rappresentato dai valori delle colonneprediction_interval_lower_bound
eprediction_interval_upper_bound
, è importante quanto il valore della colonnaforecast_value
. Il valoreforecast_value
è il punto medio dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonnestandard_error
econfidence_level
.Per ulteriori informazioni sulle colonne di output, consulta
ML.FORECAST
.
Spiega i risultati della previsione
Puoi ottenere le metriche di spiegabilità oltre ai dati di previsione utilizzando la funzione
ML.EXPLAIN_FORECAST
. La funzione ML.EXPLAIN_FORECAST
prevede
i valori futuri delle serie temporali e restituisce anche tutti i componenti distinti della
serie temporale.
Analogamente alla funzione ML.FORECAST
, la clausola STRUCT(5 AS horizon, 0.8 AS confidence_level)
utilizzata nella funzione ML.EXPLAIN_FORECAST
indica che la query prevede 30 punti di tempo futuri e genera un intervallo di previsione con un livello di confidenza dell'80%.
La funzione ML.EXPLAIN_FORECAST
fornisce sia i dati storici sia quelli previsti. Per visualizzare solo i dati di previsione, aggiungi l'opzione time_series_type
alla query e specifica forecast
come valore dell'opzione.
Per spiegare i risultati del modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT * FROM ML.EXPLAIN_FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
I risultati dovrebbero essere simili ai seguenti:
Le righe di output sono ordinate in ordine cronologico in base al valore della colonna
time_series_timestamp
.Per ulteriori informazioni sulle colonne di output, consulta
ML.EXPLAIN_FORECAST
.
Valutare l'accuratezza delle previsioni
Valuta la precisione di previsione del modello eseguendolo su dati su cui il
modello non è stato addestrato. Per farlo, puoi utilizzare la funzione ML.EVALUATE
. La funzione ML.EVALUATE
valuta ogni serie temporale in modo indipendente.
Nella seguente query GoogleSQL, il secondo statement SELECT
fornisce ai dati le funzionalità future, che vengono utilizzate per prevedere i valori futuri da confrontare con i dati effettivi.
Per valutare l'accuratezza del modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT * FROM ML.EVALUATE ( model `bqml_tutorial.multi_time_series_arimax_model`, ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
I risultati dovrebbero essere simili ai seguenti:
Per ulteriori informazioni sulle colonne di output, consulta
ML.EVALUATE
.
Utilizza il modello per rilevare le anomalie
Rileva le anomalie nei dati di addestramento utilizzando la funzione ML.DETECT_ANOMALIES
.
Nella seguente query, la clausola STRUCT(0.95 AS anomaly_prob_threshold)
fa in modo che la funzione ML.DETECT_ANOMALIES
identifichi i punti dati anomali con un livello di confidenza del 95%.
Per rilevare le anomalie nei dati di addestramento:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold) );
I risultati dovrebbero essere simili ai seguenti:
La colonna
anomaly_probability
nei risultati identifica la probabilità che un determinato valore della colonnabottles_sold
sia anomalo.Per ulteriori informazioni sulle colonne di output, consulta
ML.DETECT_ANOMALIES
.
Rilevare anomalie nei nuovi dati
Rileva le anomalie nei nuovi dati fornendo i dati di input alla funzione
ML.DETECT_ANOMALIES
. I nuovi dati devono avere la stessa firma dei dati di addestramento.
Per rilevare le anomalie nei nuovi dati:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold), ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
I risultati dovrebbero essere simili ai seguenti:
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.
- Puoi eliminare il progetto che hai creato.
- In alternativa, puoi conservare il progetto ed eliminare il set di dati.
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:
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
) e poi fai clic su Elimina.
Elimina il progetto
Per eliminare il progetto:
- 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.
Passaggi successivi
- Scopri come prevedere una singola serie temporale con un modello univariabile
- Scopri come prevedere più serie temporali con un modello univariabile
- Scopri come eseguire il scaling di un modello univariabile quando prevedi più serie temporali su molte righe.
- Scopri come prevedere gerarchicamente più serie temporali con un modello univariabile
- Per una panoramica di BigQuery ML, consulta Introduzione all'AI e all'apprendimento automatico in BigQuery.