在 ARIMA_PLUS 時間序列預測模型中使用自訂節慶假日
本教學課程說明如何執行下列工作:
- 建立僅使用內建節慶的
ARIMA_PLUS時間序列預測模型。 - 建立
ARIMA_PLUS時間序列預測模型,除了內建節慶外,還使用自訂節慶。 - 以視覺化方式呈現這些模型的預測結果。
- 檢查模型,瞭解模型模擬的節慶。
- 評估自訂節日對預測結果的影響。
- 比較只使用內建節慶的模型成效,以及除了內建節慶外還使用自訂節慶的模型成效。
本教學課程使用 bigquery-public-data.wikipedia.pageviews_* 公開資料表。
所需權限
如要建立資料集,您需要
bigquery.datasets.createIAM 權限。如要建立模型,您需要下列權限:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
如要執行推論,您需要下列權限:
bigquery.models.getDatabigquery.jobs.create
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「IAM 簡介」。
費用
在本文件中,您會使用下列 Cloud de Confiance by S3NS的計費元件:
- BigQuery: You incur costs for the data you process in BigQuery.
詳情請參閱「BigQuery 定價」一文。
事前準備
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 Cloud de Confiance 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.
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Cloud de Confiance 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點按 「View actions」(查看動作) >「Create dataset」(建立資料集)
在「建立資料集」頁面中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial。針對「位置類型」選取「多區域」,然後選取「美國」。
其餘設定請保留預設狀態,然後按一下「建立資料集」。
bq
如要建立新的資料集,請使用 bq mk --dataset 指令。
建立名為
bqml_tutorial的資料集,並將資料位置設為US。bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
確認資料集已建立完成:
bq ls
API
請呼叫 datasets.insert 方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
準備時間序列資料
將「Google I/O」頁面的維基百科網頁瀏覽資料匯總到單一表格中,並依日期分組:
前往「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)
建立使用內建節慶的預測模型
根據 2022 年前的網頁瀏覽資料,並考量內建的節慶假日,建立模型來預測 Wikipedia「Google I/O」網頁的每日網頁瀏覽量:
前往「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 函式的預測值合併,然後使用數據分析以視覺化方式呈現:
前往「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;
在「查詢結果」窗格中,依序點選「開啟方式」>「數據分析」。系統會在新的分頁中開啟 Data Studio。
在數據分析分頁中,按一下「新增圖表」,然後點選時序圖:
將圖表放到報表上。
在「圖表」窗格的「設定」分頁中,依序點按「新增指標」和「adjusted_views_without_custom_holiday」:
圖表看起來類似如下:
您可以看到預測模型相當準確地掌握了整體趨勢。不過,這項工具無法擷取與先前 Google I/O 活動相關的流量增加情形,也無法準確預測
- 接下來的章節將說明如何因應部分限制。
建立使用內建和自訂節慶假日的時間序列預測模型
如Google I/O 歷史記錄所示,2017 年至 2022 年的 Google I/O 大會舉辦日期不盡相同。如要將這項差異納入考量,請根據 2022 年前的網頁瀏覽資料建立模型,預測 2022 年的 Wikipedia「Google_I/O」網頁瀏覽量,並使用自訂節慶代表每年的 Google I/O 活動。在這個模型中,您也會調整節慶效應時間範圍,涵蓋活動日期前後三天,以便更完整地擷取活動前後的潛在網頁流量。
前往「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 函式中的預測值合併,然後使用數據分析以視覺化方式呈現:
前往「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;
在「查詢結果」窗格中,依序點按「探索資料」和「透過數據分析探索」。系統會在新的分頁中開啟 Data Studio。
在數據分析分頁中,按一下「新增圖表」,點選時序圖,然後將圖表放在報表上。
在「圖表」窗格的「設定」分頁中,按一下「新增指標」並選取「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 函式比較第一個模型 (未建立自訂節慶) 和第二個模型 (已建立自訂節慶) 的成效。如要查看第二個模型在預測未來自訂節慶時的成效,請將時間範圍設為 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));
結果顯示,第二個模型可大幅提升效能:
清除所用資源
- 前往 Cloud de Confiance 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。