使用 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 簡介」。

目標

在本教學課程中,您會使用下列項目:

費用

本教學課程使用 Cloud de Confiance by S3NS的計費元件,包括:

  • BigQuery
  • BigQuery ML

如要進一步瞭解 BigQuery 費用,請參閱「BigQuery 定價」頁面。

如要進一步瞭解 BigQuery ML 費用,請參閱「BigQuery ML 定價」。

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. 新專案會自動啟用 BigQuery。如要在現有專案中啟用 BigQuery,請前往

    啟用 BigQuery API (如果尚未啟用)。

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

建立資料集

如要建立 BigQuery 資料集,請選取下列其中一個選項:

控制台

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 點選左側窗格中的 「Explorer」。

    醒目顯示的「Explorer」窗格按鈕。

    如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。

  3. 在「Explorer」中展開專案,然後按一下「資料集」。

  4. 在「Datasets」(資料集) 頁面,按一下「Create dataset」(建立資料集)。

  5. 在「建立資料集」窗格中,執行下列操作:

    • 在「Dataset ID」(資料集 ID) 中輸入 bqml_tutorial。

    • 在「資料位置」部分,選取「US」。

    其餘預設設定則保持不變。

  6. 點選「建立資料集」。

bq

如要建立新的資料集,請使用 bq mk --dataset 指令。

  1. 建立名為 bqml_tutorial 的資料集,並將資料位置設為 US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. 確認資料集已建立:

    bq ls

API

使用定義的資料集資源呼叫 datasets.insert 方法:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

建立時間序列模型

使用愛荷華州酒類銷售資料,建立時間序列模型。

下列 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,即可在這些美國節日時間點進行更準確的模擬。

請按照下列步驟建立模型:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中貼上以下查詢,然後點選「執行」:

    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 模型。由於查詢使用 CREATE MODEL 陳述式建立模型,因此不會有查詢結果。

使用模型預測資料

使用 ML.FORECAST 函式預測未來時間序列值。

在下列查詢中,STRUCT(20 AS horizon, 0.8 AS confidence_level) 子句表示查詢會預測 20 個未來時間點,並產生信賴水準為 80% 的預測區間。

請按照下列步驟,使用模型預測資料:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中貼上以下查詢,然後點選「執行」:

    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。捲動資料時,您會看到每個後續不重複時間序列的預測。如要產生匯總不同維度總計的預測,例如特定郡縣的預測,您必須產生階層式預測。

建立階層式時間序列模型

使用愛荷華州酒類銷售資料,建立階層式時間序列預測。

下列 GoogleSQL 查詢會建立模型,針對 2015 年 Polk、Linn 和 Scott 郡每日售出的瓶裝酒總數,生成階層式預測。

在下列查詢中,CREATE MODEL 陳述式中的 HIERARCHICAL_TIME_SERIES_COLS 選項表示您要根據指定的一組資料欄建立階層式預測。這些資料欄都會匯總。舉例來說,從先前的查詢來看,這表示 store_number 資料欄值會匯總,顯示每個 county、city 和 zip_code 值的預測。此外,zip_code 和 store_number 值也會分別匯總,顯示每個 county 和 city 值的預測結果。資料欄順序會決定階層結構,因此十分重要。

請按照下列步驟建立模型:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中貼上以下查詢,然後點選「執行」:

    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 秒才能完成,完成後,您可以在「Explorer」窗格中存取 bqml_tutorial.liquor_forecast_hierarchical 模型。由於查詢使用 CREATE MODEL 陳述式建立模型,因此沒有查詢結果。

使用階層模型預測資料

使用 ML.FORECAST 函式,從模型擷取階層式預測資料。

請按照下列步驟,使用模型預測資料:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中貼上以下查詢,然後點選「執行」:

    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 的匯總預測:

    階層式時間序列範例。

清除所用資源

如要避免系統向您的 Cloud de Confiance by S3NS 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

  • 您可以刪除建立的專案。
  • 或者您可以保留專案並刪除資料集。

刪除資料集

刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。

  1. 如有需要,請在Cloud de Confiance 控制台開啟 BigQuery 頁面。

    前往「BigQuery」頁面

  2. 在導覽窗格中,按一下您建立的 bqml_tutorial 資料集。

  3. 按一下視窗右側的「刪除資料集」。這個動作將會刪除資料集、資料表,以及所有資料。

  4. 在「Delete dataset」(刪除資料集) 對話方塊中,輸入資料集名稱 (bqml_tutorial) 來確認刪除指令,然後點選「Delete」(刪除)。

刪除專案

如要刪除專案,請進行以下操作:

  1. 前往 Cloud de Confiance 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟