Benutzerdefinierte Feiertage in einem Zeitreihen-Prognosemodell verwenden

In dieser Anleitung werden die folgenden Aufgaben erläutert:

  • Ein ARIMA_PLUS-Zeitreihen-Vorhersagemodell erstellen, das nur integrierte Feiertage verwendet.
  • Ein Prognosemodell für die ARIMA_PLUS-Zeitreihe erstellen, das benutzerdefinierte Feiertage zusätzlich zu integrierten Feiertagen verwendet.
  • Die prognostizierten Ergebnisse aus diesen Modellen visualisieren.
  • Ein Modell überprüfen, um zu sehen, welche Feiertage es modelliert.
  • Die Auswirkungen benutzerdefinierter Feiertage auf die prognostizierten Ergebnisse bewerten.
  • Die Leistung des Modells, das nur integrierte Feiertage verwendet, mit der Leistung des Modells vergleichen, das zusätzlich zu den integrierten Feiertagen auch benutzerdefinierte Feiertage verwendet.

In dieser Anleitung werden die öffentlichen bigquery-public-data.wikipedia.pageviews_*-Tabellen verwendet.

Erforderliche Berechtigungen

  • Sie benötigen die IAM-Berechtigung bigquery.datasets.create, um das Dataset zu erstellen.
  • Zum Erstellen der Verbindungsressource benötigen Sie die folgenden Berechtigungen:

    • bigquery.connections.create
    • bigquery.connections.get
  • Zum Erstellen des Modells benötigen Sie die folgenden Berechtigungen:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:

    • bigquery.models.getData
    • bigquery.jobs.create

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

  • BigQuery: Für die Daten, die Sie in BigQuery verarbeiten, fallen Kosten an.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Weitere Informationen finden Sie unter BigQuery-Preise.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. BigQuery API aktivieren.

    Aktivieren Sie die API

  5. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. BigQuery API aktivieren.

    Aktivieren Sie die API

Dataset erstellen

Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:

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

    Zur Seite „BigQuery“

  2. Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.

  3. Klicken Sie auf Aktionen ansehen > Dataset erstellen.

    Dataset erstellen

  4. Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:

    • Geben Sie unter Dataset-ID bqml_tutorial ein.

    • Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.

      Die öffentlichen Datasets sind am multiregionalen Standort US gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Standort speichern.

    • Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.

      Seite "Dataset erstellen"

Zeitreihendaten vorbereiten

Aggregieren Sie die Wikipedia-Seitenansichtsdaten für die Seite Google I/O in einer einzigen Tabelle, gruppiert nach Tag:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    CREATE OR REPLACE TABLE `bqml_tutorial.googleio_page_views`
    AS
    SELECT
      DATETIME_TRUNC(datehour, DAY) AS date,
      SUM(views) AS views
    FROM
      `bigquery-public-data.wikipedia.pageviews_*`
    WHERE
      datehour >= '2017-01-01'
      AND datehour < '2023-01-01'
      AND title = 'Google_I/O'
    GROUP BY
      DATETIME_TRUNC(datehour, DAY)
    

Ein Prognosemodell für eine Zeitreihe mit integrierten Feiertagen erstellen

Erstellen Sie ein Modell, mit dem tägliche Seitenaufrufe für die Wikipedia-Seite „Google I/O“ basierend auf den Seitenaufrufdaten vor 2022 prognostiziert werden. Dabei werden integrierte Feiertage berücksichtigt.

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio`
      OPTIONS (
        model_type = 'ARIMA_PLUS',
        holiday_region = 'US',
        time_series_timestamp_col = 'date',
        time_series_data_col = 'views',
        data_frequency = 'DAILY',
        horizon = 365)
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.googleio_page_views`
    WHERE
      date < '2022-01-01';
    

Prognostizierte Ergebnisse visualisieren

Nachdem Sie das Modell mithilfe der integrierten Feiertage erstellt haben, verknüpfen Sie die Originaldaten aus der Tabelle bqml_tutorial.googleio_page_views mit dem prognostizierten Wert aus der Funktion ML.EXPLAIN_FORECAST und visualisieren Sie sie dann mit Looker Studio:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    SELECT
      original.date,
      original.views AS original_views,
      explain_forecast.time_series_adjusted_data
        AS adjusted_views_without_custom_holiday,
    FROM
      `bqml_tutorial.googleio_page_views` original
    INNER JOIN
      (
        SELECT
          *
        FROM
          ML.EXPLAIN_FORECAST(
            MODEL `bqml_tutorial.forecast_googleio`,
            STRUCT(365 AS horizon))
      ) explain_forecast
      ON
        TIMESTAMP(original.date)
        = explain_forecast.time_series_timestamp
    ORDER BY
      original.date;
    
  3. Klicken Sie im Bereich Abfrageergebnisse auf Daten auswerten und dann auf Mit Looker Studio auswerten. Looker Studio wird in einem neuen Tab geöffnet.

  4. Klicken Sie im Tab „Looker Studio“ auf Diagramm hinzufügen und dann auf das Zeitreihendiagramm:

    Ein Zeitreihendiagramm hinzufügen

    Platzieren Sie das Diagramm im Bericht.

  5. Klicken Sie auf dem Tab Einrichtung des Bereichs Diagramm auf Messwert hinzufügen und wählen Sie aligned_views_ without_custom_holiday aus:

    Fügen Sie einen zusätzlichen Messwert hinzu.

    Das Diagramm sieht dann ungefähr so aus:

    Zeitachsendiagramm der Prognoseergebnisse mit integrierten Feiertagen

    Sie sehen, dass das Prognosemodell den allgemeinen Trend gut erfasst. Es wird jedoch kein erhöhter Traffic im Zusammenhang mit vorherigen E/A-Ereignissen erfasst und es kann keine genaue Prognose generiert werden.

    1. In den nächsten Abschnitten erfahren Sie, wie Sie mit einigen dieser Einschränkungen umgehen.

Ein Prognosemodell für eine Zeitachse erstellen, das integrierte und benutzerdefinierte Feiertage verwendet

Wie Sie im E/A-Verlauf von Google sehen, ist das E/A-Ereignis von Google zwischen 2017 und 2022 aufgetreten. Um diese Variante zu berücksichtigen, erstellen Sie ein Modell, das die Seitenaufrufe für die Wikipedia-Seite „Google_I/O“ bis 2022 prognostiziert, auf der Grundlage von Seitenaufrufdaten aus der Zeit vor 2022 und benutzerdefinierten Feiertagen zur Darstellung. Google I/O-Veranstaltung pro Jahr. In diesem Modell passen Sie das Effektfenster für Feiertage an, das das Ereignisdatum drei Tage lang abdeckt, um einen besseren potenziellen Seitenverkehr vor und nach dem Ereignis zu erfassen.

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`
      OPTIONS (
        model_type = 'ARIMA_PLUS',
        holiday_region = 'US',
        time_series_timestamp_col = 'date',
        time_series_data_col = 'views',
        data_frequency = 'DAILY',
        horizon = 365)
    AS (
      training_data AS (
          SELECT
            *
          FROM
            `bqml_tutorial.googleio_page_views`
          WHERE
            date < '2022-01-01'
        ),
      custom_holiday AS (
          SELECT
            'US' AS region,
            'GoogleIO' AS holiday_name,
            primary_date,
            1 AS preholiday_days,
            2 AS postholiday_days
          FROM
            UNNEST(
              [
                DATE('2017-05-17'),
                DATE('2018-05-08'),
                DATE('2019-05-07'),
                -- cancelled in 2020 due to pandemic
                DATE('2021-05-18'),
                DATE('2022-05-11')])
              AS primary_date
        )
    );
    

Prognostizierte Ergebnisse visualisieren

Nachdem Sie das Modell mit benutzerdefinierten Feiertagen erstellt haben, führen Sie die Originaldaten aus der Tabelle bqml_tutorial.googleio_page_views mit dem prognostizierten Wert aus der Funktion ML.EXPLAIN_FORECAST zusammen. Visualisieren Sie dies mit Looker Studio:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    SELECT
      original.date,
      original.views AS original_views,
      explain_forecast.time_series_adjusted_data
        AS adjusted_views_with_custom_holiday,
    FROM
      `bqml_tutorial.googleio_page_views` original
    INNER JOIN
      (
        SELECT
          *
        FROM
          ML.EXPLAIN_FORECAST(
            MODEL
              `bqml_tutorial.forecast_googleio_with_custom_holiday`,
            STRUCT(365 AS horizon))
      ) explain_forecast
      ON
        TIMESTAMP(original.date)
        = explain_forecast.time_series_timestamp
    ORDER BY
      original.date;
    
  3. Klicken Sie im Bereich Abfrageergebnisse auf Daten auswerten und dann auf Mit Looker Studio auswerten. Looker Studio wird in einem neuen Tab geöffnet.

  4. Klicken Sie im Tab „Looker Studio“ auf Diagramm hinzufügen, klicken Sie auf das Zeitreihendiagramm und platzieren Sie das Diagramm im Bericht.

  5. Klicken Sie im Tab Einrichtung des Bereichs Diagramm auf Messwert hinzufügen und wählen Sie adjusted_views_with_custom_holiday aus.

    Das Diagramm sieht dann ungefähr so aus:

    Zeitreihendiagramm der Prognoseergebnisse mit benutzerdefinierten Feiertagen

    Wie Sie sehen, haben die benutzerdefinierten Feiertage die Leistung des Prognosemodells erhöht. Damit wird jetzt die Anzahl der Seitenaufrufe erfasst, die durch Google I/O verursacht werden.

Feiertagsinformationen überprüfen

Prüfen Sie mit der Funktion ML.HOLIDAY_INFO die Liste der Feiertage, die während der Modellierung berücksichtigt wurden:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    SELECT *
    FROM
      ML.HOLIDAY_INFO(
        MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
    

    In den Ergebnissen werden Google I/O und die integrierten Feiertage in der Liste der Feiertage angezeigt:

    Ergebnisse der Funktion ML.HOLIDAY_INFO

Auswirkungen der benutzerdefinierten Feiertage bewerten

Die Auswirkungen der benutzerdefinierten Feiertage auf die prognostizierten Ergebnisse können Sie mit der Funktion ML.EXPLAIN_FORECAST bewerten:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    SELECT
      time_series_timestamp,
      holiday_effect_GoogleIO,
      holiday_effect_US_Juneteenth,
      holiday_effect_Christmas,
      holiday_effect_NewYear
    FROM
      ML.EXPLAIN_FORECAST(
        model
          `bqml_tutorial.forecast_googleio_with_custom_holiday`,
        STRUCT(365 AS horizon))
    WHERE holiday_effect != 0;
    

    Die Ergebnisse zeigen, dass Google I/O einen großen Teil der Feiertagseffekte zu den prognostizierten Ergebnissen beiträgt:

    Ergebnisse der Funktion ML.EXPLAIN_FORECAST

Modellleistung vergleichen

Mit der Funktion ML.EVALUATE können Sie die Leistung des ersten Modells, das ohne benutzerdefinierte Feiertage erstellt wurde, und des zweiten Modells, das mit benutzerdefinierten Feiertagen erstellt wurde, vergleichen. Legen Sie den Zeitraum auf die Woche der Google I/O im Jahr 2022 fest, um zu sehen, wie das zweite Modell bei der Prognose eines zukünftigen benutzerdefinierten Feiertages funktioniert:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Führen Sie im SQL-Editorbereich die folgende SQL-Anweisung aus:

    SELECT
      "original" AS model_type,
      *
    FROM
      ml.evaluate(
        MODEL `bqml_tutorial.forecast_googleio`,
        (
          SELECT
            *
          FROM
            `bqml_tutorial.googleio_page_views`
          WHERE
            date >= '2022-05-08'
            AND date < '2022-05-12'
        ),
        STRUCT(
          365 AS horizon,
          TRUE AS perform_aggregation))
    UNION ALL
    SELECT
      "with_custom_holiday" AS model_type,
      *
    FROM
      ml.evaluate(
        MODEL
          `bqml_tutorial.forecast_googleio_with_custom_holiday`,
        (
          SELECT
            *
          FROM
            `bqml_tutorial.googleio_page_views`
          WHERE
            date >= '2022-05-08'
            AND date < '2022-05-12'
        ),
        STRUCT(
          365 AS horizon,
          TRUE AS perform_aggregation));
    

    Die Ergebnisse zeigen, dass das zweite Modell eine erhebliche Leistungsverbesserung bietet:

    Ergebnisse der Funktion ML.EXPLAIN_FORECAST

Bereinigen

  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.