本教學課程說明如何使用多元時間序列模型,根據多個輸入特徵的歷史值,預測特定資料欄的未來值。
本教學課程會預測單一時間序列。系統會針對輸入資料中的每個時間點計算一次預測值。
本教學課程使用bigquery-public-data.epa_historical_air_quality公開資料集中的資料。這個資料集包含從美國多個城市收集的每日懸浮微粒 (PM2.5)、溫度和風速資訊。
目標
本教學課程會逐步引導您完成下列工作:
- 使用
CREATE MODEL陳述式建立時間序列模型,預測 PM2.5 值。 - 使用
ML.ARIMA_EVALUATE函式評估模型中的自迴歸整合移動平均 (ARIMA) 資訊。 - 使用
ML.ARIMA_COEFFICIENTS函式檢查模型係數。 - 使用
ML.FORECAST函式,從模型中擷取預測的 PM2.5 值。 - 使用
ML.EVALUATE函式評估模型準確率。 - 使用
ML.EXPLAIN_FORECAST函式擷取時間序列的元件,例如季節性、趨勢和特徵屬性。您可以檢查這些時間序列元件,藉此說明預測值。
費用
本教學課程使用 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.
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。如要在現有的專案中啟用 BigQuery,請前往
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.datasets.create身分與存取權管理 (IAM) 權限。如要建立模型,您必須具備下列權限:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
如要執行推論,您需要下列權限:
bigquery.models.getDatabigquery.jobs.create
所需權限
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「IAM 簡介」。
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點按 「View actions」(查看動作) >「Create dataset」(建立資料集)
在「建立資料集」頁面中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial。針對「位置類型」選取「多區域」,然後選取「美國 (多個美國地區)」。
其餘設定請保留預設狀態,然後按一下「建立資料集」。
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 DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定 ADC」。
建立輸入資料表
建立資料表,用來訓練及評估模型。這個資料表會合併 bigquery-public-data.epa_historical_air_quality 資料集中的多個資料欄,以提供每日天氣資料。您也會建立下列資料欄,做為模型的輸入變數:
date:觀察日期pm25每日平均 PM2.5 值wind_speed:每天的平均風速temperature:每天的最高溫
在下列 GoogleSQL 查詢中,FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary 子句表示您正在查詢 epa_historical_air_quality 資料集中的 *_daily_summary 資料表。這些資料表是分區資料表。
請按照下列步驟建立輸入資料表:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE TABLE `bqml_tutorial.seattle_air_quality_daily` AS WITH pm25_daily AS ( SELECT avg(arithmetic_mean) AS pm25, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass' GROUP BY date_local ), wind_speed_daily AS ( SELECT avg(arithmetic_mean) AS wind_speed, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.wind_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant' GROUP BY date_local ), temperature_daily AS ( SELECT avg(first_max_value) AS temperature, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature' GROUP BY date_local ) SELECT pm25_daily.date AS date, pm25, wind_speed, temperature FROM pm25_daily JOIN wind_speed_daily USING (date) JOIN temperature_daily USING (date);
以視覺化方式呈現輸入資料
建立模型前,您可以選擇將輸入的時間序列資料視覺化,瞭解資料分布情形。您可以使用 Looker Studio 執行這項操作。
請按照下列步驟,以視覺化方式呈現時間序列資料:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`;
查詢完成後,依序點選「開啟方式」>「Looker Studio」。Looker Studio 會在新分頁中開啟,在新分頁中完成下列步驟。
在 Looker Studio 中,依序點選「插入」>「時間序列圖表」。
在「圖表」窗格中,選擇「設定」分頁。
在「指標」專區中,新增「pm25」、「temperature」和「wind_speed」欄位,並移除預設的「記錄數」指標。產生的圖表看起來類似下列內容:
從圖表可以看出,輸入時間序列具有每週季節性模式。
建立時間序列模型
使用 pm25、wind_speed 和 temperature 資料欄值做為輸入變數,建立時間序列模型來預測以 pm25 資料欄表示的懸浮微粒值。在bqml_tutorial.seattle_air_quality_daily表格中訓練空氣品質資料模型,選取 2012 年 1 月 1 日至 2020 年 12 月 31 日之間收集的資料。
在下列查詢中,OPTIONS(model_type='ARIMA_PLUS_XREG',
time_series_timestamp_col='date', ...) 子句表示您要建立具有外部迴歸因子的 ARIMA 模型。CREATE MODEL 陳述式的 auto_arima 選項預設為 TRUE,因此 auto.ARIMA 演算法會自動調整模型中的超參數。演算法會套用數十個候選模型,並選擇最佳模型,也就是赤池訊息量準則 (AIC) 最低的模型。CREATE MODEL 陳述式的data_frequency 選項預設為 AUTO_FREQUENCY,因此訓練程序會自動推斷輸入時間序列的資料頻率。
請按照下列步驟建立模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE MODEL `bqml_tutorial.seattle_pm25_xreg_model` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS_XREG', time_series_timestamp_col = 'date', # Identifies the column that contains time points time_series_data_col = 'pm25') # Identifies the column to forecast AS SELECT date, # The column that contains time points pm25, # The column to forecast temperature, # Temperature input to use in forecasting wind_speed # Wind speed input to use in forecasting FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31');
查詢作業完成 (約需 20 秒) 後,您就能存取
seattle_pm25_xreg_model模型。由於查詢是使用CREATE MODEL陳述式建立模型,因此您看不到查詢結果。
評估候選模型
使用 ML.ARIMA_EVALUATE 函式評估時間序列模型。ML.ARIMA_EVALUATE 函式會顯示自動超參數調整程序中評估的所有候選模型評估指標。
請按照下列步驟評估模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);
結果應如下所示:
non_seasonal_p、non_seasonal_d、non_seasonal_q和has_drift輸出資料欄會在訓練管道中定義 ARIMA 模型。log_likelihood、AIC和variance輸出資料欄與 ARIMA 模型擬合程序相關。auto.ARIMA演算法會使用 KPSS 測試,判斷non_seasonal_d的最佳值,也就是本例中的1。當non_seasonal_d為1時,auto.ARIMA演算法會平行訓練 42 個不同的候選 ARIMA 模型。在本例中,所有 42 個候選模型都有效,因此輸出內容包含 42 個資料列,每個候選 ARIMA 模型各佔一行;如果部分模型無效,則會從輸出內容中排除。系統會按照 AIC 遞增順序傳回這些候選模型。第一列中的模型 AIC 最低,因此視為最佳模型。最佳模型會儲存為最終模型,並在您對模型呼叫ML.FORECAST等函式時使用。seasonal_periods欄包含時間序列資料中識別出的季節性模式相關資訊。這與 ARIMA 建模無關,因此所有輸出資料列的值都相同。這份報表顯示每週模式,與您選擇將輸入資料視覺化時看到的結果一致。has_holiday_effect、has_spikes_and_dips和has_step_changes資料欄提供輸入時間序列資料的相關資訊,與 ARIMA 模型建立功能無關。系統傳回這些資料欄,是因為CREATE MODEL陳述式中的decompose_time_series選項值為TRUE。所有輸出資料列的這些資料欄值也相同。「
error_message」欄會顯示在auto.ARIMA調整過程中發生的任何錯誤。如果所選的non_seasonal_p、non_seasonal_d、non_seasonal_q和has_drift欄無法穩定時間序列,就可能發生錯誤。如要擷取所有候選模型的錯誤訊息,請在建立模型時,將show_all_candidate_models選項設為TRUE。如要進一步瞭解輸出資料欄,請參閱
ML.ARIMA_EVALUATE函式。
檢查模型的係數
使用 ML.ARIMA_COEFFICIENTS 函式檢查時間序列模型的係數。
請按照下列步驟擷取模型的係數:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);
結果應如下所示:
ar_coefficients輸出資料欄會顯示 ARIMA 模型自迴歸 (AR) 部分的模型係數。同樣地,ma_coefficients輸出資料欄會顯示 ARIMA 模型移動平均 (MA) 部分的模型係數。這兩個資料欄都包含陣列值,長度分別等於non_seasonal_p和non_seasonal_q。您在ML.ARIMA_EVALUATE函式的輸出內容中看到,最佳模型的non_seasonal_p值為0,non_seasonal_q值為5。因此,在ML.ARIMA_COEFFICIENTS輸出中,ar_coefficients值為空陣列,而ma_coefficients值為 5 個元素的陣列。intercept_or_drift值是 ARIMA 模型中的常數項。processed_input、weight和category_weights輸出資料欄會顯示線性迴歸模型中每個特徵的權重和截距。如果特徵是數值特徵,權重會顯示在weight欄中。如果特徵是類別特徵,則category_weights值為結構值陣列,其中每個結構值都包含特定類別的名稱和權重。如要進一步瞭解輸出資料欄,請參閱
ML.ARIMA_COEFFICIENTS函式。
使用模型預測資料
使用 ML.FORECAST 函式預測未來時間序列值。
在下列 GoogleSQL 查詢中,STRUCT(30 AS horizon, 0.8 AS confidence_level) 子句表示查詢會預測未來 30 個時間點,並產生信賴水準為 80% 的預測間隔。
如要使用模型預測資料,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ));
結果應如下所示:
輸出資料列會依
forecast_timestamp資料欄值依時間順序排列。在時間序列預測中,預測間隔 (以prediction_interval_lower_bound和prediction_interval_upper_bound欄值表示) 與forecast_value欄值同樣重要。forecast_value值是預測間隔的中間點。預測區間取決於standard_error和confidence_level資料欄值。如要進一步瞭解輸出資料欄,請參閱
ML.FORECAST函式。
評估預測準確率
使用 ML.EVALUATE 函式評估模型的預測準確率。
在下列 GoogleSQL 查詢中,第二個 SELECT 陳述式提供含有未來特徵的資料,用於預測未來值,以便與實際資料比較。
請按照下列步驟評估模型準確率:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, ( SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ), STRUCT( TRUE AS perform_aggregation, 30 AS horizon));
結果應如下所示:
如要進一步瞭解輸出資料欄,請參閱
ML.EVALUATE函式。
說明預測結果
您可以使用 ML.EXPLAIN_FORECAST 函式,除了取得預測資料,還能取得可解釋性指標。ML.EXPLAIN_FORECAST 函式會預測未來時間序列值,並傳回時間序列的所有個別元件。
與 ML.FORECAST 函式類似,ML.EXPLAIN_FORECAST 函式中使用的 STRUCT(30 AS horizon, 0.8 AS confidence_level) 子句表示查詢會預測未來 30 個時間點,並產生信賴度為 80% 的預測間隔。
請按照下列步驟說明模型的結果:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ));
結果應如下所示:
輸出資料列會依
time_series_timestamp資料欄值的時間順序排序。如要進一步瞭解輸出資料欄,請參閱
ML.EXPLAIN_FORECAST函式。
清除所用資源
為避免因為本教學課程所用資源,導致系統向 Google Cloud 收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
- 您可以刪除建立的專案。
- 或者您可以保留專案並刪除資料集。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
如有必要,請在Google Cloud 控制台中開啟 BigQuery 頁面。
在導覽窗格中,按一下您建立的 bqml_tutorial 資料集。
按一下視窗右側的「刪除資料集」。 這個動作將會刪除資料集、資料表,以及所有資料。
在「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 簡介。