使用 ARIMA_PLUS 單變數模型預測分層時間序列
本教學課程將說明如何使用 ARIMA_PLUS
單變數時間序列模型預測分層時間序列。這項功能會根據指定欄的歷史值,預測該欄的未來值,並針對一或多個感興趣的維度,計算該欄的匯總值。
系統會針對每個時間點,以及一或多個指定感興趣維度的欄中的每個值,計算預測值。舉例來說,如果您想預測每日交通事故,並指定包含狀態資料的維度欄,預測資料就會包含狀態 A 的每日值,接著是狀態 B 的每日值,依此類推。如果您想預測每日交通事故,以及包含州和城市資料的指定維度欄,預測資料就會包含州 A 和城市 A 的每日值,接著是州 A 和城市 B 的每日值,依此類推。在階層式時間序列模型中,階層式對照可用於匯總並對每個子項時間序列與其父項進行對照。舉例來說,州 A 中所有城市的預估值總和必須等於州 A 的預估值。
在本教學課程中,您會針對相同資料建立兩個時間序列模型,一個使用分層預測,另一個則不使用。這樣一來,您就能比較模型傳回的結果。
本教學課程使用公開 bigquery-public-data.iowa_liquor.sales.sales
資料表的資料。這份表格包含使用愛荷華州公開酒類銷售資料,針對不同商店內超過 100 萬種酒類產品的資訊。
在閱讀本教學課程之前,強烈建議您先參閱「使用單變量模型預測多個時間序列」。
所需權限
如要建立資料集,您必須具備
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 簡介」。
目標
在本教學課程中,您會使用下列項目:
- 使用
CREATE MODEL
陳述式建立多個時間序列模型和多個階層時間序列模型,以便預測瓶裝飲料的銷售值。 - 使用
ML.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.
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點選
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「Create dataset」頁面上執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。在「位置類型」中選取「多區域」,然後選取「美國 (多個美國區域)」。
保留其餘預設設定,然後點選「Create 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
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
查詢完成 (約需 37 秒) 後,
liquor_forecast
模型就會顯示在「Explorer」窗格中。由於查詢使用CREATE MODEL
陳述式建立模型,因此沒有查詢結果。前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.liquor_forecast`, STRUCT(20 AS horizon, 0.8 AS confidence_level)) ORDER BY store_number, county, city, zip_code, forecast_timestamp;
結果應如下所示:
輸出結果會從第一個時間序列的預測資料開始,即
store_number=2190
、zip_code=50314
、city=DES MOINES
、county=POLK
。捲動資料時,您會看到每個後續獨特時間序列的預測值。如要產生匯總不同維度 (例如特定縣市的預測資料) 的預測資料,您必須產生階層式預測資料。前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
查詢作業大約需要 45 秒才能完成,完成後「
bqml_tutorial.liquor_forecast_hierarchical
」模型就會顯示在「探索器」窗格中。由於查詢是使用CREATE MODEL
陳述式建立模型,因此沒有查詢結果。前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.liquor_forecast_hierarchical`, STRUCT(30 AS horizon, 0.8 AS confidence_level)) WHERE city = 'LECLAIRE' ORDER BY county, city, zip_code, store_number, forecast_timestamp;
結果應如下所示:
請注意,系統會如何顯示 LeClaire、
store_number=NULL
、zip_code=NULL
、city=LECLAIRE
、county=SCOTT
等城市的匯總預測資料。查看其他資料列時,請留意其他子群組的預測值。舉例來說,下圖顯示郵遞區號52753
、store_number=NULL
、zip_code=52753
、city=LECLAIRE
、county=SCOTT
的匯總預測資料:- 您可以刪除建立的專案。
- 或者您可以保留專案並刪除資料集。
如有必要,請在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 簡介」。
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
bq
如要建立新的資料集,請使用 bq mk
指令搭配 --location
旗標。如需可能參數的完整清單,請參閱 bq mk --dataset
指令參考資料。
API
請呼叫 datasets.insert
方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
在嘗試這個範例之前,請先參閱 BigQuery 快速入門:使用 BigQuery DataFrames,按照 BigQuery DataFrames 設定說明進行操作。詳情請參閱 BigQuery DataFrames 參考資料說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定 ADC」。
建立時間序列模型
使用愛荷華州酒類銷售資料建立時間序列模型。
下列 GoogleSQL 查詢會建立模型,預測 2015 年在 Polk、Linn 和 Scott 縣銷售的每日瓶數總數。
在以下查詢中,OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
子句表示您要建立以 ARIMA 為基礎的時間序列模型。您可以使用 CREATE MODEL
陳述式的 TIME_SERIES_ID
選項,在輸入資料中指定一或多個要取得預測資料的資料欄。CREATE MODEL
陳述式的 auto_arima_max_order
選項會控制 auto.ARIMA
演算法中超參數調整的搜尋空間。CREATE MODEL
陳述式的 decompose_time_series
選項預設為 TRUE
,因此在下一個步驟評估模型時,系統會傳回時間序列資料的相關資訊。
OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
子句表示您正在建立以 ARIMA 為基礎的時間序列模型。根據預設,auto_arima=TRUE
,因此 auto.ARIMA
演算法會自動調整 ARIMA_PLUS
模型中的超參數。演算法會套用數十個候選模型,並選擇最佳模型,也就是赤池訊息量準則 (AIC) 最低的模型。如果時間序列中含有美國節日模式,將 holiday_region
選項設為 US
,即可更準確地模擬這些美國節日時間點。
請按照下列步驟建立模型:
使用模型預測資料
使用 ML.FORECAST
函式預測未來的時間序列值。
在以下查詢中,STRUCT(20 AS horizon, 0.8 AS confidence_level)
子句表示查詢會預測 20 個未來時間點,並產生信賴水準為 80% 的預測區間。
如要使用模型預測資料,請按照下列步驟操作:
建立階層式時間序列模型
使用愛荷華州酒類銷售資料,建立階層式時間序列預測。
下列 GoogleSQL 查詢會建立模型,針對 2015 年 Polk、Linn 和 Scott 縣的每日售出瓶數產生階層式預測資料。
在以下查詢中,CREATE MODEL
陳述式中的 HIERARCHICAL_TIME_SERIES_COLS
選項表示您要根據指定的一組資料欄建立階層式預測資料。每個資料欄都會匯總並匯總。舉例來說,從先前的查詢來看,這表示 store_number
欄值會匯總,以便顯示每個 county
、city
和 zip_code
值的預測資料。另外,zip_code
和 store_number
值也會匯總,以顯示每個 county
和 city
值的預測資料。資料欄順序很重要,因為它會定義階層結構。
請按照下列步驟建立模型:
使用階層式模型預測資料
使用 ML.FORECAST
函式,從模型中擷取階層式預測資料。
如要使用模型預測資料,請按照下列步驟操作:
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
刪除專案
如要刪除專案,請進行以下操作: