本教學課程說明如何使用 BigQuery ML 內建的 AI.FORECAST 函式搭配 TimesFM 3.0 模型,對單一時間序列執行多元預測。多元變數預測功能會納入影響目標的其他變數,有助於提高預測準確率。
本教學課程將示範如何納入歷史交易價值 (過去的共變數) 和日期是否為週末 (未來的共變數),預測伏特加和威士忌的銷售量。
目標
- 準備單一整合式資料集,用於多變數預測。
- 使用
AI.FORECAST函式和TimesFM 3.0模型產生預測結果。
費用
本教學課程使用的 Google Cloud計費元件包括:
- BigQuery
- BigQuery ML
詳情請參閱「BigQuery 定價」和「BigQuery ML 定價」一文。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
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.
-
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.
-
如果尚未啟用 BigQuery API,請啟用。
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。新專案會自動啟用 BigQuery API。
必要的角色
如要取得完成本教學課程中工作所需的權限,請要求管理員授予您下列 IAM 角色:
-
建立資料集:
BigQuery 資料編輯器 (
roles/bigquery.dataEditor) -
建立模型:
- BigQuery 資料編輯者 (
roles/bigquery.dataEditor) - BigQuery 工作使用者 (
roles/bigquery.jobUser)
- BigQuery 資料編輯者 (
-
執行推論:
- BigQuery 資料編輯者 (
roles/bigquery.dataEditor) - BigQuery 工作使用者 (
roles/bigquery.jobUser)
- BigQuery 資料編輯者 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備完成本教學課程中工作所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要完成本教學課程中的工作,必須具備下列權限:
-
建立資料集:
bigquery.datasets.create -
建立模型:
-
bigquery.jobs.create -
bigquery.models.create -
bigquery.models.getData -
bigquery.models.updateData
-
-
執行推論:
-
bigquery.models.getData -
bigquery.jobs.create
-
準備輸入資料
其他多元模型可能需要分別使用資料表來儲存歷史和未來共變數,但 AI.FORECAST 函式搭配 TimesFM 3.0 時,只需要單一輸入資料表或查詢。
執行預測前,請確認資料符合下列規定:
- 歷史資料列:包含時間戳記、目標和過去共變數的非空值。
- 後續資料列:只包含時間戳記和未來共變數的非空值。
這些未來資料列的目標資料欄和過去的共變數資料欄必須設為
NULL。
輸入資料表必須包含下列資料的資料欄:
- 銷售日期。
- 當天售出的伏特加瓶數。這是目標資料欄。
- 該日期售出的威士忌瓶數。這是目標資料欄。
- 當天的平均交易價值。這是預測中使用的過往共變量。
- 日期是否為週末。這是用於預測的未來共變數。
預測單一多變數時間序列
以下查詢會預測 2023 年 7 月前兩週,2633 號商店售出的伏特加和威士忌瓶數。這項模型會將平均交易價值做為過去的共變數,並將日期是否為週末做為未來的共變數。
如要使用 TimesFM 3.0 模型預測資料,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼入下列查詢,然後點選「執行」:
WITH historical_sales AS ( SELECT date AS sales_date, store_number, SUM(CASE WHEN category_name LIKE '%VODKA%' THEN bottles_sold ELSE 0 END) AS vodka_bottles, SUM(CASE WHEN category_name LIKE '%WHISKEY%' THEN bottles_sold ELSE 0 END) AS whiskey_bottles, AVG(sale_dollars) AS avg_transaction_value, -- Past covariate IF(EXTRACT(DAYOFWEEK FROM date) IN (1, 7), 1.0, 0.0) AS is_weekend -- Future covariate FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN '2023-01-01' AND '2023-06-30' AND store_number = '2633' GROUP BY sales_date, store_number ), future_horizon AS ( SELECT future_date AS sales_date, store_number, CAST(NULL AS INT64) AS vodka_bottles, CAST(NULL AS INT64) AS whiskey_bottles, CAST(NULL AS FLOAT64) AS avg_transaction_value, IF(EXTRACT(DAYOFWEEK FROM future_date) IN (1, 7), 1.0, 0.0) AS is_weekend FROM UNNEST(GENERATE_DATE_ARRAY('2023-07-01', '2023-07-14')) AS future_date CROSS JOIN (SELECT DISTINCT store_number FROM historical_sales) ), combined_sales AS ( SELECT * FROM historical_sales UNION ALL SELECT * FROM future_horizon ) SELECT FORMAT_DATE('%Y-%m-%d', sales_date) AS sales_date, vodka_bottles.value AS vodka_value, vodka_bottles.prediction_interval_lower_bound AS vodka_lower, vodka_bottles.prediction_interval_upper_bound AS vodka_upper, whiskey_bottles.value AS whiskey_value, whiskey_bottles.prediction_interval_lower_bound AS whiskey_lower, whiskey_bottles.prediction_interval_upper_bound AS whiskey_upper FROM AI.FORECAST( TABLE combined_sales, model => 'TimesFM 3.0', timestamp_col => 'sales_date', target_cols => ['vodka_bottles', 'whiskey_bottles'], past_covariate_cols => ['avg_transaction_value'], future_covariate_cols => ['is_weekend'], id_cols => ['store_number'], horizon => 14, confidence_level => 0.90 );
輸出結果大致如下,為求明確起見,值已四捨五入:
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| sales_date | vodka_value | vodka_lower | vodka_upper | whiskey_value | whiskey_lower | whiskey_upper |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 2023-07-01 | 408 | -334 | 1977 | 21 | -34 | 113 |
| 2023-07-02 | 806 | -281 | 2992 | 29 | -23 | 149 |
| ... | ... | ... | ... | ... | ... | ... |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
清除所用資源
為避免因為本教學課程所用資源,導致系統向 Google Cloud 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
後續步驟
- 如要瞭解 BigQuery ML 總覽,請參閱「BigQuery 中的 AI 和機器學習簡介」。
- 瞭解如何使用 TimesFM 單變數模型預測單一或多個時間序列。
- 瞭解如何使用 TimesFM 多變數模型預測多個時間序列。