由Davide Gallitelli和Nick McCarthy撰写于2024年10月8日,发布于 Amazon SageMaker、 Amazon SageMaker Autopilot、 人工智能、 技术如何做 永久链接 评论 分享
时间序列预测是各个行业做出明智决策的关键组成部分,通过预测时间依赖数据的未来值来达到这一目的。时间序列是以规则的时间间隔记录的数据点序列,例如每日销售收入、每小时温度读数或每周股市价格。这些预测对于anticipating趋势和未来需求至关重要,特别是在产品需求、金融市场、能源消耗等领域。
然而,由于季节性、潜在趋势和外部影响等因素,创建准确可靠的预测面临着重大挑战。此外,传统的预测模型通常需要广泛的领域知识和手动调优,这可能既耗时又复杂。
在本文中,我们探索了一种综合方法,通过 Amazon SageMaker AutoMLV2软件开发工具包 (SDK) 进行时间序列预测。SageMaker AutoMLV2是SageMaker Autopilot套件的一部分,能够自动化从数据准备到模型部署的端到端机器学习工作流程。在本文中,我们将谈论AutoML,以指代SageMaker Autopilot API,以及 Amazon SageMaker Canvas 的AutoML功能。我们将详细讨论数据准备过程,解释时间序列预测模型的配置,详细描述推理过程,并重点介绍项目的关键方面。这种方法提供了利用机器学习预测时间序列未来数据点的有效策略,无需深厚的模型开发专业知识。本文的代码可以在 GitHub存储库 找到。
以下图表展示了本文相关的基本AutoMLV2 API。该图显示了使用AutoMLV2 API构建和部署模型的工作流程。在训练阶段,CSV数据会上传至Amazon S3,然后创建AutoML作业,创建模型,以及检查作业完成情况。部署阶段允许您选择通过端点进行实时推理,或者使用定期转换作业进行批量推理,并将结果存储到S3。
任何机器学习项目的基础是数据准备。在本项目中,我们使用了一个合成数据集,包含来自不同位置的产品销售时间序列数据,重点关注产品代码、位置代码、时间戳、单位销售和促销信息等属性。该数据集可以在Amazon拥有的公共 Amazon简单存储服务 (Amazon S3) 数据集中找到。
在为SageMaker AutoML时间序列预测模型准备CSV文件时,必须确保其至少包含三列关键信息如 SageMaker AutoML V2 文档 所述:
数据集中的其他所有列都是可选的,用于包含额外的时间序列相关信息或每个项目的元数据。因此,您的CSV文件应根据上述属性项目标识符、目标和时间戳以及支持您的用例所需的其他列进行命名。例如,如果您的数据集涉及预测产品需求,您的CSV可能如下所示:
该项目中划分训练集和测试集的过程采用了系统方法,并考虑了时间因素,以确保时间序列数据的完整性。以下是该过程的详细概述:
第一步是将输入数据集的 timestamp 列转换为日期时间格式,使用 pdtodatetime。此转换对于后续步骤中按时间排序数据至关重要,并确保对时间戳列的操作一致且准确。
排序数据集对于时间序列预测至关重要,因为它确保正确的时间顺序处理数据。inputdata DataFrame根据三列进行排序:productcode、locationcode 和 timestamp。这种多级排序确保数据首先按产品和位置组织,然后按每个产品位置组合的时间顺序。这样的组织结构对根据时间划分数据为训练和测试集合至关重要。
划分机制旨在分别处理每个 productcode 和 locationcode 的组合,尊重每个产品位置对的独特时间模式。对于每个组合:
该过程在以下图示中可视化显示,Y轴的数值为任意值,X轴为二月份的日期。
测试数据集用于评估训练模型的性能,并计算各种损失指标,例如 平均绝对误差 (MAE) 和 均方根误差 (RMSE)。这些指标量化模型在测试集中的实际值预测的准确度,提供模型质量及其做出准确预测能力的明确指示。评估过程详细说明在“推理:批量、实时和异步”一节中,我们讨论了基于已计算的指标对模型评估和条件模型注册的全面方法。
在将每个产品位置组的数据分类为训练和测试集后,使用 pdconcat 将子集汇总为综合的训练和测试DataFrame。这一步汇总将存储在 traindfs 和 testdfs 列表中的个别DataFrame组合成两个统一的DataFrame:
最后,将DataFrames保存到CSV文件中traincsv 为训练数据,testcsv 为测试数据,使它们可以在模型训练和评估过程中访问。这一步保存不仅有助于明确数据的划分用于建模目的,还便于复现和共享准备好的数据集。
这种数据准备策略严格尊重时间序列数据的时间特性,并确保训练集和测试集能够与现实世界的预测场景相匹配。通过基于最后已知时间戳划分数据,并仔细排除最新的时间段,使该方法模拟基于过去观察预测未来值的挑战,从而为预测模型性能的强健评估奠定基础。
SageMaker AutoMLV2自动化了模型开发中所需的繁重工作,减少了训练、调优和部署机器学习模型所需的资源。它提供了一种简单的方法来创建高质量的模型,针对您特定的问题类型无论是分类、回归还是预测等。在这一部分,我们将详细介绍如何使用AutoMLV2训练时间序列预测模型的步骤。
首先需要定义问题配置。此配置指导AutoMLV2理解您的问题性质及其应寻找的解决方案类型,这可能涉及分类、回归、时间序列分类、计算机视觉、自然语言处理或大型语言模型的微调。这种灵活性至关重要,因为它使AutoMLV2能够根据手头任务的特定要求和复杂性调整其方法。对于时间序列预测,配置包括如预测频率、需要预测的时间范围以及任何特定的分位数或概率预测等细节。为时间序列预测配置AutoMLV2作业时需指定最有效利用历史销售数据以预测未来销售的参数。
AutoMLTimeSeriesForecastingConfig 是SageMaker AutoMLV2 SDK中专为设置时间序列预测任务设计的配置对象。每个传递给此配置对象的参数都为AutoML作业量身定做,以适应您的时间序列数据及预测目标。
pythontimeseriesconfig = AutoMLTimeSeriesForecastingConfig( forecastfrequency=W forecasthorizon=4 itemidentifierattributename=productcode targetattributename=unitsales timestampattributename=timestamp )
以下是您时间序列配置中使用的每个配置参数的详细说明:
上述配置指示SageMaker AutoML训练一个能够为每个产品和位置进行每周销售预测的模型,考虑分位数预测的不确定性,处理缺失数据,并识别每个产品位置对作为一个独特的序列。这个详细的设置旨在优化预测模型在特定业务上下文及数据特征下的相关性和准确性。
接下来,通过指定问题配置、具有权限的AWS角色、SageMaker会话、用于识别的基础作业名称和存储模型工件的输出路径来初始化AutoMLV2作业。
pythonautomlsmjob = AutoMLV2( problemconfig=timeseriesconfig role=role sagemakersession=sagemakersession basejobname=timeseriesforecastingjob outputpath=fs3//{bucket}/{prefix}/output)
要开始训练过程,在AutoMLV2作业对象上调用fit方法。此方法需要指定输入数据在Amazon S3中的位置以及是否要求SageMaker在作业完成之前等待。AutoMLV2将在此步骤中自动预处理您的数据,选择算法,训练多个模型并进行调优,以找到最佳解决方案。
pythonautomlsmjobfit( inputs=[AutoMLDataChannel(s3datatype=S3Prefix s3uri=trainuri channeltype=training)] wait=True logs=True)
请注意,模型拟合可能需要几个小时,具体取决于数据集的大小和计算预算。更大的计算预算允许使用更强大的实例类型,这可以加速训练过程。在这种情况下,只要您不是在提供的SageMaker笔记本中运行此代码该笔记本正确处理代码单元的处理顺序,就需要部署一些自定义代码来监控训练状态,然后再检索和部署最佳模型。
将机器学习模型部署到生产环境是机器学习工作流程中的关键步骤,使您的应用程序能够从新数据进行预测。SageMaker AutoMLV2不仅帮助构建和调优您的模型,还提供无缝的部署体验。在这一部分,我们将指导您如何将AutoMLV2作业中的最佳模型作为SageMaker中的完全托管端点进行部署。
在AutoMLV2作业完成后,部署过程的第一步是识别最佳性能模型,通常称为最佳候选者。这可以通过使用AutoML作业对象的 bestcandidate 方法来实现。您可以立即在拟合AutoML作业后使用此方法,或者如果操作的是之前完成的AutoML作业,则显式指定作业名称。
python
bestcandidate = automlsmjobbestcandidate()
bestcandidate = automlsmjobbestcandidate(jobname=yourautomljobname)
bestcandidatename = bestcandidate[CandidateName]
在部署之前,从最佳候选者创建SageMaker模型。该模型充当预测所需的工件和元数据的容器。使用AutoML作业对象的 createmodel 方法完成这一步骤。
pythonendpointname = fep{bestcandidatename}automlts
automlsmmodel = automlsmjobcreatemodel(name=bestcandidatename candidate=bestcandidate)
对于训练模型的部署,我们探索了批量、实时和异步推理的方法,以满足不同的用例。
以下图是帮助您决定使用哪种类型的端点的决策树。该图概述了在选择批量、异步或实时推理端点之间的决策过程。通过从对即时响应的需求开始,指导您考虑有效负载的大小和模型的计算复杂性。根据这些因素,您可以选择快速但计算要求较低的选项,或者为大型数据集选择较慢的批处理过程。
准备好的推理管道展示了使用SageMaker进行时间序列预测的全面方法,包括从数据预处理到模型推理,再到后续推理评估和条件模型注册的过程结构化。这一管道确保了