Questo tutorial ti insegna a eseguire previsioni multivariate in una
singola serie temporale utilizzando la AI.FORECAST funzione
con il TimesFM 3.0 modello
integrato in BigQuery ML. La previsione
multivariata ti aiuta a migliorare l'accuratezza delle previsioni incorporando altre variabili
che influenzano il target.
Questo tutorial mostra come prevedere le vendite di vodka e whisky incorporando i valori storici delle transazioni (una covariata passata) e se la data è un fine settimana (una covariata futura).
Obiettivi
- Prepara un unico set di dati unificato per la previsione multivariata.
- Utilizza la funzione
AI.FORECASTcon il modelloTimesFM 3.0per generare previsioni.
Costi
Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:
- BigQuery
- BigQuery ML
Per saperne di più, consulta le pagine relative ai prezzi di BigQuery e ai 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 senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
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.
-
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 disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.Per i nuovi progetti, l'API BigQuery viene abilitata automaticamente.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare le attività di questo tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Crea il set di dati:
Editor dati BigQuery (
roles/bigquery.dataEditor) -
Crea il modello:
- Editor dati BigQuery (
roles/bigquery.dataEditor) - Utente job BigQuery (
roles/bigquery.jobUser)
- Editor dati BigQuery (
-
Esegui l'inferenza:
- Editor dati BigQuery (
roles/bigquery.dataEditor) - Utente job BigQuery (
roles/bigquery.jobUser)
- Editor dati BigQuery (
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per completare le attività di questo tutorial. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per completare le attività di questo tutorial sono richieste le seguenti autorizzazioni:
-
Crea il set di dati:
bigquery.datasets.create -
Crea il modello:
-
bigquery.jobs.create -
bigquery.models.create -
bigquery.models.getData -
bigquery.models.updateData
-
-
Esegui l'inferenza:
-
bigquery.models.getData -
bigquery.jobs.create
-
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.Preparare i dati di input
A differenza di altri modelli multivariati che potrebbero richiedere tabelle separate per le covariate storiche e future, la funzione AI.FORECAST con TimesFM 3.0 prevede una singola tabella o query di input.
Prima di eseguire una previsione, assicurati che i tuoi dati soddisfino i seguenti requisiti:
- Righe storiche: contengono valori non nulli per timestamp, target e covariate passate.
- Righe future: contengono valori non nulli solo per i timestamp e le covariate future.
Le colonne target e le colonne delle covariate passate devono essere impostate su
NULLper queste righe future.
La tabella di input deve contenere colonne con i seguenti dati:
- La data delle vendite.
- Il numero di bottiglie di vodka vendute in quella data. Questa è una colonna target.
- Il numero di bottiglie di whisky vendute in quella data. Questa è una colonna target.
- Il valore medio delle transazioni in quella data. Questa è una covariata passata utilizzata nella previsione.
- Se la data è un fine settimana. Si tratta di una covariata futura utilizzata nella previsione.
Prevedi la singola serie temporale multivariata
La seguente query prevede il numero di bottiglie di vodka e whisky vendute per le prime due settimane di luglio 2023 nel negozio numero 2633. Utilizza il valore medio della transazione come covariata passata e se la data è un fine settimana come covariata futura.
Segui questi passaggi per prevedere i dati con il modello TimesFM 3.0:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
WITH historical_sales AS ( SELECT date AS sales_date, store_number, SUM(CASE WHEN category_name LIKE '%VODKA%' THEN bottles_sold ELSE 0 END) AS vodka_bottles, SUM(CASE WHEN category_name LIKE '%WHISKEY%' THEN bottles_sold ELSE 0 END) AS whiskey_bottles, AVG(sale_dollars) AS avg_transaction_value, -- Past covariate IF(EXTRACT(DAYOFWEEK FROM date) IN (1, 7), 1.0, 0.0) AS is_weekend -- Future covariate FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN '2023-01-01' AND '2023-06-30' AND store_number = '2633' GROUP BY sales_date, store_number ), future_horizon AS ( SELECT future_date AS sales_date, store_number, CAST(NULL AS INT64) AS vodka_bottles, CAST(NULL AS INT64) AS whiskey_bottles, CAST(NULL AS FLOAT64) AS avg_transaction_value, IF(EXTRACT(DAYOFWEEK FROM future_date) IN (1, 7), 1.0, 0.0) AS is_weekend FROM UNNEST(GENERATE_DATE_ARRAY('2023-07-01', '2023-07-14')) AS future_date CROSS JOIN (SELECT DISTINCT store_number FROM historical_sales) ), combined_sales AS ( SELECT * FROM historical_sales UNION ALL SELECT * FROM future_horizon ) SELECT FORMAT_DATE('%Y-%m-%d', sales_date) AS sales_date, vodka_bottles.value AS vodka_value, vodka_bottles.prediction_interval_lower_bound AS vodka_lower, vodka_bottles.prediction_interval_upper_bound AS vodka_upper, whiskey_bottles.value AS whiskey_value, whiskey_bottles.prediction_interval_lower_bound AS whiskey_lower, whiskey_bottles.prediction_interval_upper_bound AS whiskey_upper FROM AI.FORECAST( TABLE combined_sales, model => 'TimesFM 3.0', timestamp_col => 'sales_date', target_cols => ['vodka_bottles', 'whiskey_bottles'], past_covariate_cols => ['avg_transaction_value'], future_covariate_cols => ['is_weekend'], id_cols => ['store_number'], horizon => 14, confidence_level => 0.90 );
L'output è simile al seguente, con valori arrotondati per chiarezza:
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| sales_date | vodka_value | vodka_lower | vodka_upper | whiskey_value | whiskey_lower | whiskey_upper |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 2023-07-01 | 408 | -334 | 1977 | 21 | -34 | 113 |
| 2023-07-02 | 806 | -281 | 2992 | 29 | -23 | 149 |
| ... | ... | ... | ... | ... | ... | ... |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
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.
Elimina il progetto
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello 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
- Per una panoramica di BigQuery ML, consulta Introduzione all'AI e al ML in BigQuery.
- Scopri come prevedere una o più serie temporali con un modello univariato TimesFM.
- Scopri come prevedere più serie temporali con un modello multivariato TimesFM.