亚马逊 SageMaker 自动机器学习的时间序列预测

2024-10-08 17:39:14 英文原文

时间序列预测是各个行业中通过预测依赖时间的数据的未来值来做出明智决策的关键组成部分。时间序列是一系列在固定时间间隔记录的数据点,例如每日销售收入、每小时温度读数或每周股票市场价格。这些预测对于预见产品需求、金融市场、能源消耗等多个领域的趋势和未来需求至关重要。

然而,由于季节性、基本趋势和外部影响等因素的存在,创建准确可靠的预测面临重大挑战,这些因素会对数据产生显著影响。此外,传统的预测模型通常需要大量的领域知识和手动调整,这可能会耗费大量时间和增加复杂性。

在这篇博客文章中,我们探索了使用时间序列预测的全面方法。亚马逊SageMaker AutoML V2软件开发工具包(SDK)SageMaker AutoMLV2 是 SageMaker 自动驾舱套件的一部分,该套件自动化了从数据准备到模型部署的整个机器学习工作流。在本文中,我们将使用 AutoML 来表示 SageMaker 自动驾舱 API,以及亚马逊 SageMaker 画布AutoML功能。我们将介绍数据准备过程,解释时间序列预测模型的配置,详细说明推理过程,并突出项目的关键方面。这种方法提供了关于如何使用机器学习的力量有效预测时间序列中的未来数据点的战略见解,而无需深入了解模型开发的专业知识。该帖子的代码可以在以下位置找到:GitHub仓库.

以下图表描绘了基本的AutoMLV2 API,这些API都与本文相关。该图展示了使用AutoMLV2 API构建和部署模型的工作流程。在训练阶段,CSV数据上传到Amazon S3,然后创建AutoML作业、生成模型,并检查作业是否完成。部署阶段允许您选择通过端点进行实时推理或使用计划的转换作业进行批量推理并将结果存储在S3中。

Basic AutoMLV2 API's

数据准备

任何机器学习项目的基石是数据准备。对于这个项目,我们使用了一个包含不同地点产品销售时间序列数据的合成数据集,重点关注了如产品代码、位置代码、时间戳、单位销量和促销信息等属性。该数据集可以在Amazon拥有的公共存储中找到。亚马逊简单存储服务(Amazon S3)数据集

在将CSV文件准备用于SageMaker自动机器学习时间序列预测模型时,您必须确保它至少包含三个必要的列(如以下所述)。Amazon SageMaker 自动机器学习 V2 文档):

  1. 项目标识属性名称此列包含每个项目或所需预测实体的唯一标识符。每个标识符区分数据集中各个独立的数据序列。例如,如果你要为多个产品进行销售预测,则每个产品都会有一个唯一的标识符。
  2. 目标属性名称这一列代表您想要预测的数值。这些值可以是销售额、股票价格、能源使用量等。重要的是,此列中的数据必须是数字形式,因为预测模型会预测定量的结果。
  3. 时间戳属性名称:这一列表示观察记录的具体时间。时间戳对于在时间顺序背景下分析数据至关重要,这对于时间序列预测是基础性的。时间戳应该采用一致且适当的格式来反映您数据的规律性(例如每日或每小时)。

数据集中的所有其他列都是可选的,可以用于包含与时间序列相关的额外信息或关于每个项目的元数据。因此,您的CSV文件应该有根据前述属性(项目标识符、目标和时间戳)命名的列以及任何其他支持您用例所需的列。例如,如果您的数据集是关于预测产品需求的,您的CSV可能看起来像这样:

  • 产品ID(物品标识符):唯一产品标识符。
  • 销售(目标):历史销售数据需进行预测。
  • 日期(时间戳):销售数据记录的日期。

该项目中分割训练数据和测试数据的过程采用了一种系统且时间敏感的方法,以确保时间序列数据的完整性。以下是该过程的详细概述:

确保时间戳完整性

第一步是将时间戳将输入数据集中的列转换为日期时间格式使用pd.to_datetime此转换对于后续步骤中按时间顺序排序数据至关重要,并且确保对时间戳列的操作一致且准确。

排序数据

排序后的数据集对于时间序列预测至关重要,因为这确保了数据按正确的时序顺序进行处理。输入数据DataFrame是基于三个列进行排序的:产品代码, 位置代码,和 时间戳这种多层次的排序保证了数据首先按产品和地点进行组织,然后在每个产品-地点分组内按照时间顺序排列。这种组织方式对于基于时间将数据逻辑划分到训练集和测试集是必不可少的。

划分成训练集和测试集

拆分机制设计用于处理每一种组合产品代码以及位置代码分别尊重每个产品地点对独特的时效模式。对于每个组:

  • The 初始测试集通过选择最后八个时间戳(如下所示的黄色和绿色部分)来确定。这一子集代表了最近的数据点,这些数据点是用于测试模型预测能力的候选数据。
  • The 最终测试集通过从初始测试集中移除最后四个时间戳,得到一个包含紧邻最新数据之前的四个时间戳(下图中的绿色部分)的测试数据集。这种策略确保了测试集能够代表模型预期预测的近期时间段,并且排除了最近的数据以模拟真实的预测场景。
  • The 训练集包含剩余的数据点,排除最后八个时间戳(如下图所示为蓝色)。这确保模型是基于测试期之前的历史数据进行训练的,避免了任何数据泄漏,并确保模型从真正过去的数据中学习。

该过程在以下图中进行了可视化,纵轴为任意值,横轴为二月份的每一天。

Time series data split

测试数据集用于评估训练模型的性能并计算各种损失指标,如平均绝对误差(MAE)以及均方根误差(RMSE)这些指标量化了模型在测试集上预测实际值的准确性,清楚地表明了模型的质量及其进行准确预测的能力。评估过程详细记载于“推理:批量、实时和异步”部分,在该部分中我们讨论了基于计算出的指标进行全面的模型评估及有条件地注册模型的方法。

创建和保存数据集

在将每个产品位置组的数据分类为训练集和测试集之后,子集被聚合为综合的训练和测试数据框使用pd.concat此聚合步骤结合了存储在中的单个DataFrames训练数据框(或训练数据集)测试分布式文件系统将列表转换为两个统一的DataFrames:

  • train_df用于训练数据
  • 测试数据框用于测试的数据

最后,将DataFrames保存到CSV文件中(train.csv用于训练数据和test.csv对于测试数据),使其能够用于模型训练和评估过程。这个保存步骤不仅有助于在建模目的上清晰地分离数据,还能够使准备好的数据集具有可重复性和共享性。

摘要

此数据准备策略细致地尊重了时间序列数据的时序性质,并确保训练集和测试集与现实世界的预测场景相适应。通过根据最后已知的时间戳来分割数据,并谨慎地将最近的时期排除在训练集之外,该方法模拟了基于过去观测值对未来值进行预测的挑战,从而为评估预测模型性能奠定了坚实的基础。

使用AutoMLV2训练模型

SageMaker AutoMLV2 通过自动化模型开发过程中繁重的工作,减少了训练、调优和部署机器学习模型所需的资源。它提供了一种简单的方式来创建高质量的模型,这些模型针对您的特定问题类型进行了定制,无论是分类、回归还是预测等。在本节中,我们将详细介绍使用 AutoMLV2 训练时间序列预测模型的步骤。

步骤1:定义时间序列预测配置

第一步是定义问题配置。此配置指导AutoMLV2理解您的问题性质以及它应寻求的解决方案类型,无论涉及分类、回归、时间序列分类、计算机视觉、自然语言处理还是大型语言模型的微调。这种灵活性至关重要,因为它允许AutoMLV2根据手头任务的具体需求和复杂性来调整其方法。对于时间序列预测,配置包括诸如预测频率、所需预测的时间范围以及任何特定分位数或概率预测之类的详细信息。为时间序列预测配置AutoMLV2作业涉及指定最能利用历史销售数据来预测未来销售的参数。

无内容可翻译,保留原文:The自动机器学习时间序列预测配置是SageMaker AutoMLV2 SDK中的一个配置对象,专门用于设置时间序列预测任务。提供给此配置对象的每个参数都会根据您的时间序列数据和预测目标调整自动机器学习作业。

time_series_config = 自动化时间序列预测配置(
    预测频率='W',
    预测地平线=4,
    项目标识属性名称='product_code',
    目标属性名称='unit_sales',
    时间戳属性名称='timestamp',
    ...
)

以下是对你的时间序列配置中每个配置参数的详细解释:

  • 预测频率
    • 描述指定预测应该多久进行一次。
    • 值‘W’:表示预测将以每周为单位进行。模型将被训练以理解并预测一系列每周观察数据。有效的时间间隔是整数后跟 Y(年)、M(月)、W(周)、D(天)、H(小时)和 min(分钟)。例如,1D 表示每天一次,15min 表示每 15 分钟一次。频率值必须不与下一个较大的频率重叠。例如,您应该使用 1H 而不是 60min。
  • 预测 horizon(时间范围)
    • 描述:定义模型应该预测的未来时间步数。
    • 价值4:模型将对未来四个时间步进行预测。鉴于每周的频率,这意味着模型将从最后一个已知数据点开始预测接下来四周的数据。
  • 预测分位数
    • 描述:指定用于生成概率预测的分位数。
    • 值[p50,p60,p70,p80,p90]:这些分位数代表预测分布的第50、60、70、80和90百分位,提供了可能的结果范围,并捕捉了预测的不确定性。例如,p50分位数(中位数)可以用作中心预测,而p90分位数提供了一个高端预测,在这个预测之下预期有90%的实际数据分布,以考虑潜在的变化性。
  • 填充值(此词似乎缺少上下文,直译为“填充”,但在不同场景可能有特定含义,如编程中的“填充值”)原文如果不需要具体翻译内容,则直接表述为:“填充”或根据具体语境调整。由于没有提供更多背景信息,默认提供常见理解的翻译。
    • 描述:定义了在训练前如何处理缺失数据;规定了不同场景和列的填充策略。
    • 填充配置值:这应该是一个字典,详细说明如何填充数据集中的缺失值,例如用零或预定义的值填充缺失的促销数据或其他特定列。这确保模型有一个完整的数据集可以学习,从而提高其做出准确预测的能力。
  • 项标识符属性名称
    • 描述:指定数据集中唯一标识每个时间序列的列。
    • 值 '产品代码':此设置表示每个唯一的商品代码代表一个独立的时间序列。模型将把每个商品代码的数据视为一个单独的预测问题。
  • 目标属性名称
    • 描述:您数据集中包含要预测的值的列的名称。
    • 值 单位销售额:指定的单位销售额将该列作为预测的目标变量,意味着模型将被训练来预测未来的销售数字。
  • 时间戳属性名称
    • 描述:表示每个观测时间点的列名。
    • 值‘时间戳’指定时间戳列包含建模时间序列所需的时间信息。
  • 分组属性名称
    • 描述:一组列名,这些列名与项目标识符结合使用可以创建用于预测的组合键。
    • 值 ['location_code']:此设置意味着将为每种组合生成预测。产品代码位置代码它允许模型考虑销售数据中特定地点的趋势和模式。

提供的配置指示SageMaker AutoML训练一个能够为每个产品和位置进行每周销售预测的模型,通过分位数预测来考虑不确定性,处理缺失数据,并将每个产品-位置对识别为一个独特的序列。这个详细的设置旨在优化预测模型的相关性和准确性以适应您的特定业务背景和数据特征。

步骤2:初始化AutoMLV2作业

接下来,通过指定问题配置、具有相应权限的AWS角色、SageMaker会话、用于标识的基础作业名称以及将存储模型工件的输出路径来初始化AutoMLV2作业。

automl_sm_job = AutoMLV2(
    problem_config=time_series_config,
    role=role,
    sagemaker_session=sagemaker_session,
    base_job_name='时间序列预测任务',
    output_path=f's3://{bucket}/{prefix}/output'
)

步骤3:拟合模型

要开始训练过程,请调用您的AutoMLV2作业对象的fit方法。此方法需要指定输入数据在Amazon S3中的位置以及是否应让SageMaker等待作业完成后再继续进行下一步。在此步骤中,AutoMLV2将自动预处理您的数据、选择算法、训练多个模型并调整它们以找到最佳解决方案。

automl_sm_job.fit(
    inputs=[AutoMLDataChannel(s3_data_type='S3Prefix', s3_uri=train_uri, channel_type='训练')],
    wait=True,
    logs=True
)

请注意,模型拟合可能需要几个小时,具体取决于您的数据集大小和计算预算。更大的计算预算允许使用更强大的实例类型,从而加速训练过程。在这种情况下,如果您不是在提供的SageMaker笔记本中运行此代码(该笔记本正确处理了代码单元的顺序),您将需要实现一些自定义代码来监控训练状态,在获取并部署最佳模型之前。

3. 使用AutoMLV2部署模型

将机器学习模型部署到生产环境中是您的机器学习工作流中的一个关键步骤,它使您的应用程序能够从新数据中进行预测。SageMaker AutoMLV2 不仅帮助您构建和调优模型,还提供了无缝的部署体验。在本节中,我们将指导您如何将来自 AutoMLV2 作业的最佳模型作为 SageMaker 中完全托管的端点进行部署。

步骤1:识别最佳模型并提取名称

在您的AutoMLV2作业完成后,部署过程的第一步是识别表现最佳的模型,也称为最优候选模型。这可以通过使用来实现最佳候选人您的AutoML作业对象的方法。您可以在适应AutoML作业后立即使用此方法,或者如果您正在操作以前已完成的AutoML作业,则可以显式指定作业名称。

# 选项1:直接在完成AutoML作业后
best_candidate = automl_sm_job.best_candidate()

# 选项2:直接指定作业名称
best_candidate = automl_sm_job.best_candidate(job_name='your-auto-ml-job-name')

best_candidate_name = best_candidate['CandidateName']

步骤2:创建一个SageMaker模型

在部署之前,从最佳候选者创建一个SageMaker模型。该模型充当用于提供预测所需的工件和元数据的容器。使用创建模型使用AutoML作业对象的方法来完成此步骤。

endpoint_name = f"ep-{best_candidate_name}-automl-ts"

# 从最佳候选者创建一个SageMaker模型
automl_sm_model = automl_sm_job.create_model(name=best_candidate_name, candidate=best_candidate)

4. 推理:批量、实时和异步

为了部署训练好的模型,我们探索了批量、实时和异步推理方法以适应不同的使用场景。

下图是一个决策树,可帮助您决定使用哪种类型的端点。该图表概述了在批处理、异步或实时推理端点之间进行选择的决策过程。从需要即时响应开始,它引导您考虑有效负载大小和模型计算复杂性等因素。根据这些因素,您可以选择一个计算要求较低且速度更快的选项,或者为大型数据集选择较慢的批处理过程。

Decisioin tree for selecting between batch, asynchronous, or real-time inference endpoints

使用SageMaker管道进行批量推理

  • 使用方法适合批量生成预测,例如所有产品和地点的月度销售预测。
  • 流程我们使用了SageMaker的批量转换功能来处理大量的历史销售数据集,并为指定的时间范围输出预测结果。

用于批量推理的推理管道展示了部署、评估和有条件注册时间序列预测机器学习模型的全面方法,使用SageMaker。该管道结构确保了从数据预处理到模型推理,再到后推理评估和有条件模型注册的无缝流程。以下是其构建的详细分解:

  • 批处理转换步骤
    • Transformer 初始化:A变压器对象被创建,指定用于批处理推理的模型,分配的计算资源以及结果的输出路径。
    • 变换步骤创建:此步骤调用变换器对指定的输入数据执行批量推理。该步骤配置为处理CSV格式的数据,这是结构化时间序列数据常见的选择。
  • 评估步骤
    • 处理器设置:初始化一个具有指定角色、框架版本、实例数量和类型的SKLearn处理器。此处理器用于评估模型的性能。
    • 评估处理:配置处理步骤使用SKLearn处理器,将批量转换输出和测试数据作为输入。处理脚本(evaluation.py在这里指定,将基于模型的预测和真实标签计算评估指标。
    • 评估策略:我们采用了一种全面的评估方法,使用平均绝对误差(MAE)和均方根误差(RMSE)等指标来量化模型的准确性,并根据这些洞察调整预测配置。
    • 输出和属性文件:评估步骤产生一个输出文件(评估指标.json包含计算指标的文件。该文件存储在Amazon S3中,并作为属性文件进行注册,以便管道后续访问。
  • 条件模型注册
    • 模型指标设置:定义与模型包关联的模型指标,包括从指定的Amazon S3 URI获取的统计信息和可解释性报告。
    • 模型注册:通过指定内容类型、推理和转换实例类型、模型包组名称、审批状态和模型指标来为模型注册做准备。
    • 条件注册步骤:根据评估指标(例如MAE)实施条件。如果满足该条件(例如,MAE大于或等于阈值),则注册模型;否则,在不注册模型的情况下结束管道。
  • 管道创建和运行时环境
    • 管道定义:通过为其命名并指定要运行的步骤顺序来组装管道:批处理转换、评估和条件注册。
    • 管道插入和运行时:The 管道插入或更新该方法被调用以根据提供的定义创建或更新管道,并且pipeline.start()运行管道。

下图是一个 SageMaker Pipeline 有向无环图(DAG)的示例。

SageMaker Pipeline directed acyclic graph (DAG) for this problem.

该管道将机器学习生命周期的几个阶段有效整合成一个连贯的工作流程,展示了如何使用Amazon SageMaker自动化模型部署、评估和基于性能指标进行条件注册的过程。通过将这些步骤封装在一个单一的管道中,这种方法提高了效率,确保了模型评估的一致性,并简化了模型注册过程——同时保持了适应不同模型和评估标准的灵活性。

使用Amazon SageMaker端点进行(近)实时推理

但如果你想实时或异步地运行推理呢?SageMaker实时端点推理提供从部署的机器学习模型即时预测的能力,这对于需要快速决策的情景至关重要。当应用程序向SageMaker实时端点发送请求时,它会实时处理数据并几乎立即返回预测结果。这种设置非常适合需要近乎即时响应的应用场景,例如个性化内容交付、即时欺诈检测和实时异常检测。

  • 用法:适用于按需预测,例如预测特定地点某种产品下周的销售额。
  • 流程:我们将模型部署为SageMaker终端节点,通过发送包含所需输入数据的请求,使我们可以进行实时预测。

部署涉及指定实例的数量和实例类型以提供预测服务。此步骤会创建一个HTTPS端点,您的应用程序可以调用该端点来进行实时预测。

# 将模型部署到SageMaker端点
predictor = automl_sm_model.deploy(initial_instance_count=1, endpoint_name=endpoint_name, instance_type='ml.m5.xlarge')

部署过程是异步的,SageMaker负责提供必要的基础设施、部署您的模型,并确保端点的可用性和可扩展性。模型部署完成后,您的应用程序可以开始向SageMaker提供的端点URL发送预测请求。

虽然实时推理适用于许多用例,但在某些场景中,稍微宽松的延迟要求可能会带来益处。亚马逊 SageMaker 异步推理提供了一个基于队列的系统,可以高效地处理推理请求,并根据需要扩展资源以保持性能。这种方法对于需要处理更大数据集或更复杂模型的应用特别有用,在这些应用中,即时响应不是那么关键。

  • 用法:示例包括从大型数据集中生成详细的报告、执行需要大量计算时间的复杂计算,或处理高分辨率图像或长时间音频文件。这种灵活性使其成为实时推理的补充选项,特别是对于需求波动且希望在性能和成本之间保持平衡的企业而言。
  • 过程:使用异步推理的过程简单而强大。用户将他们的推理请求提交到一个队列,SageMaker会依次处理这些请求。基于队列的系统允许SageMaker根据当前工作负载高效地管理和扩展资源,确保每个推理请求都能尽快得到处理。

清理干净

为了避免产生不必要的费用并在完成实验或运行本文中描述的演示后清理资源,请按照以下步骤删除所有已部署的资源:

  1. 删除SageMaker端点:要删除任何已部署的实时或异步端点,请使用SageMaker控制台或AWS SDK。此步骤至关重要,因为如果端点持续运行,可能会产生大量费用。
  2. 删除SageMaker管道:如果您已经设置了一个SageMaker管道,请删除它以确保没有可能产生费用的残留执行。
  3. 删除S3对象资源:删除存储在您的S3桶中用于训练、存储模型工件或日志的所有资源。确保只删除与此项目相关的资源,以避免数据丢失。
  4. 清理任何额外的资源:根据您的具体实现和额外的设置修改,可能还需要考虑其他资源,例如角色或日志。检查您的AWS管理控制台中创建的所有资源,并删除不再需要的资源。

结论

这篇文章展示了Amazon SageMaker AutoMLV2在时间序列预测中的有效性。通过精心准备数据、周到地配置模型,并使用批量和实时推理,我们证明了一种稳健的预测未来销售的方法。这种方法不仅节省了时间和资源,还使企业能够有信心地做出基于数据的决策。

如果你被时间序列预测的可能性所启发,并希望进一步实验,考虑探索一下 SageMaker画布UI. SageMaker Canvas 提供了一个用户友好的界面,简化了构建和部署机器学习模型的过程,即使您没有丰富的编码经验。

访问SageMaker Canvas页面了解更多关于其功能以及它如何帮助您简化预测项目。立即开始您的旅程,迈向更直观和易用的机器学习解决方案!


关于作者

尼克·麦卡锡尼克试图是一名位于伦敦的AWS高级机器学习工程师。他与来自医疗、金融、体育、电信和能源等各行业的AWS客户合作,通过使用人工智能/机器学习加速他们的业务成果。在工作之外,他喜欢旅行、尝试新美食以及阅读有关科学和技术的内容。尼克拥有天体物理学学士学位和机器学习硕士学位。

达维德·加利特يلي是一位负责EMEA地区AI/ML解决方案的高级专家架构师。他驻扎在布鲁塞尔,与整个比荷卢经济联盟地区的客户紧密合作。自幼他就成为一名开发者,在七岁时就开始编写代码。他在大学期间开始学习人工智能和机器学习,并从那时起就深深地爱上了这一领域。

关于《亚马逊 SageMaker 自动机器学习的时间序列预测》的评论


暂无评论

发表评论

摘要

时间序列预测是各种行业中通过预测依赖于时间的数据的未来值来做出明智决策的关键组成部分。在这篇博客文章中,我们探讨了使用Amazon SageMaker AutoMLV2软件开发工具包(SDK)进行综合时间序列预测的方法。通过根据最后一个已知的时间戳分割数据,并仔细地从训练集中排除最近的时期,这种方法模仿了基于过去观察值预测未来值的挑战,从而为评估预测模型性能奠定了坚实的基础。 automl_sm_job = AutoMLV2( problem_config=time_series_config, role=role, sagemaker_session=sagemaker_session, base_job_name='time-series-forecasting-job', output_path=f's3://{bucket}/{prefix}/output' ) 步骤 3:拟合模型 要启动训练过程,请调用AutoMLV2作业对象的fit方法。以下是其构造的详细说明: 批量转换步骤 转换器初始化:创建一个Transformer对象,指定用于批量推理的模型、分配的计算资源以及结果输出路径。