Prophet 是 Meta 維護的預測模型。如要瞭解演算法詳情,請參閱 Prophet 論文,如要進一步瞭解程式庫,請參閱說明文件。
與 BigQuery ML ARIMA_PLUS 類似,Prophet 會嘗試將每個時間序列分解為趨勢、季節和節慶,並使用這些模型推論的匯總結果產生預測。不過,BQML ARIMA+ 是使用 ARIMA 建立趨勢元件模型,而 Prophet 則嘗試使用分段式羅吉斯迴歸或線性模型來擬合曲線,這是兩者之間的重要差異。
Google Cloud 提供訓練 Prophet 模型的管道,以及從 Prophet 模型取得批次推論結果的管道。這兩個管道都是 Google Cloud Pipeline Components (GCPC) 的 Vertex AI Pipelines 執行個體。
將 Prophet 與 Vertex AI 整合後,您就能執行下列操作:
- 使用 Vertex AI 資料分割和視窗策略。
- 從 BigQuery 資料表或儲存在 Cloud Storage 的 CSV 檔案讀取資料。Vertex AI 預期每個資料列的格式都與 Vertex AI Forecasting 相同。
雖然 Prophet 是多元模型,但 Vertex AI 僅支援單元版本。
如要瞭解這個工作流程使用的服務帳戶,請參閱表格工作流程的服務帳戶。
Workflow API
這個工作流程會使用下列 API:
- Vertex AI
- Dataflow
- BigQuery
- Cloud Storage
使用 Prophet 訓練模型
Prophet 是專為單一時間序列設計,Vertex AI 會依時間序列 ID 彙整資料,並為每個時間序列訓練 Prophet 模型。模型訓練管道會使用格線搜尋和 Prophet 的內建回溯測試邏輯,執行超參數調整作業。
為支援多個時間序列,管線會使用 Vertex AI 自訂訓練工作和 Dataflow,平行訓練多個 Prophet 模型。整體而言,訓練的模型數量是時間序列數量和超參數調整試驗次數的乘積。
下列程式碼範例示範如何執行 Prophet 模型訓練管道:
job = aiplatform.PipelineJob(
...
template_path=train_job_spec_path,
parameter_values=train_parameter_values,
...
)
job.run(service_account=SERVICE_ACCOUNT)
您可以在 job.run()
中使用選用的 service_account
參數,將 Vertex AI Pipelines 服務帳戶設為您選擇的帳戶。
下列函式會定義管道和參數值。
(
train_job_spec_path,
train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
...
)
以下是一部分的 get_prophet_train_pipeline_and_parameters
參數:
參數名稱 | 類型 | 定義 |
---|---|---|
project |
字串 | 您的專案 ID。 |
location |
字串 | 你所在的地區。 |
root_dir |
字串 | 儲存輸出的 Cloud Storage 位置。 |
target_column |
字串 | 您希望模型預測的資料欄 (值)。 |
time_column |
字串 | 時間欄。 您必須指定時間欄,且每列都必須有值。「時間」欄會指出進行特定觀察的時間。 |
time_series_identifier_column |
字串 | 時間序列 ID 欄。您必須指定時間序列 ID 欄,且每個資料列都必須有值。預測訓練資料通常包含多個時間序列,而 ID 會告知 Vertex AI 訓練資料中特定觀察結果所屬的時間序列。特定時間序列中的所有資料列,在時間序列 ID 欄中都有相同的值。常見的時間序列 ID 可能包括產品 ID、商店 ID 或區域。您可以針對單一時間序列訓練預測模型,時間序列 ID 欄中所有資料列的值都相同。不過,如果訓練資料包含兩個以上的時間序列,則更適合使用 Vertex AI。為獲得最佳結果,請為用於訓練模型的每個資料欄至少提供 10 個時間序列。 |
data_granularity_unit |
字串 | 用於訓練資料精細程度、預測期間和背景期間的單位。可以是 minute 、hour 、day 、week 、month 或 year 。瞭解如何選擇資料精細程度。 |
data_source_csv_filenames |
字串 | 儲存在 Cloud Storage 中的 CSV 檔案 URI。 |
data_source_bigquery_table_path |
字串 | BigQuery 資料表的 URI。 |
forecast_horizon |
整數 | 預測範圍會決定模型預測預測資料每列目標值的未來時間長度。預測期間是以資料精細度的單位指定。瞭解詳情。 |
optimization_objective |
字串 | 模型的最佳化目標。瞭解詳情。 |
max_num_trials |
整數 | 每個時間序列要執行的微調測試次數上限。 |
Dataflow 參數
以下是 Dataflow 自訂項目的部分 get_prophet_train_pipeline_and_parameters
參數:
參數名稱 | 類型 | 定義 |
---|---|---|
trainer_dataflow_machine_type |
字串 | 用於訓練的 Dataflow 機器類型。 |
trainer_dataflow_max_num_workers |
整數 | 用於訓練的 Dataflow 工作站數量上限。 |
evaluation_dataflow_machine_type |
字串 | 用於評估的 Dataflow 機器類型。 |
evaluation_dataflow_max_num_workers |
整數 | 用於評估的 Dataflow 工作站數量上限。 |
dataflow_service_account |
字串 | 執行 Dataflow 工作的自訂服務帳戶。您可以將 Dataflow 工作設為使用私有 IP 位址和特定虛擬私有雲子網路。這個參數會覆寫預設的 Dataflow 工作站服務帳戶。 |
由於 Prophet 訓練工作是在 Dataflow 上執行,因此初始啟動時間為 5 到 7 分鐘。如要減少額外執行時間,可以向上或向外擴充。舉例來說,如要擴充,您可以將機器類型從 n1-standard-1
變更為 e2-highcpu-8
。如要擴充,您可以將工作站數量從 1
增加到 200
。
資料分割參數
訓練管道提供下列資料分割選項:
資料分割 | 說明 | 參數 |
---|---|---|
預設分割 | Vertex AI 會隨機選取 80% 的資料列做為訓練集、10% 做為驗證集,以及 10% 做為測試集。Vertex AI 會使用「時間」欄判斷資料列的先後順序。 | 無 |
分數拆分 | Vertex AI 會使用您提供的值,將資料分割為訓練集、驗證集和測試集。Vertex AI 會使用「時間」欄判斷資料列的先後順序。 |
|
時間戳記分割 | Vertex AI 會使用 training_fraction 、validation_fraction 和 test_fraction 值,將資料分割為訓練集、驗證集和測試集。Vertex AI 會使用 timestamp_split_key 欄判斷資料列的依時間順序。 |
|
手動 (預先定義) 分割 | Vertex AI 會使用 predefined_split_key 資料欄中的 TRAIN、VALIDATE 或 TEST 值分割資料。 |
|
您可以在 get_prophet_train_pipeline_and_parameters
中定義資料分割參數,如下所示:
參數名稱 | 類型 | 定義 |
---|---|---|
predefined_split_key |
字串 | 包含 TRAIN、VALIDATE 或 TEST 值的資料欄名稱。如果您使用手動 (預先定義) 分割,請設定這個值。 |
training_fraction |
浮點值 | 要指派給訓練集的資料百分比。如果您使用分數分割或時間戳記分割,請設定這個值。 |
validation_fraction |
浮點值 | 要指派給驗證集的資料百分比。如果您使用分數分割或時間戳記分割,請設定這個值。 |
test_fraction |
浮點值 | 要指派給測試集的資料百分比。如果您使用分數分割或時間戳記分割,請設定這個值。 |
timestamp_split_key |
字串 | 含有資料分割時間戳記的資料欄名稱。如果您使用時間戳記分割,請設定這個值。 |
視窗參數
Vertex AI 會使用滾動視窗策略,從輸入資料產生預測視窗。如果未設定視窗參數,Vertex AI 會使用「計數」策略,預設最大值為 100,000,000
。訓練管道提供下列滾動週期策略:
滾動週期策略 | 說明 | 參數 |
---|---|---|
數量 |
Vertex AI 生成的視窗數量不得超過使用者提供的上限。如果輸入資料集中的資料列數少於視窗數量上限,系統會使用每個資料列產生視窗。否則,Vertex AI 會執行隨機取樣來選取資料列。視窗數上限的預設值為 100,000,000 。視窗數量上限不得超過 100,000,000 。
|
window_max_count |
跨距 |
Vertex AI 會使用每 X 個輸入資料列中的一個來生成視窗,最多可生成 100,000,000 個視窗。這個選項適用於季節性或定期的預測。舉例來說,您可以將步幅長度值設為 7 ,將預測限制為每週的單一日期。這個值可介於 1 和 1000 之間。 |
window_stride_length |
欄 |
您可以在輸入資料中新增資料欄,其中的值為 True 或 False 。Vertex AI 會為每個輸入資料列產生視窗,其中資料欄的值為 True 。True 和 False 值可以依任意順序設定,只要 True 列的總數小於 100,000,000 即可。建議使用布林值,但系統也接受字串值。字串值不區分大小寫。
|
window_column |
您可以在 get_prophet_train_pipeline_and_parameters
中定義視窗參數,如下所示:
參數名稱 | 類型 | 定義 |
---|---|---|
window_column |
字串 | 包含 True 和 False 值的資料欄名稱。 |
window_stride_length |
整數 | 步長值。 |
window_max_count |
整數 | 視窗數量上限。 |
使用 Prophet 進行推論
Vertex AI Prophet 模型訓練管道會為資料中的每個時間序列建立一個 Prophet 模型。推論管道會依時間序列 ID 匯總輸入資料,並分別計算每個時間序列的推論結果。然後,管道會將推論結果拆解成與 Vertex AI Forecasting 格式相符的結果。
下列程式碼範例示範如何執行 Prophet 推論管道:
job = aiplatform.PipelineJob(
...
template_path=prediction_job_spec_path,
parameter_values=prediction_parameter_values,
...
)
job.run(...)
下列函式會定義管道和參數值。
(
prediction_job_spec_path,
prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
...
)
以下是一部分的 get_prophet_prediction_pipeline_and_parameters
參數:
參數名稱 | 類型 | 定義 |
---|---|---|
project |
字串 | 您的專案 ID。 |
location |
字串 | 你所在的地區。 |
model_name |
字串 | 模型資源的名稱。字串格式如下:projects/{project}/locations/{location}/models/{model} 。 |
time_column |
字串 | 時間欄。 您必須指定時間欄,且每列都必須有值。「時間」欄會指出進行特定觀察的時間。 |
time_series_identifier_column |
字串 | 時間序列 ID 欄。您必須指定時間序列 ID 欄,且每個資料列都必須有值。預測訓練資料通常包含多個時間序列,而 ID 會告知 Vertex AI 訓練資料中特定觀察結果所屬的時間序列。特定時間序列中的所有資料列,在時間序列 ID 欄中都有相同的值。常見的時間序列 ID 可能包括產品 ID、商店 ID 或區域。您可以針對單一時間序列訓練預測模型,時間序列 ID 欄中所有資料列的值都相同。不過,如果訓練資料包含兩個以上的時間序列,則更適合使用 Vertex AI。為獲得最佳結果,請為用於訓練模型的每個資料欄至少提供 10 個時間序列。 |
target_column |
字串 | 您希望模型預測的資料欄 (值)。 |
data_source_csv_filenames |
字串 | 儲存在 Cloud Storage 中的 CSV 檔案 URI。 |
data_source_bigquery_table_path |
字串 | BigQuery 資料表的 URI。 |
bigquery_destination_uri |
字串 | 所選目的地資料集的 URI。如果未設定這個值,系統會在專案的新資料集中建立資源。 |
machine_type |
字串 | 用於批次推論的機器類型。 |
max_num_workers |
整數 | 用於批次推論的工作站數量上限。 |