In dieser Anleitung erfahren Sie, wie Sie mithilfe der in BigQuery ML integrierten TimesFM 3.0-Modelle und der AI.FORECAST-Funktion multivariate Prognosen für eine einzelne Zeitreihe erstellen. Mit multivariaten Prognosen lässt sich die Genauigkeit von Prognosen verbessern, da andere Variablen berücksichtigt werden, die sich auf das Ziel auswirken.
In diesem Tutorial wird gezeigt, wie Sie die Verkaufszahlen für Wodka und Whiskey prognostizieren können. Dazu werden historische Transaktionswerte (ein vergangener Kovariable) und Informationen dazu, ob das Datum ein Wochenende ist (ein zukünftiger Kovariable), berücksichtigt.
Ziele
- Ein einzelnes einheitliches Dataset für multivariate Prognosen vorbereiten.
- Verwenden Sie die Funktion
AI.FORECASTmit dem ModellTimesFM 3.0, um Vorhersagen zu generieren.
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloudverwendet, darunter:
- BigQuery
- BigQuery ML
Weitere Informationen finden Sie unter BigQuery-Preise und Preise für BigQuery ML.
Hinweis
-
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.
-
Aktivieren Sie die BigQuery API, falls sie noch nicht aktiviert ist.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von RollenBei neuen Projekten ist die BigQuery API automatisch aktiviert.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Aufgaben in dieser Anleitung benötigen:
-
Dataset erstellen:
BigQuery-Dateneditor (
roles/bigquery.dataEditor) -
Modell erstellen:
- BigQuery Data Editor (
roles/bigquery.dataEditor) - BigQuery Job User (
roles/bigquery.jobUser)
- BigQuery Data Editor (
-
Inferenz ausführen:
- BigQuery Data Editor (
roles/bigquery.dataEditor) - BigQuery Job User (
roles/bigquery.jobUser)
- BigQuery Data Editor (
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Ausführen der Aufgaben in diesem Dokument erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind zum Ausführen der Aufgaben in dieser Anleitung erforderlich:
-
Dataset erstellen:
bigquery.datasets.create -
Modell erstellen:
-
bigquery.jobs.create -
bigquery.models.create -
bigquery.models.getData -
bigquery.models.updateData
-
-
Inferenz ausführen:
-
bigquery.models.getData -
bigquery.jobs.create
-
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.Eingabedaten vorbereiten
Im Gegensatz zu anderen multivariaten Modellen, für die möglicherweise separate Tabellen für historische und zukünftige Kovariaten erforderlich sind, erwartet die AI.FORECAST-Funktion mit TimesFM 3.0 eine einzelne Eingabetabelle oder ‑abfrage.
Bevor Sie eine Prognose erstellen, sollten Sie prüfen, ob Ihre Daten die folgenden Anforderungen erfüllen:
- Verlaufszeilen: enthalten Werte ungleich null für Zeitstempel, Zielvorhaben und vergangene Kovariaten.
- Zukünftige Zeilen: enthalten nur Werte ungleich null für Zeitstempel und zukünftige Kovariaten.
Zielspalten und Spalten für vergangene Kovariaten müssen für diese zukünftigen Zeilen auf
NULLfestgelegt werden.
Ihre Eingabetabelle muss Spalten mit den folgenden Daten enthalten:
- Das Datum des Verkaufs.
- Die Anzahl der an diesem Datum verkauften Wodkaflaschen. Dies ist eine Zielspalte.
- Die Anzahl der an diesem Tag verkauften Whiskyflaschen. Dies ist eine Zielspalte.
- Der durchschnittliche Transaktionswert an diesem Datum. Dies ist eine vergangene Kovariate, die in der Prognose verwendet wurde.
- Ob das Datum ein Wochenende ist. Dies ist eine zukünftige Kovariable, die in der Prognose verwendet wird.
Prognose für die einzelne multivariate Zeitreihe erstellen
Mit der folgenden Abfrage wird die Anzahl der verkauften Wodka- und Whiskyflaschen für die ersten beiden Juliwochen 2023 in Geschäft 2633 prognostiziert. Dabei wird der durchschnittliche Transaktionswert als vergangene Kovariate und das Wochenende als zukünftige Kovariate verwendet.
So prognostizieren Sie Daten mit dem TimesFM 3.0-Modell:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
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 );
Die Ausgabe sieht in etwa so aus. Die Werte wurden zur besseren Übersicht gerundet:
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 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 |
| ... | ... | ... | ... | ... | ... | ... |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.