時系列予測モデルでカスタム休日を使用する
このチュートリアルでは、次のタスクを行う方法を説明します。
- 組み込み休日のみを使用する
ARIMA_PLUS
時系列予測モデルを作成します。 - 組み込み休日に加えてカスタム休日を使用する
ARIMA_PLUS
時系列予測モデルを作成します。 - これらのモデルによる予測結果を可視化します。
- モデルを調べて、モデリングされる休日を確認します。
- カスタム休日が予測結果に与える影響を評価します。
- 組み込み休日のみを使用するモデルのパフォーマンスと、組み込み休日に加えてカスタム休日を使用するモデルのパフォーマンスを比較します。
このチュートリアルでは、一般公開テーブル bigquery-public-data.wikipedia.pageviews_*
を使用します。
必要な権限
- データセットを作成するには、
bigquery.datasets.create
IAM 権限が必要です。 接続リソースを作成するには、次の権限が必要です。
bigquery.connections.create
bigquery.connections.get
モデルを作成するには、次の権限が必要です。
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
推論を実行するには、次の権限が必要です。
bigquery.models.getData
bigquery.jobs.create
BigQuery における IAM ロールと権限の詳細については、IAM の概要をご覧ください。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- BigQuery: You incur costs for the data you process in BigQuery.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
詳細については、BigQuery の料金をご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
「アクションを表示」> [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
時系列データを準備する
Google I/O の Wikipedia のページビュー データを単一のテーブルに日ごとにグループ化して集約します。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
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)
組み込み休日を使用する時系列予測モデルを作成する
Wikipedia の「Google I/O」ページの 1 日あたりのページビューを予測するモデルを、2022 年より前のページビュー データに基づき、組み込み休日を考慮して、作成します。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
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';
予測結果を可視化する
組み込み休日を使用してモデルを作成したら、bqml_tutorial.googleio_page_views
テーブルの元のデータを ML.EXPLAIN_FORECAST
関数の予測値と結合してから、Looker Studio を使用して可視化します。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
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;
[クエリ結果] ペインで、[データを探索] をクリックして、[Looker Studio で調べる] をクリックします。Looker Studio が新しいタブで開きます。
[Looker Studio] タブで、[Add a chart] をクリックし、時系列グラフをクリックします。
グラフをレポートに配置します。
[グラフ] ペインの [設定] タブで、[指標を追加] をクリックし、[adjusted_views_without_custom_holiday] を選択します。
グラフは次のようになります。
予測モデルでは一般的な傾向をかなりうまく捉えていることがわかります。ただし、以前の Google I/O イベントに関連する増加トラフィックは捉えられず、正確な予測を生成できません。
- 次のセクションでは、これらの制限の一部に対処する方法について説明します。
組み込み祝日とカスタム休日を使用する時系列予測モデルを作成する
Google I/O の履歴からわかるように、Google I/O イベントは 2017 年から 2022 年までの間に発生しました。このバリエーションを考慮するには、2022 年より前のページビュー データに基づいて、毎年の Google I/O イベントを表すカスタム休日を使用して、2022 年までの Wikipedia の「Google_I/O」ページのページビューを予測するモデルを作成します。このモデルでは、イベント前後のある程度の潜在的なページ トラフィックをより的確に捉えられるように、イベント日の前後 3 日間をカバーするように休日効果の時間枠も調整します。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
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 ) );
予測結果を可視化する
カスタム休日を使用してモデルを作成したら、bqml_tutorial.googleio_page_views
テーブルの元のデータを ML.EXPLAIN_FORECAST
関数の予測値と結合してから、Looker Studio を使用して可視化します。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
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;
[クエリ結果] ペインで、[データを探索] をクリックして、[Looker Studio で調べる] をクリックします。Looker Studio が新しいタブで開きます。
[Looker Studio] タブで [Add a chart] をクリックし、時系列グラフをクリックして、レポートにグラフを配置します。
[グラフ] ペインの [設定] タブで、[指標を追加] をクリックし、[adjusted_views_with_custom_holiday] を選択します。
グラフは次のようになります。
ご覧のとおり、カスタム休日により予測モデルのパフォーマンスが向上しています。Google I/O に起因するページビューの増加を効果的に捉えることができるようになりました。
休日情報を検査する
ML.HOLIDAY_INFO
関数を使用して、モデリング中に考慮された休日のリストを調べます。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
休日のリストには、Google I/O と組み込み休日の両方が表示されます。
カスタム休日の影響を評価する
ML.EXPLAIN_FORECAST
関数を使用して、予測結果に対するカスタム休日の影響を評価します。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
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;
この結果は、Google I/O が予測結果に大きな休日効果をもたらすことを示しています。
モデルのパフォーマンスを比較する
ML.EVALUATE
関数を使用して、カスタム休日なしで作成された最初のモデルと、カスタム休日ありで作成された 2 番目のモデルのパフォーマンスを比較します。将来のカスタム休日を予測するときに 2 番目のモデルのパフォーマンスを確認するには、期間を 2022 年の Google I/O の週に設定します。
[BigQuery] ページに移動します。
SQL エディタペインで、次の SQL ステートメントを実行します。
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));
結果から、2 番目のモデルでは大幅なパフォーマンスの改善があることがわかります。
クリーンアップ
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.