使用创建用于时间序列预测的 AutoML 作业 API - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用创建用于时间序列预测的 AutoML 作业 API

在机器学习中,预测是指根据历史数据和模式预测未来结果或趋势的过程。通过分析过去的时间序列数据并识别潜在模式,机器学习算法可以进行预测并提供对未来行为的有价值见解。预测的目标是开发模型,使其能够准确地捕捉一段时间内输入变量与目标变量之间关系。这涉及到研究各种因素,例如数据中的趋势、季节性和其他相关模式。然后,使用收集的信息来训练机器学习模型。模型在经过训练后,应该能够通过获取新的输入数据并应用学到的模式和关系来生成预测。它可以为各种使用场景提供预测,例如销售预测、股票市场趋势、天气预报、需求预测等等。

以下说明说明如何使用 SageMaker API “参考” 创建 Amazon A SageMaker utopilot 作业作为时间序列预测问题类型的试点实验。

注意

诸如文本和图像分类、时间序列预测以及大型语言模型的微调等任务仅通过 AutoML 版本 2 提供。REST API如果你选择的语言是 Python,你可以SDK直接引AWS SDK for Python (Boto3)用 Amaz SageMaker on Python 的 A uto MLV2 对象

喜欢用户界面便利性的用户可以使用 Amazon SageMaker Canv as 访问预训练模型和生成式 AI 基础模型,或者创建针对特定文本、图像分类、预测需求或生成式 AI 量身定制的自定义模型。

您可以通过使用 Amazon Autopilot 支持的任何语言调用,以编程方式创建 A SageMaker utopilot 时间序列预测实验,或者。CreateAutoMLJobV2API AWS CLI

有关此API操作如何转换为所选语言的函数的信息,请参阅的 “另请参” 部分CreateAutoMLJobV2并选择。SDK例如,对于 Python 用户,请参阅 AWS SDK for Python (Boto3)中 create_auto_ml_job_v2 的完整请求语法。

Autopilot 使用您的目标时间序列数据训练多个候选模型,然后为给定的目标指标选择最佳预测模型。当您的候选模型接受过训练后,您可以在对 DescribeAutoMLJobV2 的回复中的 BestCandidate 位置找到最佳候选指标。

以下各节定义了时间序列预测中CreateAutoMLJobV2API使用的必填和可选输入请求参数。

注意

有关实用的时间序列预测示例,请参阅笔记本使用 Amazon A SageMaker utopilot 进行时间序列预测。在本笔记本中,您可以使用 Amazon A SageMaker utopilot 来训练时间序列模型,并使用经过训练的模型进行预测。笔记本提供了在 Amazon S3 上检索现成的表格历史数据集的说明。

先决条件

在使用 Autopilot 在中创建时间序列预测实验之前 SageMaker,请确保:

  • 准备您的时间序列数据集。数据集的准备涉及到从各种来源收集相关数据,清理和筛选数据以消除噪音和不一致的内容,然后将其整理为结构化的格式。要详细了解 Autopilot 中的时间序列格式要求,请参阅时间序列数据集格式和缺失值填充方法。或者,您可以使用所选国家/地区的公共假日日历来补充数据集,以便捕获相关的模式。有关假日日历的更多信息,请参阅国家法定假日日历

    注意

    我们建议您为每个要预测的 1 个 future 数据点提供至少 3-5 个历史数据点。例如,要根据每日数据预测提前 7 天(展望 1 周),请使用至少 21-35 天的历史数据训练模型。确保提供足够的数据来捕捉季节性和反复出现的模式。

  • 将您的时间序列数据放入 Amazon S3 存储桶中。

  • 授予对包含您用于运行实验的 SageMaker 执行角色的输入数据的 Amazon S3 存储桶的完全访问权限。完成此操作后,你就ARN可以在自动驾驶API请求中使用这个执行角色了。

    • 有关检索 SageMaker 执行角色的信息,请参阅获取你的执行角色

    • 有关向您的 SageMaker 执行角色授予访问 Amazon S3 中一个或多个特定存储桶的权限的信息,请参阅中的向 SageMaker 执行角色添加其他 Amazon S3 权限创建执行角色

必需参数

在调用 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 输出路径。

  • A RoleArn 用于指定ARN用于访问您的数据的角色。您可以使用已ARN授予数据访问权限的执行角色。

所有其他参数都是可选的。例如,您可以设置特定的预测分位数,为数据集中的缺失值选择填充方法,或者定义如何聚合与预测频率不一致的数据。要了解如何设置这些附加参数,请参阅可选参数

可选参数

以下各节提供了一些可以传递给时间序列预测 AutoML 作业的可选参数的详细信息。

默认情况下,您的 Autopilot 作业会根据您的数据集训练预定义的算法列表。但是,您可以提供默认算法选择的子集。

对于时间序列预测,必须选择TimeSeriesForecastingJobConfig作为类型。AutoMLProblemTypeConfig

然后,可以在的AlgorithmsConfig属性AutoMLAlgorithms中指定选定的数组CandidateGenerationConfig

以下是一个属性示例,该AlgorithmsConfig属性恰好列出了其字段中的三种算法(“cnn-qr”、“prophet”、“arima”)。AutoMLAlgorithms

{ "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 (p99) 之间指定五个预测分位数,增量为 0.01 或更高。ForecastQuantiles 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"

在以下示例中,您可以为不完整的数据列“price”指定填充策略,如下所示:项目第一个数据点和最后一个数据点之间的所有缺失值都设置为 0,之后所有缺失值都将填充值 2,直至数据集的结束日期值。

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

Autopilot 会生成准确性指标来评估候选模型,帮助您选择使用哪个模型来生成预测。运行时间序列预测实验时,您可以选择 AutoML,让 Autopilot 为您优化预测变量,也可以手动为预测变量选择算法。

默认情况下,Autopilot 使用平均加权分位数损失。但是,当你在 A utoMLJob Objective 的MetricName属性中创建 AutoML 作业时,你可以配置目标指标。

有关可用算法的列表,请参阅时间序列预测支持的算法

在 Autopilot 中,您可以将经过特征工程处理的国家法定假日信息数据集整合到您的时间序列中。Autopilot 原生提供了对 250 多个国家/地区的假日日历的支持。选择国家/地区后,Autopilot 会在训练期间,将该国家/地区的假日日历应用于数据集中的每个项目。这使模型能够识别与特定假日关联的模式。

在创建 AutoML 作业时,您可以通过将HolidayConfigAttributes对象传递给的属性来启用假日功能。HolidayConfig TimeSeriesForecastingJobConfigHolidayConfigAttributes 对象包含两个字母的 CountryCode 属性,确定扩充时间序列数据集时,使用哪个国家/地区的国家法定公共假日日历。

有关支持的日历及其相应的国家/地区代码的列表,请参阅国家/地区代码

使用 Autopilot,您可以将预测模型自动部署到端点。要为 AutoML 作业的最佳候选模型启用自动部署,请在 AutoML 任务请求中包括 ModelDeployConfig。这允许将最佳模型部署到 SageMaker 端点。以下是可供自定义的配置。

您可以将 AutoML 作业 V2 配置为在需要额外计算资源来处理大型数据集时自动在 Amazon EMR Serverless 上启动远程作业。通过在需要时EMR无缝过渡到 Serverless,AutoML 作业可以处理原本会超过初始配置资源的数据集,而无需您进行任何手动干预。EMR无服务器适用于表格和时间序列问题类型。我们建议为大于 30 GB 的时间序列数据集设置此选项。

要允许 AutoML 作业 V2 自动过渡到大型数据集的 EMR Serverless,您需要为 AutoML 作业 V2 输入请求的EmrServerlessComputeConfigAutoMLComputeConfig对象提供一个包含ExecutionRoleARN字段的对象。

ExecutionRoleARN是授予 AutoML 作业 V2 运行EMR无服务器作业所需的权限的IAM角色。ARN

此角色应具有以下信任关系:

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

并授予以下权限:

  • 创建、列出和更新EMR无服务器应用程序。

  • 在EMR无服务器应用程序上启动、列出、获取或取消作业运行。

  • 标记EMR无服务器资源。

  • 将IAM角色传递给EMR无服务器服务以供执行。

    通过授予iam:PassRole权限,AutoML 作业 V2 可以临时担任该EMRServerlessRuntimeRole-*角色并将其传递给无服务器服务。EMREMR无服务器任务执行环境使用这些IAM角色来访问运行时所需的其他 AWS 服务和资源,例如 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}" + } + } } ] }