本教學課程說明如何使用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 定價。
事前準備
- 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.datasets.create
IAM 權限。如要建立模型,您必須具備下列權限:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
如要執行推論,您需要下列權限:
bigquery.models.getData
bigquery.jobs.create
所需權限
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「IAM 簡介」。
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Google 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」(建立資料集)。
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」。
以視覺化方式呈現輸入資料
建立模型前,您可以選擇將輸入時間序列資料視覺化,瞭解資料分布情形。您可以使用 Looker Studio 執行這項操作。
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;
查詢完成後,依序點按「探索資料」>「透過 Looker Studio 探索」。Looker Studio 會在新分頁中開啟,在新分頁中完成下列步驟。
在 Looker Studio 中,依序點選「插入」>「時間序列圖表」。
在「圖表」窗格中,選擇「設定」分頁。
在「指標」專區中新增「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
」模型會顯示在「Explorer」(探索) 窗格中。 由於查詢使用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`);
查詢不到一秒即可完成。結果應如下所示:
如要進一步瞭解輸出資料欄,請參閱
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))
按一下「執行」。
查詢不到一秒即可完成。結果應如下所示:
如要進一步瞭解輸出資料欄,請參閱 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));
查詢不到一秒即可完成。結果應如下所示:
傳回的前幾千列都是歷史資料。您必須捲動瀏覽結果,才能查看預測資料。
輸出資料列會先依
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」(刪除資料集) 對話方塊中,輸入資料集的名稱 (
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 簡介。