Prognose für eine einzelne Zeitreihe mit einem multivariaten TimesFM-Modell erstellen

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.FORECAST mit dem Modell TimesFM 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

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. 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 Rollen

    API aktivieren

    Bei 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:

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 NULL festgelegt 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:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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

  1. Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte