Questo tutorial spiega come utilizzare un modello di serie temporali multivariato per prevedere il valore futuro di una determinata colonna, in base al valore storico di più caratteristiche di input.
Questo tutorial prevede più serie temporali. I valori previsti vengono calcolati per ogni momento nel tempo, per ogni valore in una o più colonne specificate. Ad esempio, se vuoi prevedere il meteo e hai specificato una colonna contenente i dati relativi allo stato, i dati previsti conterranno le previsioni per tutti i punti temporali per lo stato A, quindi i valori previsti per tutti i punti temporali per lo stato B e così via. Se vuoi prevedere il meteo e hai specificato colonne contenenti dati relativi a stato e città, i dati previsti conterranno le previsioni per tutti i punti temporali per lo stato A e la città A, poi i valori previsti per tutti i punti temporali 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 i dati sulle vendite di alcolici raccolti in più città dello stato dell'Iowa. La tabella bigquery-public-data.covid19_weathersource_com.postal_code_day_history contiene dati meteo storici, come temperatura e umidità, provenienti da tutto il mondo.
Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Prevedi una singola serie temporale con un modello multivariato.
Obiettivi
Questo tutorial ti guiderà nel completamento delle seguenti attività:
- Creare un modello di serie temporali per prevedere gli ordini dei negozi di liquori utilizzando l'istruzione
CREATE MODEL. - Recupero dei valori degli ordini previsti dal modello utilizzando la funzione
ML.FORECAST. - Recupero di componenti delle serie temporali, come stagionalità, tendenza e attribuzioni delle caratteristiche, 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 componenti fatturabili di Google Cloud, tra cui:
- BigQuery
- BigQuery ML
Per ulteriori informazioni sui costi di BigQuery, consulta la pagina Prezzi di BigQuery.
Per saperne di più sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.
Prima di iniziare
-
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 viene abilitato automaticamente nei nuovi progetti.
Per attivare BigQuery in un progetto preesistente, vai a
Abilita l'API BigQuery, se non è già abilitata.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.
Crea un set di dati
Per creare un set di dati BigQuery, seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud , vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Explorer:

Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.
In Explorer, espandi il progetto, quindi fai clic su Set di dati.
Nella pagina Set di dati, fai clic su Crea set di dati.
Nel riquadro Crea set di dati, segui questi passaggi:
In ID set di dati, inserisci
bqml_tutorial.Per Località dei dati, seleziona USA.
Lascia invariate le altre impostazioni predefinite.
Fai clic su Crea set di dati.
bq
Per creare un nuovo set di dati, utilizza il
comando bq mk --dataset.
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 metodo datasets.insert con una risorsa del set di dati definita:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Crea una tabella di dati di input
Crea una tabella di dati che puoi 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 l'impatto del meteo sul tipo e sul numero di articoli ordinati dai negozi di liquori. Inoltre, crei 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 nella sede del negozio alla data dell'ordinehumidity: l'umidità media nella sede del negozio alla data dell'ordine
Per creare la tabella dei dati di input:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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 country = 'US' AND SAFE_CAST(postal_code AS INT64) IS NOT NULL ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, weather.temperature AS temperature, weather.humidity AS humidity FROM aggregated_sales LEFT JOIN weather ON aggregated_sales.zip_code=weather.zip_code AND aggregated_sales.DATE=weather.DATE;
Crea il modello di 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 nella tabella bqml_tutorial.iowa_liquor_sales_with_weather precedente al 1° settembre 2022. Utilizza la temperatura e l'umidità medie della posizione 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, segui questi passaggi:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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é puoi accedere al modello
multi_time_series_arimax_model. 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 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 di input per la funzione ML.FORECAST è la stessa della firma dei dati di addestramento utilizzati per creare il modello. La colonna bottles_sold non è inclusa nell'input, perché contiene i dati che il modello sta tentando di prevedere.
Segui questi passaggi per prevedere i dati con il modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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_IDe 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_boundeprediction_interval_upper_bound, è importante quanto il valore della colonnaforecast_value. Il valoreforecast_valueè il punto centrale dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonnestandard_erroreconfidence_level.Per saperne di più sulle colonne di output, consulta
ML.FORECAST.
Spiega i risultati della previsione
Oltre ai dati di previsione, puoi ottenere metriche di spiegabilità utilizzando la funzione ML.EXPLAIN_FORECAST. La funzione ML.EXPLAIN_FORECAST prevede i valori futuri delle serie temporali e restituisce anche tutti i componenti separati delle serie temporali.
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 temporali futuri e genera un intervallo di previsione con un'affidabilità dell'80%.
La funzione ML.EXPLAIN_FORECAST fornisce sia dati storici sia dati di previsione. 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 query seguente 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 cronologicamente in base al valore della colonna
time_series_timestamp.Per saperne di più sulle colonne di output, consulta
ML.EXPLAIN_FORECAST.
Valuta l'accuratezza della previsione
Valuta l'accuratezza della previsione del modello eseguendolo su dati su cui il modello non è stato addestrato. Puoi farlo utilizzando la funzione ML.EVALUATE. La funzione ML.EVALUATE valuta ogni serie temporale in modo indipendente.
Nella seguente query GoogleSQL, la seconda istruzione SELECT fornisce i dati con le caratteristiche 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 query seguente 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 saperne di più 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 query seguente, la clausola STRUCT(0.95 AS anomaly_prob_threshold) fa sì che la funzione ML.DETECT_ANOMALIES identifichi i punti dati anomali con un livello di confidenza del 95%.
Segui questi passaggi per rilevare le anomalie nei dati di addestramento:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la query seguente 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_probabilitynei risultati identifica la probabilità che un determinato valore della colonnabottles_soldsia anomalo.Per saperne di più sulle colonne di output, consulta
ML.DETECT_ANOMALIES.
Rileva 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 query seguente 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.
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 consoleGoogle Cloud .
Nel riquadro 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 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 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 gerarchicamente più serie temporali con un modello univariato
- Per una panoramica di BigQuery ML, consulta Introduzione all'AI e al ML in BigQuery.