在 ARIMA_PLUS 時間序列預測模型中使用自訂節慶假日
本教學課程將說明如何執行下列工作:
- 建立
ARIMA_PLUS
時間序列預測模型,只使用內建節慶。 - 建立
ARIMA_PLUS
時間序列預測模型,除了內建節慶外,還使用自訂節慶。 - 以視覺化方式呈現這些模型的預測結果。
- 檢查模型,瞭解模型會模擬哪些節慶。
- 評估自訂節日對預測結果的影響。
- 比較只使用內建節慶的模型成效,以及同時使用內建和自訂節慶的模型成效。
本教學課程使用 bigquery-public-data.wikipedia.pageviews_*
公開資料表。
所需權限
如要建立資料集,您需要
bigquery.datasets.create
IAM 權限。如要建立模型,您必須具備下列權限:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
如要執行推論,您需要下列權限:
bigquery.models.getData
bigquery.jobs.create
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「IAM 簡介」。
費用
在本文件中,您會使用 Trusted Cloud by S3NS的下列計費元件:
- BigQuery: You incur costs for the data you process in BigQuery.
如要根據預測用量估算費用,請使用 Pricing Calculator。
詳情請參閱 BigQuery 價格一文。
事前準備
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the BigQuery API.
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點按
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「建立資料集」頁面中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。針對「Location type」(位置類型) 選取「Multi-region」(多區域),然後選取「US (multiple regions in United States)」(us (多個美國區域))。
其餘設定請保留預設狀態,然後按一下「Create dataset」(建立資料集)。
建立名為「
bqml_tutorial
」的資料集,並將資料位置設為「US
」,以及說明設為「BigQuery ML tutorial dataset
」:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
這個指令採用
-d
捷徑,而不是使用--dataset
旗標。如果您省略-d
和--dataset
,該指令預設會建立資料集。確認資料集已建立完成:
bq ls
前往「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)
前往「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';
前往「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 分頁中,按一下「新增圖表」,然後點選時間序列圖表:
將圖表放到報表上。
在「圖表」窗格的「設定」分頁中,依序點按「新增指標」和「adjusted_views_without_custom_holiday」:
圖表看起來類似下方:
您可以看到預測模型相當準確地掌握了整體趨勢。不過,這項工具無法擷取與先前 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 ) );
前往「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 分頁中,按一下「新增圖表」,然後按一下時間序列圖表,並將圖表放在報表上。
在「圖表」窗格的「設定」分頁中,按一下「新增指標」,然後選取「adjusted_views_with_custom_holiday」。
圖表看起來類似下方:
如您所見,自訂節慶活動提升了預測模型的成效。現在可有效擷取 Google I/O 造成的網頁瀏覽次數增加。
前往「BigQuery」頁面
在 SQL 編輯器窗格中,執行下列 SQL 陳述式:
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
結果會顯示 Google I/O 和內建節慶:
前往「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 對預測結果的節慶效應貢獻良多:
前往「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));
結果顯示,第二個模型可大幅提升效能:
- In the Trusted 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.
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
bq
如要建立新的資料集,請使用 bq mk
指令搭配 --location
旗標。如需可能的完整參數清單,請參閱 bq mk --dataset
指令參考資料。
API
請呼叫 datasets.insert
方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
準備時間序列資料
將「Google I/O」頁面的維基百科網頁瀏覽資料匯總到單一表格中,並依日期分組:
建立使用內建節慶假日的時間序列預測模型
根據 2022 年前的網頁瀏覽資料,並考量內建的節慶假日,建立模型來預測 Wikipedia「Google I/O」網頁的每日瀏覽量:
以圖表呈現預測結果
使用內建節慶建立模型後,請將 bqml_tutorial.googleio_page_views
資料表中的原始資料與 ML.EXPLAIN_FORECAST
函式的預測值合併,然後使用 Looker Studio 製作視覺化圖表:
建立使用內建節慶和自訂節慶的時間序列預測模型
如Google I/O 歷史記錄所示,2017 年至 2022 年的 Google I/O 大會舉辦日期各不相同。如要將這項差異納入考量,請根據 2022 年前的網頁瀏覽資料建立模型,預測 2022 年 Wikipedia「Google_I/O」網頁的瀏覽量,並使用自訂節慶代表每年的 Google I/O 活動。在這個模型中,您也會調整節慶效應時間範圍,涵蓋活動日期前後三天,以便更準確地擷取活動前後的潛在網頁流量。
以圖表呈現預測結果
使用自訂節慶建立模型後,請將 bqml_tutorial.googleio_page_views
資料表中的原始資料,與 ML.EXPLAIN_FORECAST
函式中的預測值合併,然後使用 Looker Studio 以視覺化方式呈現:
檢查節慶資訊
使用 ML.HOLIDAY_INFO
函式檢查在模型建立期間考量的節日清單:
評估自訂節日的影響
使用 ML.EXPLAIN_FORECAST
函式評估自訂節日對預測結果的影響:
比較模型效能
使用 ML.EVALUATE
函式,比較第一個未納入自訂節慶的建立模型,以及第二個納入自訂節慶的建立模型,兩者之間的成效差異。如要查看第二個模型在預測未來自訂節慶時的成效,請將時間範圍設為 2022 年 Google I/O 大會當週: