本教學課程將說明如何使用多變量時間序列模型,根據多個輸入特徵的歷史值,預測特定資料欄的未來值。
本教學課程將針對多個時間序列進行預測。系統會針對一或多個指定欄中的每個值,為每個時間點計算預測值。舉例來說,如果您想預測天氣並指定包含狀態資料的資料欄,預測資料就會包含狀態 A 的所有時間點預測資料,然後是狀態 B 的所有時間點預測值,依此類推。如果您想預測天氣,並指定包含州和城市資料的資料欄,預測資料就會包含州 A 和城市 A 的所有時間點預測資料,然後是州 A 和城市 B 的所有時間點預測值,依此類推。
本教學課程使用公開的 bigquery-public-data.iowa_liquor_sales.sales
和 bigquery-public-data.covid19_weathersource_com.postal_code_day_history
資料表資料。bigquery-public-data.iowa_liquor_sales.sales
資料表包含從愛荷華州多個城市收集到的酒類銷售資料。bigquery-public-data.covid19_weathersource_com.postal_code_day_history
資料表包含全球各地的歷史天氣資料,例如溫度和濕度。
在閱讀本教學課程之前,強烈建議您先參閱「使用多變數模型預測單一時間序列」。
目標
本教學課程會逐步引導您完成下列工作:
- 使用
CREATE MODEL
陳述式建立時間序列模型,以便預測酒類商店訂單。 - 使用
ML.FORECAST
函式,從模型中擷取預測的訂單值。 - 使用
ML.EXPLAIN_FORECAST
函式擷取時間序列的元件,例如季節性、趨勢和特徵歸因。您可以檢查這些時間序列元件,以便解釋預測值。 - 使用
ML.EVALUATE
函式評估模型準確度。 - 使用含有
ML.DETECT_ANOMALIES
函式的模型偵測異常狀況。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- BigQuery
- BigQuery ML
如要進一步瞭解 BigQuery 費用,請參閱 BigQuery 定價頁面。
如要進一步瞭解 BigQuery ML 費用,請參閱 BigQuery ML 定價。
事前準備
- 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.
-
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.
- 新專案會自動啟用 BigQuery。如要在現有的專案中啟用 BigQuery,請前往
Enable the BigQuery API.
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點選
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「Create dataset」頁面上執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。針對「Location type」(位置類型) 選取「Multi-region」(多區域),然後選取「US (multiple regions in United States)」(us (多個美國區域))。
保留其餘預設設定,然後點選「Create dataset」(建立資料集)。
bq
如要建立新的資料集,請使用 bq mk
指令搭配 --location
旗標。如需可能參數的完整清單,請參閱 bq mk --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
API
請呼叫 datasets.insert
方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
在嘗試這個範例之前,請先參閱 BigQuery 快速入門:使用 BigQuery DataFrames,按照 BigQuery DataFrames 設定說明進行操作。詳情請參閱 BigQuery DataFrames 參考資料說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定 ADC」。
建立輸入資料表
建立資料表,用於訓練及評估模型。這個表格會結合 bigquery-public-data.iowa_liquor_sales.sales
和 bigquery-public-data.covid19_weathersource_com.postal_code_day_history
資料表的資料欄,分析天氣對酒類商店訂購商品類型和數量的影響。您也需要建立下列額外資料欄,以便做為模型的輸入變數:
date
:訂單日期store_number
:下單的商店專屬編號item_number
:訂購商品的專屬編號bottles_sold
:關聯商品的訂購瓶數temperature
:訂購當天商店位置的平均溫度humidity
:訂購當天商店位置的平均濕度
請按照下列步驟建立輸入資料表:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE TABLE `bqml_tutorial.iowa_liquor_sales_with_weather` AS WITH sales AS ( SELECT DATE, store_number, item_number, bottles_sold, SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code FROM `bigquery-public-data.iowa_liquor_sales.sales` AS sales WHERE SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL ), aggregated_sales AS ( SELECT DATE, store_number, item_number, ANY_VALUE(zip_code) AS zip_code, SUM(bottles_sold) AS bottles_sold, FROM sales GROUP BY DATE, store_number, item_number ), weather AS ( SELECT DATE, SAFE_CAST(postal_code AS INT64) AS zip_code, avg_temperature_air_2m_f AS temperature, avg_humidity_specific_2m_gpkg AS humidity, FROM `bigquery-public-data.covid19_weathersource_com.postal_code_day_history` WHERE SAFE_CAST(postal_code AS INT64) IS NOT NULL ), avg_weather AS ( SELECT DATE, zip_code, AVG(temperature) AS temperature, AVG(humidity) AS humidity, FROM weather GROUP BY DATE, zip_code ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, avg_weather.temperature AS temperature, avg_weather.humidity AS humidity FROM aggregated_sales LEFT JOIN avg_weather ON aggregated_sales.zip_code=avg_weather.zip_code AND aggregated_sales.DATE=avg_weather.DATE;
建立時間序列模型
建立時序模型,針對 bqml_tutorial.iowa_liquor_sales_with_weather
資料表中 2022 年 9 月 1 日前的每個日期,預測每個商店 ID 和商品 ID 組合所售出的瓶裝水數量。使用商店位置在每個日期的平均溫度和濕度做為特徵,在預測期間進行評估。bqml_tutorial.iowa_liquor_sales_with_weather
表格中約有 100 萬個商品編號和商店編號組合,也就是說,有 100 萬個時間序列可供預測。
請按照下列步驟建立模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model` OPTIONS( model_type = 'ARIMA_PLUS_XREG', time_series_id_col = ['store_number', 'item_number'], time_series_data_col = 'bottles_sold', time_series_timestamp_col = 'date' ) AS SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE < DATE('2022-09-01');
查詢作業大約需要 38 分鐘才能完成,之後「探索器」窗格就會顯示
multi_time_series_arimax_model
模型。由於查詢是使用CREATE MODEL
陳述式建立模型,因此您看不到查詢結果。
使用模型預測資料
使用 ML.FORECAST
函式預測未來的時間序列值。
在下列 GoogleSQL 查詢中,STRUCT(5 AS horizon, 0.8 AS confidence_level)
子句表示查詢會預測 5 個未來時間點,並產生 80% 信賴水準的預測間隔。
ML.FORECAST
函式的輸入資料資料簽章,與用於建立模型的訓練資料資料簽章相同。bottles_sold
欄並未納入輸入內容,因為這是模型嘗試預測的資料。
如要使用模型預測資料,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE>=DATE('2022-09-01') ) );
結果應如下所示:
輸出資料列會依
store_number
值、item_ID
值,然後依forecast_timestamp
資料欄值的時間順序排序。在時間序列預測中,prediction_interval_lower_bound
和prediction_interval_upper_bound
欄值所代表的預測間隔,與forecast_value
欄值同樣重要。forecast_value
值是預測區間的中間點。預測間隔取決於standard_error
和confidence_level
欄值。如要進一步瞭解輸出資料欄,請參閱
ML.FORECAST
。
解釋預測結果
您可以使用 ML.EXPLAIN_FORECAST
函式,除了預測資料之外,還能取得可解釋指標。ML.EXPLAIN_FORECAST
函式可預測未來的時間序列值,並傳回時間序列的所有個別元件。
與 ML.FORECAST
函式類似,ML.EXPLAIN_FORECAST
函式中使用的 STRUCT(5 AS horizon, 0.8 AS confidence_level)
子句表示查詢會預測 30 個未來時間點,並產生 80% 信心等級的預測區間。
ML.EXPLAIN_FORECAST
函式會提供歷來資料和預測資料。如要只查看預測資料,請在查詢中新增 time_series_type
選項,並指定 forecast
做為選項值。
請按照下列步驟說明模型的結果:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.EXPLAIN_FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
結果應如下所示:
輸出資料列會依照
time_series_timestamp
欄值按時間排序。如要進一步瞭解輸出資料欄,請參閱
ML.EXPLAIN_FORECAST
。
評估預測準確度
在未經訓練的資料上執行模型,評估模型的預測準確度。您可以使用 ML.EVALUATE
函式來執行這項操作。ML.EVALUATE
函式會分別評估每個時間序列。
在下列 GoogleSQL 查詢中,第二個 SELECT
陳述式會為資料提供未來特徵,用於預測未來值,並與實際資料進行比較。
如要評估模型的準確度,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.EVALUATE ( model `bqml_tutorial.multi_time_series_arimax_model`, ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
結果應如下所示:
如要進一步瞭解輸出資料欄,請參閱
ML.EVALUATE
。
使用模型偵測異常狀況
使用 ML.DETECT_ANOMALIES
函式偵測訓練資料中的異常狀況。
在以下查詢中,STRUCT(0.95 AS anomaly_prob_threshold)
子句會導致 ML.DETECT_ANOMALIES
函式以 95% 的信心水準識別異常資料點。
如要偵測訓練資料中的異常狀況,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold) );
結果應如下所示:
結果中的
anomaly_probability
欄會指出特定bottles_sold
欄值異常的可能性。如要進一步瞭解輸出資料欄,請參閱
ML.DETECT_ANOMALIES
。
偵測新資料中的異常狀況
向 ML.DETECT_ANOMALIES
函式提供輸入資料,以便偵測新資料中的異常狀況。新資料必須與訓練資料具有相同的資料簽章。
如要偵測新資料中的異常狀況,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold), ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
結果應如下所示:
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
- 您可以刪除建立的專案。
- 或者您可以保留專案並刪除資料集。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
如有必要,請在Google Cloud 控制台中開啟 BigQuery 頁面。
在導覽窗格中,按一下您建立的 bqml_tutorial 資料集。
按一下視窗右側的「Delete dataset」。這個動作將會刪除資料集、資料表,以及所有資料。
在「Delete dataset」對話方塊中,輸入資料集的名稱 (
bqml_tutorial
),然後按一下「Delete」來確認刪除指令。
刪除專案
如要刪除專案,請進行以下操作:
- 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.
後續步驟
- 瞭解如何使用單變數模型預測單一時間序列
- 瞭解如何使用單變數模型預測多個時間序列
- 瞭解如何在多列資料上預測多個時間序列時,調整單變數模型。
- 瞭解如何使用單變數模型以分層方式預測多個時間序列
- 如需 BigQuery ML 的總覽,請參閱 BigQuery 中的 AI 和 ML 簡介。