今天,我们推出了 Amazon SageMaker 的最新内置算法 Amazon SageMaker DeepAR。DeepAR 是一种适用于时间序列预测的监督学习算法,该算法使用递归神经网络 (RNN) 生成点预测和概率预测。我们很高兴能为开发人员提供这种可扩展的高精度预测算法,协助 Amazon 制定任务关键型决策。正如其他 Amazon SageMaker 内置算法一样,DeepAR 算法同样无需建立和维护基础设施进行训练和推理即可使用。
预测无处不在
预测是跨众多行业应用机器学习的切入点。无论是通过更好的产品需求预测优化供应链,通过预测 Web 服务器流量更有效地分配计算资源,还是通过为医院配置人员以满足患者需要进而挽救生命,几乎进行精确预测投资的所有领域都会很快得到回报。
在 Amazon,我们利用预测协助制定各个应用领域的业务决策。其中一些应用领域包括预测我们订单履行中心的产品和劳动力需求 (尤其是在“会员日”、“黑色星期五”和“网络星期一”这类重要日期),或者确保我们可以灵活扩展_所有_ AWS 客户的 AWS 计算和存储容量。Amazon 的科学家们开发了诸如 DeepAR 这样的算法,以高度准确地解决 Amazon 同等规模的这类实际商业应用的问题。
DeepAR 算法的亮点
与自回归移动平均模型 (ARIMA) 或指数平滑法 (ES) (许多开源和商用软件包中都采用这两种技术进行预测) 等传统预测技术相比,DeepAR 预测算法可以提供更高的预测精度。而且,DeepAR 算法还支持其他功能和场景,特别适合实际应用。
冷启动预测
当我们想要为一个历史数据很少或无任何历史数据的时间序列生成预测时,会出现冷启动情况。这种情况在实践中常有发生,比如在引入新产品或推出新的 AWS 区域服务时。ARIMA 或 ES 等传统方法完全依赖于单个时间序列的历史数据,因此在冷启动情况下通常不太准确。我们以服装类商品 (例如运动鞋) 预测为例。 基于神经网络的算法 (例如 DeepAR) 可以根据其他类型运动鞋首次发布时的销售模式,学习新款运动鞋销售的典型行为。 通过学习训练数据中多个相关时间序列的关系,DeepAR 可以提供比现有算法更精确的预测。
概率预测
DeepAR 还可生成点预测 (例如,一周内售出的运动鞋数量为 X) 和概率预测 (例如,一周内售出的运动鞋数量介于 X 和 Y 之间,概率为 Z%)。后者尤其适合产能规划等商业应用,在此类应用中,具体的预测分位数比可能性最大的结果更为重要。例如,根据预测自动为运动鞋下订单的系统可能需要生成订单数量,以使仓库库存在 X% 的概率下满足客户需求。借助概率预测,根据预测的 X% 分位数得出订单数量,可以轻松做到这一点。 客户可以通过指定相应的似然函数超参数和推理时所需的分位数来利用此功能。
以下几幅图展示了这两种预测场景,它们使用 DeepAR 为 Amazon 售出产品生成的示例需求预测。第一幅图显示的是冷启动场景。由于模型会共享所有商品的信息,因此即使历史数据有限,预测也是合理的。第二幅和第三幅图显示,DeepAR 可以通过使用此场景的相应似然函数 (负二项式) 为产品生成不同数量级的概率预测。
DeepAR 算法还具备其他一些功能:
支持不同类型的时间序列:实数、计数和间隔值
训练后自动评估回测的模型精度
适用于使用 GPU 或 CPU 硬件快速、灵活地训练基于长短期机记忆 (LSTM) 的 RNN 模型
可扩展为包含高达 100000 多个时间序列的数据集
支持 JSON 行或 Parquet 格式的训练数据
开始使用
DeepAR 根据观察到的历史数据训练模型,然后使用模型进行预测。正如其他 Amazon SageMaker 算法一样,此算法也依靠 Amazon Simple Storage Service (Amazon S3) 存储训练数据和生成的模型。在训练期间,Amazon SageMaker 会代表客户自动启动和停止 Amazon Elastic Compute Cloud (Amazon EC2) 实例。完成模型训练后,可将模型部署至将会在收到请求时计算预测的终端节点。有关 Amazon SageMaker 工作流程的综合高级概述,请参阅 SageMaker 文档。下面,我们将专门简要介绍如何使用 DeepAR 执行这些步骤。
数据格式化
第一步,收集并格式化您要预测的流程的历史数据。DeepAR 支持两种类型的数据文件:JSON 行 (每行 1 个 JSON 对象) 和 Parquet。DeepAR 文档中有对这两种数据文件的详细说明。
例如,包含待训练数据的 JSON 文件可能如下所示:
Json
每个对象均可代表特定类型鞋子的日销售量 (以千计),其中, "cat": 1
表示运动鞋, "cat": 2
表示雪地靴。请注意,每个时间序列都有其自己的时间起点;数据不需要在这个角度上保持一致。
在将数据正确格式化后,您需要将其推送至 S3 存储桶,以便 DeepAR 可以在训练期间访问这些数据。格式化数据的方式有很多种,其中包括借助适用于 Python (Boto3) 的低级 AWS SDK 或 AWS 命令行界面 (CLI)。
训练任务设置
要启动训练任务,客户可以使用适用于 Python (Boto3) 的低级 AWS SDK、高级 Amazon SageMaker Python SDK 或 AWS 管理控制台。在本例中,我们将演示如何通过 AWS 管理控制台设置训练任务。
要开始设置 DeepAR 训练任务,请在 Amazon SageMaker 控制台的 Job settings (任务设置) 页面中,选择 Algorithm (算法) 部分的“DeepAR forecasting” (DeepAR 预测)。客户还可在此处自定义任务的其他属性,比如训练期间要使用的 EC2 实例的数量和类型。
选择“DeepAR forecasting” (DeepAR 预测) 后,系统会显示一个列有可自定义超参数的表单。例如,您可使用
time_freq 参数自定义时间序列的时间粒度,使用
context_length 参数设置模型进行预测时应当使用的最少过往数据量,以及使用
prediction_length 参数设置输出预测长度。DeepAR 使用 LSTM 递归神经网络 (RNN),因此,其他用于网络拓扑和训练程序的可自定义超参数同样可用于高级优化。有关可用超参数及其对应范围的完整描述,请参阅 DeepAR 文档。
指定超参数后,您需要指定 Amazon S3 上存储训练数据的位置。您可指定以下两个通道:“train”通道 (必填项) 包含训练数据,而“test”通道 (选填项) 则可用于验证模型性能。请注意,如果未指定“test”通道,DeepAR 将不会依据保留的数据集验证模型的性能。
使用“test”通道时,Amazon SageMaker 会在训练任务结束时自动记录错误指标,供您日后通过 Amazon CloudWatch 进行检查。
最后一步是指定在 Amazon S3 中写入已训练模型的位置。填写完这些规格后,选择“Create training job” (创建培训任务) 以启动任务。
在终端节点上部署模型进行推理
训练任务完成后,Amazon SageMaker 控制台的 Models (模型) 页面上会立即显示一个模型。 通过选择此模型并选择创建终端节点,您将能够自定义终端节点名称和配置,例如此模型应使用的 EC2 实例的类型和数量。
部署完终端节点后,您可通过以 JSON 对象形式提供时间序列并获取每个时间序列的预测结果,向终端节点发出请求。使用 Amazon SageMaker Python SDK 可以完成此操作。
本例显示单一时间序列的请求。此请求要求模型返回采样自训练模型的 50 个预测的平均值,返回结果如下:
Json
DeepAR 文档完整地描述了可以包含在请求中的语法和所有选项。
其他文档
有关更多信息,请参阅 DeepAR 文档,或者如需使用此新算法通过 SageMaker Notebook 实例亲自逐步操作,请参阅 DeepAR 示例笔记本。有关 DeepAR 数学原理的更多详细信息,请参阅多位 Amazon Machine Learning 科学家联合撰写的学术论文和 RNN 预测方法的相关著作。
补充阅读
了解如何在 Amazon EMR 中构建由 Spark 支持的 Amazon SageMaker Notebook。
作者介绍:
Tim Januschowski、Valentin Flunkert、David Salinas、Lorenzo Stella、Jan Gasthaus 和 Paul Vazquez 供职于德国柏林 Core Machine Learning 团队。他们负责处理 Amazon 预测领域方方面面的问题。David Arpin 是 AWS AI 平台遴选部门负责人,拥有数据科学团队管理和产品管理背景。
本文转载自 AWS 技术博客。
原文链接:
评论