Benutzerdefinierte Feiertage in einem ARIMA_PLUS-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 des Modells benötigen Sie die folgenden Berechtigungen:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:
bigquery.models.getDatabigquery.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: You incur costs for the data you process in BigQuery.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Verwenden Sie den Preisrechner.
Weitere Informationen finden Sie unter BigQuery-Preise.
Hinweis
- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie ein Konto, um die Leistung 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.
-
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.
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
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.
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Dataset erstellen
Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern.
Console
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
Klicken Sie auf Aktionen ansehen > Dataset erstellen
Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
bqml_tutorialein.Wählen Sie als Standorttyp die Option Multiregional und dann USA aus.
Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
bq
Verwenden Sie den
bq mk --dataset Befehl, um ein neues Dataset zu erstellen.
Erstellen Sie ein Dataset mit dem Namen
bqml_tutorialund legen Sie den Datenstandort aufUSfest.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Prüfen Sie, ob das Dataset erstellt wurde:
bq ls
API
Rufen Sie die datasets.insert
Methode mit einer definierten Dataset-Ressource auf.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Zeitreihendaten vorbereiten
Aggregieren Sie die Wikipedia-Seitenansichtsdaten für die Seite Google I/O in einer einzigen Tabelle, gruppiert nach Tag:
Rufen Sie die Seite BigQuery auf.
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.
Rufen Sie die Seite BigQuery auf.
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 bqml_tutorial.googleio_page_views Tabelle mit dem prognostizierten Wert aus der
ML.EXPLAIN_FORECAST Funktion,
und visualisieren Sie sie dann mit
Data Studio:
Rufen Sie die Seite BigQuery auf.
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;
Klicken Sie im Bereich Abfrageergebnisse auf Öffnen in > Data Studio. Data Studio wird in einem neuen Tab geöffnet.
Klicken Sie im Tab „Data Studio“ auf Diagramm hinzufügen und dann auf das Zeitreihendiagramm:
Platzieren Sie das Diagramm im Bericht.
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:
Wie Sie sehen, erfasst das Prognosemodell den allgemeinen Trend recht gut. Der erhöhte Traffic im Zusammenhang mit vorherigen Google I/O-Ereignissen wird jedoch nicht erfasst und es erstellt keine genaue Prognose für
- In den nächsten Abschnitten erfahren Sie, wie Sie einige dieser Einschränkungen umgehen können.
Ein Prognosemodell für eine Zeitreihe mit integrierten und benutzerdefinierten Feiertagen erstellen
Wie Sie in der Google I/O-Historie, sehen können, fand die Google I/O zwischen 2017 und 2022 an unterschiedlichen Terminen statt. Um diese Variante zu berücksichtigen, erstellen Sie ein Modell, mit dem Seitenaufrufe für die Wikipedia-Seite „Google_I/O“ bis 2022 basierend auf den Seitenaufrufdaten vor 2022 prognostiziert werden. Außerdem werden benutzerdefinierte Feiertage verwendet, um die Google I/O-Ereignisse jedes Jahr darzustellen. In diesem Modell passen Sie auch das Fenster für den Feiertagseffekt an, um drei Tage um den Veranstaltungstermin abzudecken, damit potenzieller Seitentraffic vor und nach der Veranstaltung besser erfasst werden kann.
Rufen Sie die Seite BigQuery auf.
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 mithilfe der benutzerdefinierten Feiertage erstellt haben, verknüpfen Sie die Originaldaten aus
der bqml_tutorial.googleio_page_views Tabelle mit dem prognostizierten Wert aus der
ML.EXPLAIN_FORECAST Funktion,
und visualisieren Sie sie dann mit
Data Studio:
Rufen Sie die Seite BigQuery auf.
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;
Klicken Sie im Bereich Abfrageergebnisse auf Daten auswerten, und dann auf Mit Data Studio auswerten. Data Studio wird in einem neuen Tab geöffnet.
Klicken Sie im Tab „Data Studio“ auf Diagramm hinzufügen, klicken Sie auf das Zeitreihendiagramm und platzieren Sie das Diagramm im Bericht.
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:
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:
Rufen Sie die Seite BigQuery auf.
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:
Auswirkungen der benutzerdefinierten Feiertage bewerten
Die Auswirkungen der benutzerdefinierten Feiertage auf die prognostizierten Ergebnisse können Sie mit der Funktion ML.EXPLAIN_FORECAST bewerten:
Rufen Sie die Seite BigQuery auf.
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:
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:
Rufen Sie die Seite BigQuery auf.
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:
Bereinigen
- 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.