本頁面說明如何使用 Google Cloud 控制台或 Vertex AI API,從表格資料集訓練預測模型。
事前準備
訓練預測模型前,請先完成下列步驟:
訓練模型
Google Cloud 控制台
在 Google Cloud 控制台的 Vertex AI 專區,前往「Datasets」頁面。
按一下要用來訓練模型的資料集名稱,開啟詳細資料頁面。
如果資料類型使用註解集,請選取要用於這個模型的註解集。
按一下「訓練新模型」。
選取「其他」。
在「訓練方法」頁面中,完成以下設定:
選取模型訓練方法。詳情請參閱「模型訓練方法」。
按一下「繼續」。
在「Model details」(模型詳細資料) 頁面中,按照下列方式設定:
輸入新模型的顯示名稱。
選取目標欄。
目標欄是模型預測的值。 進一步瞭解目標資料欄規定。
如果尚未在資料集上設定序列 ID 和時間戳記欄,請立即選取。
選取「資料精細程度」。如要使用節慶效果建模,請選取
Daily
。瞭解如何選擇資料精細程度。選用:在「假日區域」下拉式選單中,選擇一或多個地理區域,啟用假日效果模擬。在訓練期間,Vertex AI 會根據「時間戳記」欄中的日期和指定的地理區域,在模型中建立節慶類別特徵。只有在「資料精細度」設為
Daily
時,才能選取這個選項。節慶效應模擬功能預設為停用。如要瞭解用於節慶效果模擬的地理區域,請參閱「節慶區域」。輸入「背景資訊視窗」和「預測範圍」。
預測範圍會決定模型預測預測資料每列目標值的未來時間長度。預測期間是以資料精細度為單位指定。
背景期間會設定模型在訓練期間 (和預測期間) 的回溯時間長度。換句話說,對於每個訓練資料點,背景區間會決定模型回溯多遠的時間,以尋找預測模式。背景期間是以資料精細程度為單位指定。
瞭解詳情。
如要將測試資料集匯出至 BigQuery,請勾選「將測試資料集匯出至 BigQuery」,並提供資料表名稱。
如要手動控制資料分割或設定預測時間範圍,請開啟「進階選項」。
預設資料分割方式為依時間排序,標準百分比為 80/10/10。如要手動指定要將哪些資料列指派給哪個分割,請選取「手動」,並指定「資料分割」資料欄。
進一步瞭解資料分割。
選取預測期間的滾動視窗策略。預設策略為「Count」。
- 計數:在提供的文字方塊中,設定視窗數量上限的值。
- 步幅:在提供的文字方塊中設定步幅長度的值。
- 資料欄:從下拉式選單中選取適當的資料欄名稱。
詳情請參閱「滾動週期策略」。
按一下「繼續」。
在「訓練選項」頁面中,按照下列方式設定:
如果尚未產生統計資料,請按一下「產生統計資料」。
產生統計資料會填入「轉換」下拉式選單。
查看資料欄清單,並從訓練中排除不應使用的資料欄。
如果您使用資料分割資料欄,則應一併納入。
查看所含功能選取的轉換,並進行任何必要更新。
如果資料列包含不適用於所選轉換的無效資料,系統會將其排除在訓練程序之外。進一步瞭解轉換。
針對您納入訓練的每個資料欄,請指定特徵類型,說明該特徵與時間序列的關係,以及是否可在預測時間使用。進一步瞭解功能類型和適用情形。
如要指定權重欄、變更預設最佳化目標,或啟用階層式預測,請開啟「進階選項」。
(選用) 如要指定權重欄,請從下拉式清單中選取。進一步瞭解權重欄。
(選用) 如要選取最佳化目標,請從清單中選取。進一步瞭解最佳化目標。
(選用) 如要使用階層式預測,請選取「啟用階層式預測」。你可以選擇下列三種分組方式:
No grouping
Group by columns
Group all
您也可以選擇設定下列匯總損失權重:
Group total weight
。只有在選取Group by columns
或Group all
選項時,才能設定這個欄位。Temporal total weight
。Group temporal total weight
。只有在選取Group by columns
或Group all
選項時,才能設定這個欄位。
進一步瞭解階層式預測。
按一下「繼續」。
在「Compute and pricing」(運算和價格) 頁面中,按照下列方式設定:
輸入模型訓練時數上限。這項設定可協助您設定訓練成本上限。建立新模型時會涉及其他作業,因此實際經過的時間可能會比這個值長。
建議的訓練時間與預測範圍和訓練資料的大小有關。下表提供一些預測訓練執行作業的範例,以及訓練高品質模型所需的訓練時間範圍。
資料列 功能 預測期間 訓練時間 1,200 萬 10 6 3 到 6 小時 2,000 萬 50 13 6 到 12 小時 1,600 萬 30 365 24-48 小時 如要瞭解訓練定價,請參閱定價頁面。
按一下「開始訓練」。
模型訓練可能需要數小時,視資料大小和複雜度而定,以及您是否指定訓練預算。您可以關閉這個分頁,稍後再返回查看。模型訓練完成後,您會收到電子郵件通知。
API
選取語言或環境的分頁標籤:
REST
您可以使用 trainingPipelines.create 指令訓練模型。
使用任何要求資料之前,請先替換以下項目:
- LOCATION:您的區域。
- PROJECT:您的專案 ID。
- TRAINING_PIPELINE_DISPLAY_NAME:為這項作業建立的訓練管道顯示名稱。
-
TRAINING_TASK_DEFINITION:模型訓練方法。
- 時間序列稠密型編碼器 (TiDE)
gs://google-cloud-aiplatform/schema/trainingjob/definition/time_series_dense_encoder_forecasting_1.0.0.yaml
- 時間融合轉換器 (TFT)
gs://google-cloud-aiplatform/schema/trainingjob/definition/temporal_fusion_transformer_time_series_forecasting_1.0.0.yaml
- AutoML (L2L)
gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_forecasting_1.0.0.yaml
- Seq2Seq+
gs://google-cloud-aiplatform/schema/trainingjob/definition/seq2seq_plus_time_series_forecasting_1.0.0.yaml
- 時間序列稠密型編碼器 (TiDE)
- TARGET_COLUMN:您希望模型預測的資料欄 (值)。
- TIME_COLUMN:時間資料欄。 瞭解詳情。
- TIME_SERIES_IDENTIFIER_COLUMN:時間序列 ID 欄。 瞭解詳情。
- WEIGHT_COLUMN:(選用) 權重欄。 瞭解詳情。
- TRAINING_BUDGET:模型訓練時間上限,以毫節點時數為單位 (1,000 毫節點時數等於 1 節點時數)。
-
GRANULARITY_UNIT:用於訓練資料精細程度、預測期間和背景期間的單位。可以是
minute
、hour
、day
、week
、month
或year
。如要使用節慶假日效果建模,請選取day
。瞭解如何選擇資料精細度。 - GRANULARITY_QUANTITY:構成訓練資料中觀測間隔的精細程度單位數量。除了分鐘以外,所有單位都必須是 1,分鐘則可以是 1、5、10、15 或 30。瞭解如何選擇資料精細度。
- GROUP_COLUMNS:訓練輸入資料表中的資料欄名稱,用於識別階層層級的分組。資料欄必須是 `time_series_attribute_columns`。 瞭解詳情。
- GROUP_TOTAL_WEIGHT:相對於個別損失,群組匯總損失的權重。如果設為 `0.0` 或未設定,系統會停用這項功能。如果未設定群組資料欄,系統會將所有時間序列視為同一群組的一部分,並匯總所有時間序列。瞭解詳情。
- TEMPORAL_TOTAL_WEIGHT:相對於個別損失,時間匯總損失的權重。如果設為 `0.0` 或未設定,系統會停用這項功能。 瞭解詳情。
- GROUP_TEMPORAL_TOTAL_WEIGHT:相對於個別損失,匯總損失 (群組 x 時間) 的權重。如果設為 `0.0` 或未設定,系統會停用這項功能。如果未設定群組資料欄,系統會將所有時間序列視為同一群組的一部分,並匯總所有時間序列。瞭解詳情。
-
HOLIDAY_REGIONS:(選用) 您可以選取一或多個地理區域,啟用節慶效應模型。訓練期間,Vertex AI 會根據 TIME_COLUMN 中的日期和指定的地理區域,在模型中建立節慶類別特徵。如要啟用這項功能,請將 GRANULARITY_UNIT 設為
day
,並在 HOLIDAY_REGIONS 欄位中指定一或多個區域。節慶效應模擬功能預設為停用。詳情請參閱節慶區域。 - FORECAST_HORIZON: 預測期間會決定模型預測每列預測資料目標值的未來時間長度。 預測期間是以資料精細程度 (GRANULARITY_UNIT) 為單位指定。瞭解詳情。
- CONTEXT_WINDOW: 脈絡視窗會設定模型在訓練期間 (以及預測時) 的回溯時間範圍。換句話說,對於每個訓練資料點,背景區間會決定模型回溯多遠的時間,以尋找預測模式。背景資訊視窗是以資料精細度單位 (GRANULARITY_UNIT) 指定。瞭解詳情。
- OPTIMIZATION_OBJECTIVE:根據預設,Vertex AI 會盡量減少均方根誤差 (RMSE)。如果想為預測模型設定不同的最佳化目標,請從「預測模型的最佳化目標」中選擇一個選項。 如果選擇盡量減少分位數損失,也必須指定 QUANTILES 的值。
-
PROBABILISTIC_INFERENCE:(選用) 如果設為
true
,Vertex AI 會模擬預測的機率分布。機率推論可處理有雜訊的資料並量化不確定性,進而提升模型品質。如果指定 QUANTILES,Vertex AI 也會傳回機率分布的分位數。機率推論僅適用於Time series Dense Encoder (TiDE)
和AutoML (L2L)
訓練方法。這項功能與階層式預測和minimize-quantile-loss
最佳化目標不相容。 -
QUANTILES:用於
minimize-quantile-loss
最佳化目標和機率推論的分位數。請提供最多五個介於0
和1
之間的不重複數字 (不含0
和1
)。 - TIME_SERIES_ATTRIBUTE_COL:時間序列屬性的資料欄名稱。瞭解詳情。
- AVAILABLE_AT_FORECAST_COL:共變數資料欄的名稱,其值在預測時已知。瞭解詳情。
- UNAVAILABLE_AT_FORECAST_COL:共變數資料欄的名稱,預測時的值不明。瞭解詳情。
- TRANSFORMATION_TYPE:系統會為用於訓練模型的每個資料欄提供轉換類型。瞭解詳情。
- COLUMN_NAME:具有指定轉換類型的資料欄名稱。必須指定用於訓練模型的所有資料欄。
- MODEL_DISPLAY_NAME:新訓練模型的顯示名稱。
- DATASET_ID:訓練資料集的 ID。
-
您可以提供
Split
物件來控制資料分割。如要瞭解如何控制資料分割,請參閱「使用 REST 控制資料分割」。 -
您可以提供
windowConfig
物件,為預測視窗產生作業設定滾動視窗策略。詳情請參閱「使用 REST 設定滾動式時間範圍策略」。 - PROJECT_NUMBER:系統自動為專案產生的專案編號
HTTP 方法和網址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines
JSON 要求主體:
{ "displayName": "TRAINING_PIPELINE_DISPLAY_NAME", "trainingTaskDefinition": "TRAINING_TASK_DEFINITION", "trainingTaskInputs": { "targetColumn": "TARGET_COLUMN", "timeColumn": "TIME_COLUMN", "timeSeriesIdentifierColumn": "TIME_SERIES_IDENTIFIER_COLUMN", "weightColumn": "WEIGHT_COLUMN", "trainBudgetMilliNodeHours": TRAINING_BUDGET, "dataGranularity": {"unit": "GRANULARITY_UNIT", "quantity": GRANULARITY_QUANTITY}, "hierarchyConfig": {"groupColumns": GROUP_COLUMNS, "groupTotalWeight": GROUP_TOTAL_WEIGHT, "temporalTotalWeight": TEMPORAL_TOTAL_WEIGHT, "groupTemporalTotalWeight": GROUP_TEMPORAL_TOTAL_WEIGHT} "holidayRegions" : ["HOLIDAY_REGIONS_1", "HOLIDAY_REGIONS_2", ...] "forecast_horizon": FORECAST_HORIZON, "context_window": CONTEXT_WINDOW, "optimizationObjective": "OPTIMIZATION_OBJECTIVE", "quantiles": "QUANTILES", "enableProbabilisticInference": "PROBABILISTIC_INFERENCE", "time_series_attribute_columns": ["TIME_SERIES_ATTRIBUTE_COL_1", "TIME_SERIES_ATTRIBUTE_COL_2", ...] "available_at_forecast_columns": ["AVAILABLE_AT_FORECAST_COL_1", "AVAILABLE_AT_FORECAST_COL_2", ...] "unavailable_at_forecast_columns": ["UNAVAILABLE_AT_FORECAST_COL_1", "UNAVAILABLE_AT_FORECAST_COL_2", ...] "transformations": [ {"TRANSFORMATION_TYPE_1": {"column_name" : "COLUMN_NAME_1"} }, {"TRANSFORMATION_TYPE_2": {"column_name" : "COLUMN_NAME_2"} }, ... }, "modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"}, "inputDataConfig": { "datasetId": "DATASET_ID", } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/trainingPipelines/TRAINING_PIPELINE_ID", "displayName": "myModelName", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "modelToUpload": { "displayName": "myModelName" }, "state": "PIPELINE_STATE_PENDING", "createTime": "2020-08-18T01:22:57.479336Z", "updateTime": "2020-08-18T01:22:57.479336Z" }
Python
如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Python API 參考說明文件。
使用 REST 控制資料分割
您可以控制訓練資料在訓練、驗證和測試集之間的分割方式。使用分割欄手動指定每個資料列的資料分割,並在 JSON 要求的 inputDataConfig
中,以 PredefinedSplit
Split
物件的形式提供。
DATA_SPLIT_COLUMN 是包含資料分割值的資料欄 (TRAIN
、VALIDATION
、TEST
)。
"predefinedSplit": {
"key": DATA_SPLIT_COLUMN
},
進一步瞭解資料分割。
使用 REST 設定滾動式回溯期策略
您可以提供 windowConfig
物件,為預測視窗產生作業設定滾動視窗策略。預設策略為 maxCount
。
如要使用
maxCount
選項,請在 JSON 要求的trainingTaskInputs
中新增下列內容。MAX_COUNT_VALUE 是指視窗數量上限。"windowConfig": { "maxCount": MAX_COUNT_VALUE }, ```
如要使用
strideLength
選項,請在 JSON 要求的trainingTaskInputs
中新增下列內容。STRIDE_LENGTH_VALUE 是指步長的長度值。"windowConfig": { "strideLength": STRIDE_LENGTH_VALUE }, ```
如要使用
column
選項,請在 JSON 要求的trainingTaskInputs
中新增下列內容。COLUMN_NAME 是指含有True
或False
值的資料欄名稱。"windowConfig": { "column": "COLUMN_NAME" }, ```
詳情請參閱「滾動週期策略」。
後續步驟
- 評估模型。