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 | 整數 | 用於批次推論的工作站數量上限。 |