使用 建立用於時間序列預測的 AutoML 任務 API - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 建立用於時間序列預測的 AutoML 任務 API

機器學習的預測是指根據歷史資料與模式預測未來結果或趨勢的過程。透過分析過去的時間序列資料並識別基礎模式,機器學習演算法可以做出預測,並為未來行為提供有價值的洞察。在預測中,目標是開發能夠隨時間精確擷取輸入變數與目標變數之間關係的模型。這涉及檢查各種因素,例如趨勢、季節性及資料的其他相關模式。然後,收集的資訊會用來訓練機器學習模型。經過訓練的模型能夠透過取得新的輸入資料並應用學習到的模式與關係來產生預測。它可以為各種使用案例提供預測,例如銷售預測、股票市場趨勢、天氣預報、需求預測等等。

下列指示說明如何使用 SageMaker API參考 建立 Amazon SageMaker Autopilot 任務作為時間序列預測問題類型的試驗實驗。

注意

文字和影像分類、時間序列預測和大型語言模型微調等任務,都只能透過 AutoML 的第 REST API2 版取得。如果您選擇的語言是 Python,您可以SDK直接參考 AWS SDK for Python (Boto3)或 Amazon SageMaker Python 的 AutoMLV2 物件

偏好使用者介面便利性的使用者可以使用 Amazon SageMaker Canvas 存取預先訓練的模型和生成 AI 基礎模型,或建立自訂模型,以針對特定文字、影像分類、預測需求或生成 AI 量身打造。

您可以使用 Amazon Autopilot 或 支援的任何語言呼叫 CreateAutoMLJobV2API,以程式設計方式建立 SageMaker Autopilot 時間序列預測實驗 AWS CLI。

如需有關此API動作如何轉換為所選語言函數的資訊,請參閱 的另請參閱 一節CreateAutoMLJobV2並選擇 SDK。例如,對於 Python 使用者,請參閱 AWS SDK for Python (Boto3)中 create_auto_ml_job_v2 的完整請求語法。

Autopilot 會使用您的目標時間序列來訓練多個模型候選模型,然後為指定的目標指標選擇最佳預測模型。當您的候選模型經過訓練後,您可以在 BestCandidateDescribeAutoMLJobV2 反應中找到最佳候選指標。

下列各節定義時間序列預測CreateAutoMLJobV2API中使用的 的強制和選用輸入請求參數。

注意

如需實作時間序列預測範例,請參閱 Amazon SageMaker Autopilot 的筆記本時間系列預測。在此筆記本中,您可以使用 Amazon SageMaker Autopilot 來訓練時間序列模型,並使用訓練過的模型產生預測。筆記本提供如何在 Amazon S3 擷取現成的表格歷史資料集的指示。

必要條件

使用 Autopilot 在 中建立時間序列預測實驗之前 SageMaker,請務必:

  • 準備您的時間序列資料集。資料集準備包括從各種來源收集相關資料,對其進行清理清理和過濾以消除雜訊與不一致性,並將其組織成結構化格式。請參閱 時間序列資料集格式與遺失值填入方法 以深入了解 Autopilot 的時間序列格式要求。或者,您可以使用您選擇的國家/地區的公共假日行事曆來補充資料集,以擷取相關的模式。如需假日行事曆的詳細資訊,請參閱國定假日行事曆

    注意

    建議您為要預測的每個未來資料點提供至少 3-5 個歷史資料點。例如,若要根據每日資料預測 7 天前 (1 週時間範圍),請訓練模型至少 21-35 天的歷史資料。請務必提供足夠的資料,以擷取季節性和週期性模式。

  • 將您的時間序列資料放入 Amazon S3 儲存貯體。

  • 授予 Amazon S3 儲存貯體的完整存取權,其中包含用於執行實驗之 SageMaker 執行角色的輸入資料。完成後,您可以在 Autopilot API請求中使用此執行角色ARN的 。

    • 如需有關擷取 SageMaker 執行角色的資訊,請參閱 取得您的執行角色

    • 如需授予 SageMaker 執行角色許可以存取 Amazon S3 中一或多個特定儲存貯體的資訊,請參閱將其他 Amazon S3 許可新增至 中的 SageMaker 執行角色建立執行角色

必要參數

當呼叫 CreateAutoMLJobV2 建立用於時間序列預測的 Autopilot 實驗時,您必須提供下列值:

  • 用於指定任務的名稱的 AutoMLJobName。名稱應為 string 類型,最小長度為 1 個位元,最大長度為 32 位元。

  • AutoMLJobInputDataConfig 中至少有一個 AutoMLJobChannel,其中您指定包含您的資料的 Amazon S3 儲存貯體的名稱。或者,您可以指定內容 (CSV 或 Parquet 檔案) 和壓縮 (GZip) 類型。

  • 類型為 TimeSeriesForecastingJobConfigAutoMLProblemTypeConfig,用於設定時間序列預測作業的設置。尤其是,您必須指定:

    • 預測的頻率,指的是預測所需的精細程度 (每小時、每日、每月等等)。

      有效間隔為整數,後跟 Y (年)、M (月)、W (週)、D (天)、H (小時) 與 min (分鐘)。例如,1D 表示每天,15min 表示每隔 15 分鐘。頻率的值不得與下一個較大頻率重疊使用。例如,您必須使用的頻率 1H 而不是 60min

      每個頻率的有效值如下:

      • 分鐘–1-59

      • 小時–1-23

      • 天–1-6

      • 週–1-4

      • 月–1-11

      • 年–1

    • 預測中預測的總時程,指的是模型預測的時間步長數。預測期間也稱為預測長度。預測總時程上限是資料集中 500 個時間步長或 1/4 的較小者。

    • 您可以在TimeSeriesConfig其中定義資料集結構描述,以透過指定下列項目將資料欄標頭映射至預測:

      • TargetAttributeName:包含要預測之目標欄位歷史資料的欄位。

      • TimestampAttributeName:包含記錄指定項目的目標值的時間點的欄位。

      • ItemIdentifierAttributeName:包含您要預測其目標值之項目識別碼的資料欄位。

    下列是這些請求參數的範例。在此範例中,您要設定 20 天內特定項目的預期需求數量或需求程度的每日預測。

    "AutoMLProblemTypeConfig": { "ForecastFrequency": "D", "ForecastHorizon": 20, "TimeSeriesConfig": { "TargetAttributeName": "demand", "TimestampAttributeName": "timestamp", "ItemIdentifierAttributeName": "item_id" },
  • OutputDataConfig 指定用於存放 AutoML 任務成品的 Amazon S3 輸出路徑。

  • RoleArn 指定用於存取資料之角色ARN的 。您可以使用您授予資料存取權ARN的執行角色的 。

所有其他參數都是選用參數。例如,您可以設定特定的預測分位數、為資料集中缺少的值選擇填入方法,或定義如何彙總不符合預測頻率的資料。若要了解如何設定這些其他參數,請參閱選用的參數

選用的參數

下列各節提供了一些可傳遞給時間序列預測 AutoML 任務的可選參數的詳細資訊。

根據預設,Autopilot 任務會在資料集上訓練預先定義的演算法清單。不過,您可以提供演算法的預設選擇子集。

若要進行時間序列預測,您必須選擇 TimeSeriesForecastingJobConfig的類型AutoMLProblemTypeConfig

然後,您可以在 AlgorithmsConfig 的屬性AutoMLAlgorithms中指定選取的 陣列CandidateGenerationConfig

以下是在其AutoMLAlgorithms欄位中列出正好三個演算法 AlgorithmsConfig ("cnn-qr"、"prophet"、"arima") 的屬性範例。

{ "AutoMLProblemTypeConfig": { "TimeSeriesForecastingJobConfig": { "CandidateGenerationConfig": { "AlgorithmsConfig":[ {"AutoMLAlgorithms":["cnn-qr", "prophet", "arima"]} ] }, }, }, }

如需時間序列預測的可用演算法清單,請參閱 AutoMLAlgorithms。如需每個演算法的詳細資訊,請參閱演算法支援時間序列預測

Autopilot 使用您的目標時間序列訓練 6 個候選模型,然後使用堆疊整合方法組合這些模型,為指定的目標指標建立最佳預測模型。每個 Autopilot 預測模型都會透過在 P1 和 P99 之間的分位數產生預測來產生機率預測。這些分位數用於解釋預測的不確定性。依預設,會針對 0.1 (p10)、0.5 (p50) 與 0.9 (p90) 產生預測。您可以選擇指定自己的分位數。

在 Autopilot 中,您可以指定最多五個預測四分位數,從 0.01 (p1) 到 0.99 ForecastQuantilesp99),以 0.01 或更高的增量TimeSeriesForecastingJobConfig表示。

在下列範例中,您將針對特定項目在 20 天內的預期數量或需求程度設定每日第 10、25、50、75 及第 90 個百分位數預測。

"AutoMLProblemTypeConfig": { "ForecastFrequency": "D", "ForecastHorizon": 20, "ForecastQuantiles": ["p10", "p25", "p50", "p75", "p90"], "TimeSeriesConfig": { "TargetAttributeName": "demand", "TimestampAttributeName": "timestamp", "ItemIdentifierAttributeName": "item_id" },

若要建立預測模型 (也稱為實驗中的最佳模型候選模型),您必須指定預測頻率。預測頻率決定預測中預測的頻率。例如,每月銷售預測。Autopilot 的最佳模型可以針對高於資料記錄頻率的資料頻率產生預測。

在訓練期間,Autopilot 會彙總任何與您指定的預測頻率不符的任何資料。例如,您可能有一些每日資料,但指定每週預測頻率。Autopilot 會根據每日資料所屬的週來調整每日資料。然後,Autopilot 將其合併為每週的單一記錄。

在彙總期間,預設的轉換方法是將資料加總。您可以在Transformations屬性 中建立 AutoML 任務時設定彙總TimeSeriesForecastingJobConfig。支援的彙總方法為 sum (預設)、avgfirstminmax。僅目標資料欄支援彙總。

在下列範例中,您將彙總設定為計算個別促銷預測的平均值,以提供最終的彙總預測值。

"Transformations": { "Aggregation": { "promo": "avg" } }

Autopilot 提供了多種填入方法來處理時間序欄資料集的目標與其他數字欄位缺少的值。如需支援的填入方法清單及其可用填入邏輯的資訊,請參閱處理遺失值

您可以在建立 AutoML 任務TimeSeriesForecastingJobConfig時,在 Transformations 屬性 中設定填充策略。

設定填入方式,需要提供機碼值組:

  • 機碼是您要為其指定填入方法之欄位的名稱。

  • 與機碼相關聯的值是定義該欄位填入策略的物件。

您可以為單一欄位指定多種填入方法。

若要為填入方法設定特定值,您應該將填入參數設定為所需的填入方法值 (例如 "backfill" : "value"),並在後綴為 “_value” 的其他參數定義實際填入值。例如,若要設定 backfill 為的值 2,您必須包含兩個參數:"backfill": "value""backfill_value":"2"

在下欄範例中,您為不完整資料欄 “價格” 指定填入策略,如下所示:項目第一個資料點與最後一個資料點之間的所有遺失值都會設定為 0,之後所有遺失值均使用該值填入 2 直到資料集的結束日期。

"Transformations": { "Filling": { "price": { "middlefill" : "zero", "backfill" : "value", "backfill_value": "2" } } }

Autopilot 會產生準確度指標來評估候選模型,並協助您選擇要使用哪個模型來產生預測。當您執行時間序列預測實驗時,您可以選擇 AutoML 讓 Autopilot 為您最佳化預測器,也可以手動選擇預測器的演算法。

根據預設,Autopilot 使用 Average Weighted Quantile Loss (平均加權分位數損失)。不過,您可以在 A Objective 的 MetricName 屬性中建立 AutoML 任務時設定utoMLJob目標指標。

如需可用演算法的清單,請參閱演算法支援時間序列預測

在 Autopilot,您可以將特徵設計的國家假日資訊資料集合到您的時間序列中。Autopilot 為 250 多個國家/地區的假日行事曆提供本地支援。選擇國家/地區後,Autopilot 會在訓練期間,將該國家/地區的假日行事曆套用至您的資料集的每個項目。這可讓模型識別與特定假日相關聯的模式。

您可以在建立 AutoML 任務時,透過將HolidayConfigAttributes物件傳遞至 HolidayConfig 的屬性來啟用假日特徵化TimeSeriesForecastingJobConfigHolidayConfigAttributes 物件包含兩個字母 CountryCode 屬性,該屬性決定用於擴充時間序列資料集的公共國定假日行事曆的國家/地區。

如需支援的行事曆清單及其對應的國家/地區代碼,請參閱國家/地區代碼

Autopilot 功能可讓您將預測模型自動部署到端點。若要針對 AutoML 任務的最佳模型候選項啟用自動部署,請在 AutoML 任務請求中包含 ModelDeployConfig。這允許將最佳模型部署到 SageMaker 端點。以下是可用的自訂組態。

您可以設定 AutoML 任務 V2,以便在需要額外運算資源來處理大型資料集時,自動在 Amazon EMR Serverless 上啟動遠端任務。必要時,AutoML 任務可無縫轉換至無EMR伺服器,處理會超過最初佈建資源的資料集,而無需您進行任何手動介入。EMR 無伺服器適用於表格式和時間序列問題類型。我們建議為大於 30 GB 的時間序列資料集設定此選項。

若要允許 AutoML 任務 V2 自動轉換為適用於大型資料集的無EMR伺服器,您需要提供EmrServerlessComputeConfig物件,其中包含ExecutionRoleARN欄位,以傳送至 AutoML 任務 V2 輸入請求AutoMLComputeConfig的 。

ExecutionRoleARN 是 IAM角色ARN的 ,授予 AutoML 任務 V2 執行無EMR伺服器任務所需的許可。

此角色應具有下列信任關係:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

並授予許可給:

  • 建立、列出和更新 EMR Serverless 應用程式。

  • 在 EMR Serverless 應用程式中啟動、列出、取得或取消任務執行。

  • 標記 EMR Serverless 資源。

  • 將IAM角色傳遞至 EMR Serverless 服務以進行執行。

    透過授予iam:PassRole許可,AutoML 任務 V2 可以暫時擔任該EMRServerlessRuntimeRole-*角色,並將其傳遞給無EMR伺服器服務。這些是 EMR Serverless 任務執行環境用來存取執行期間所需的其他 AWS 服務和資源IAM的角色,例如 Amazon S3 用於資料存取、 CloudWatch 記錄、存取 AWS Glue 資料目錄,或根據您的工作負載需求存取其他服務。

    如需此角色許可的詳細資訊,請參閱 Amazon EMR Serverless 的任務執行期角色。

提供JSON文件中定義的IAM政策會授予這些許可:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "EMRServerlessCreateApplicationOperation", "Effect": "Allow", "Action": "emr-serverless:CreateApplication", "Resource": "arn:aws:emr-serverless:*:*:/*", "Condition": { "StringEquals": { "aws:RequestTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessListApplicationOperation", "Effect": "Allow", "Action": "emr-serverless:ListApplications", "Resource": "arn:aws:emr-serverless:*:*:/*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessApplicationOperations", "Effect": "Allow", "Action": [ "emr-serverless:UpdateApplication", "emr-serverless:GetApplication" ], "Resource": "arn:aws:emr-serverless:*:*:/applications/*", "Condition": { "StringEquals": { "aws:ResourceTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessStartJobRunOperation", "Effect": "Allow", "Action": "emr-serverless:StartJobRun", "Resource": "arn:aws:emr-serverless:*:*:/applications/*", "Condition": { "StringEquals": { "aws:RequestTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessListJobRunOperation", "Effect": "Allow", "Action": "emr-serverless:ListJobRuns", "Resource": "arn:aws:emr-serverless:*:*:/applications/*", "Condition": { "StringEquals": { "aws:ResourceTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessJobRunOperations", "Effect": "Allow", "Action": [ "emr-serverless:GetJobRun", "emr-serverless:CancelJobRun" ], "Resource": "arn:aws:emr-serverless:*:*:/applications/*/jobruns/*", "Condition": { "StringEquals": { "aws:ResourceTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessTagResourceOperation", "Effect": "Allow", "Action": "emr-serverless:TagResource", "Resource": "arn:aws:emr-serverless:*:*:/*", "Condition": { "StringEquals": { "aws:RequestTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "IAMPassOperationForEMRServerless", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/EMRServerlessRuntimeRole-*", "Condition": { "StringEquals": { "iam:PassedToService": "emr-serverless.amazonaws.com", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } } ] }