本教學課程說明如何使用ARIMA_PLUS單變數時間序列模型,根據特定資料欄的歷來值,預測該資料欄的未來值。
本教學課程會預測多個時間序列。系統會針對每個時間點,計算一或多個指定資料欄中每個值的預測值。舉例來說,如果您想預測天氣,並指定包含城市資料的資料欄,預測資料就會包含城市 A 所有時間點的預測值,接著是城市 B 所有時間點的預測值,依此類推。
本教學課程使用公開 bigquery-public-data.new_york.citibike_trips 資料表中的資料。這個資料表包含紐約市 Citi Bike 行程的相關資訊。
閱讀本教學課程前,強烈建議您先參閱「使用單變量模型預測單一時間序列」。
目標
本教學課程會逐步引導您完成下列工作:
- 使用
CREATE MODEL陳述式建立時間序列模型,預測單車行程數量。 - 使用
ML.ARIMA_EVALUATE函式評估模型中的自動迴歸整合移動平均 (ARIMA) 資訊。 - 使用
ML.ARIMA_COEFFICIENTS函式檢查模型係數。 - 使用
ML.FORECAST函式從模型擷取預測的單車騎乘資訊。 - 使用
ML.EXPLAIN_FORECAST函式擷取時間序列的元件,例如季節性和趨勢。您可以檢查這些時間序列元件,以說明預測值。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- BigQuery
- BigQuery ML
如要進一步瞭解 BigQuery 費用,請參閱「BigQuery 定價」頁面。
如要進一步瞭解 BigQuery ML 費用,請參閱「BigQuery ML 定價」。
事前準備
-
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,請前往
啟用 BigQuery API (如果尚未啟用)。
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
所需權限
如要建立資料集,您必須具備
bigquery.datasets.createIAM 權限。如要建立模型,您必須具備下列權限:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
如要執行推論,您必須具備下列權限:
bigquery.models.getDatabigquery.jobs.create
如要進一步瞭解 BigQuery 的 IAM 角色和權限,請參閱「IAM 簡介」。
建立資料集
如要建立 BigQuery 資料集,請選取下列其中一個選項:控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
點選左側窗格中的 「Explorer」。

如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。
在「Explorer」中展開專案,然後按一下「資料集」。
在「Datasets」(資料集) 頁面,按一下「Create dataset」(建立資料集)。
在「建立資料集」窗格中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial。在「資料位置」部分,選取「US」。
其餘預設設定則保持不變。
點選「建立資料集」。
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" } }
BigQuery DataFrames
試用這個範例前,請先按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定操作說明操作。詳情請參閱 BigQuery DataFrames 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
以圖表呈現輸入資料
建立模型前,您可以選擇以視覺化方式呈現輸入時間序列資料,瞭解分布情形。您可以使用數據分析來執行這項操作。
SQL
下列查詢的 SELECT 陳述式會使用 EXTRACT 函式,從 starttime 欄擷取日期資訊。查詢會使用 COUNT(*) 子句,取得每日 Citi Bike 行程總數。
請按照下列步驟,以圖表呈現時間序列資料:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date;
查詢完成後,依序點選「開啟方式」>「數據分析」。數據分析會在新的分頁中開啟。請在新分頁中完成下列步驟。
在數據分析中,依序點選「插入」>「時序圖表」。
在「圖表」窗格中,選擇「設定」分頁標籤。
在「指標」部分,新增「num_trips」欄位,並移除預設的「記錄計數」指標。產生的圖表大致如下:
BigQuery DataFrames
試用這個範例前,請先按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定操作說明操作。詳情請參閱 BigQuery DataFrames 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
建立時間序列模型
您想預測每個 Citi Bike 站點的單車行程數量,這需要多個時間序列模型,每個模型分別對應輸入資料中的各個 Citi Bike 站點。您可以建立多個模型來執行這項操作,但這項程序可能相當繁瑣且耗時,尤其是時間序列數量龐大時。您可以使用單一查詢建立及擬合一組時間序列模型,一次預測多個時間序列。
SQL
在下列查詢中,OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) 子句表示您正在建立以 ARIMA 為基礎的時間序列模型。您可以使用 CREATE MODEL 陳述式的 time_series_id_col 選項,指定要取得預測結果的一或多個輸入資料欄,在本例中為 Citi Bike 車站,由 start_station_name 欄表示。您可以使用 WHERE 子句,將起始站限制為名稱中含有 Central Park 的站點。CREATE MODEL 陳述式的 auto_arima_max_order 選項,可控制 auto.ARIMA 演算法中超參數調整的搜尋空間。CREATE MODEL 陳述式的 decompose_time_series 選項預設為 TRUE,因此在下一個步驟評估模型時,系統會傳回時間序列資料的相關資訊。
請按照下列步驟建立模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name', auto_arima_max_order = 5 ) AS SELECT start_station_name, EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` WHERE start_station_name LIKE '%Central Park%' GROUP BY start_station_name, date;
查詢約需 24 秒才能完成,完成後即可存取
nyc_citibike_arima_model_group模型。由於查詢使用CREATE MODEL陳述式,因此不會顯示查詢結果。
這項查詢會建立十二個時間序列模型,每個模型分別對應輸入資料中的十二個 Citi Bike 起始站。由於採用平行處理,時間成本約為 24 秒,僅為建立單一時間序列模型的 1.4 倍。不過,如果移除 WHERE ... LIKE ... 子句,則會有 600 多個時間序列需要預測,而且由於運算單元容量限制,這些時間序列不會完全平行預測。在這種情況下,查詢大約需要 15 分鐘才能完成。如要縮短查詢執行時間,但願意承擔模型品質可能略微下降的風險,可以降低 auto_arima_max_order 的值。這會縮小 auto.ARIMA 演算法中超參數調整的搜尋空間。詳情請參閱 Large-scale time series forecasting best practices。
BigQuery DataFrames
在下列程式碼片段中,您將建立以 ARIMA 為基礎的時間序列模型。
試用這個範例前,請先按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定操作說明操作。詳情請參閱 BigQuery DataFrames 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
系統會建立十二個時間序列模型,每個模型分別對應輸入資料中十二個 Citi Bike 起始站點。由於採用平行處理,時間成本約為 24 秒,僅為建立單一時間序列模型的 1.4 倍。
評估模型
SQL
使用 ML.ARIMA_EVALUATE 函式評估時間序列模型。ML.ARIMA_EVALUATE 函式會顯示自動調整超參數期間,為模型產生的評估指標。
請按照下列步驟評估模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
結果應如下所示:
雖然
auto.ARIMA會為每個時間序列評估數十個候選 ARIMA 模型,但ML.ARIMA_EVALUATE預設只會輸出最佳模型的資訊,讓輸出表格保持精簡。如要查看所有候選模型,請將ML.ARIMA_EVALUATE函式的show_all_candidate_model引數設為TRUE。
BigQuery DataFrames
試用這個範例前,請先按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定操作說明操作。詳情請參閱 BigQuery DataFrames 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
start_station_name 欄會指出建立時間序列的輸入資料欄。這是您在建立模型時,使用 time_series_id_col 選項指定的資料欄。
non_seasonal_p、non_seasonal_d、non_seasonal_q 和 has_drift 輸出欄定義訓練管道中的 ARIMA 模型。log_likelihood、AIC 和 variance 輸出資料欄與 ARIMA 模型擬合程序相關。校正程序會使用 auto.ARIMA 演算法,為每個時間序列決定各自最佳的 ARIMA 模型。
auto.ARIMA 演算法會使用 KPSS 檢定,判斷 non_seasonal_d 的最佳值,在本例中為 1。當 non_seasonal_d 為 1 時,auto.ARIMA 演算法會同時訓練 42 個不同的候選 ARIMA 模型。在這個範例中,所有 42 個候選模型都有效,因此輸出內容包含 42 列,每個候選 ARIMA 模型各一列;如果部分模型無效,則會從輸出內容中排除。這些候選模型會依 AIC 遞增排序。第一列的模型 AIC 最低,因此視為最佳模型。這個最佳模型會儲存為最終模型,並在您預測資料、評估模型及檢查模型係數時使用,如下列步驟所示。
seasonal_periods 欄包含時間序列資料中識別出的季節性模式資訊。每個時間序列可以有不同的季節性模式。舉例來說,從圖中可以看到,其中一個時間序列有年度模式,其他則沒有。
只有在 decompose_time_series=TRUE 時,系統才會填入 has_holiday_effect、has_spikes_and_dips 和 has_step_changes 欄。這些資料欄也會反映輸入時間序列資料的相關資訊,與 ARIMA 建模無關。這些資料欄在所有輸出資料列中也具有相同的值。
檢查模型的係數
SQL
使用 ML.ARIMA_COEFFICIENTS 函式檢查時間序列模型的係數。
請按照下列步驟擷取模型的係數:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
查詢會在 1 秒內完成。結果應大致如下:
如要進一步瞭解輸出資料欄,請參閱「
ML.ARIMA_COEFFICIENTS函式」。
BigQuery DataFrames
使用 coef_ 函式檢查時間序列模型的係數。
試用這個範例前,請先按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定操作說明操作。詳情請參閱 BigQuery DataFrames 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
start_station_name 欄會指出建立時間序列的輸入資料欄。這是您在建立模型時,於 time_series_id_col 選項中指定的資料欄。
ar_coefficients 輸出資料欄會顯示 ARIMA 模型自迴歸 (AR) 部分的模型係數。同樣地,ma_coefficients 輸出欄會顯示 ARIMA 模型移動平均 (MA) 部分的模型係數。這兩欄都包含陣列值,長度分別等於 non_seasonal_p 和 non_seasonal_q。intercept_or_drift 值是 ARIMA 模型中的常數項。
使用模型預測資料
SQL
使用 ML.FORECAST 函式預測未來時間序列值。
在下列 GoogleSQL 查詢中,STRUCT(3 AS horizon, 0.9 AS confidence_level) 子句表示查詢會預測 3 個未來時間點,並產生信賴水準為 90% 的預測區間。
請按照下列步驟,使用模型預測資料:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level))
按一下「執行」。
查詢會在 1 秒內完成。結果應大致如下:
如要進一步瞭解輸出資料欄,請參閱「ML.FORECAST 函式」。
BigQuery DataFrames
使用 predict 函式預測未來時間序列值。
試用這個範例前,請先按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定操作說明操作。詳情請參閱 BigQuery DataFrames 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
第一欄 start_station_name 會註解每個時間序列模型擬合的時間序列。每個 start_station_name 都有三列預測結果,如 horizon 值所指定。
針對每個 start_station_name,輸出資料列會依 forecast_timestamp 欄值按時間順序排列。在時間序列預測中,prediction_interval_lower_bound 和 prediction_interval_upper_bound 欄值代表的預測間隔,與 forecast_value 欄值一樣重要。forecast_value 值是預測區間的中間點。預測間隔取決於 standard_error 和 confidence_level 欄的值。
說明預測結果
SQL
除了預測資料外,您也可以使用 ML.EXPLAIN_FORECAST 函式取得可解釋性指標。ML.EXPLAIN_FORECAST 函式會預測未來時間序列值,並傳回時間序列的所有個別元件。如果只想傳回預測資料,請改用 ML.FORECAST 函式,如「使用模型預測資料」一節所示。
ML.EXPLAIN_FORECAST 函式中使用的 STRUCT(3 AS horizon, 0.9 AS confidence_level) 子句,表示查詢會預測未來 3 個時間點,並產生信賴水準為 90% 的預測區間。
請按照下列步驟說明模型結果:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level));
查詢會在 1 秒內完成。結果應大致如下:
傳回的前一千列都是歷來資料。您必須捲動瀏覽結果,才能查看預測資料。
輸出資料列會先依
start_station_name排序,然後依time_series_timestamp資料欄值按時間順序排序。在時間序列預測中,由prediction_interval_lower_bound和prediction_interval_upper_bound資料欄值表示的預測間隔,與forecast_value資料欄值一樣重要。forecast_value值是預測區間的中間點。預測間隔取決於standard_error和confidence_level欄的值。如要進一步瞭解輸出資料欄,請參閱
ML.EXPLAIN_FORECAST。
BigQuery DataFrames
除了預測資料外,您也可以使用 predict_explain 函式取得可解釋性指標。predict_explain 函式會預測未來時間序列值,並傳回時間序列的所有個別元件。如果只想傳回預測資料,請改用 predict 函式,如「使用模型預測資料」一節所示。
predict_explain 函式中使用的 horizon=3, confidence_level=0.9 子句,表示查詢會預測未來 3 個時間點,並產生信賴水準為 90% 的預測區間。
試用這個範例前,請先按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定操作說明操作。詳情請參閱 BigQuery DataFrames 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
輸出資料列會先依 time_series_timestamp 排序,然後依 start_station_name 資料欄值按時間順序排序。在時間序列預測中,由 prediction_interval_lower_bound 和 prediction_interval_upper_bound 資料欄值表示的預測間隔,與 forecast_value 資料欄值一樣重要。forecast_value 值是預測區間的中間點。預測間隔取決於 standard_error 和 confidence_level 欄的值。
清除所用資源
為避免因為本教學課程所用資源,導致系統向 Google Cloud 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
- 您可以刪除建立的專案。
- 或者您可以保留專案並刪除資料集。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
如有需要,請在Google Cloud 控制台開啟 BigQuery 頁面。
在導覽窗格中,按一下您建立的 bqml_tutorial 資料集。
按一下「Delete dataset」(刪除資料集),即可刪除資料集、資料表和所有資料。
在「Delete dataset」(刪除資料集) 對話方塊中,輸入資料集名稱 (
bqml_tutorial) 來確認刪除指令,然後點選「Delete」(刪除)。
刪除專案
如要刪除專案,請進行以下操作:
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
後續步驟
- 瞭解如何使用單變數模型預測單一時間序列
- 瞭解如何使用多變數模型預測單一時間序列
- 瞭解如何在預測多個資料列的多個時間序列時,擴充單變數模型。
- 瞭解如何使用單變數模型,以階層方式預測多個時間序列
- 如要瞭解 BigQuery ML,請參閱「BigQuery AI 和機器學習簡介」。