在亚马逊SageMaker上进行强大的时间序列预测与MLOps

在亚马逊SageMaker上实现强大的时间序列预测与MLOps

在数据驱动的决策制定领域,时间序列预测是使企业能够利用历史数据模式来预测未来结果的关键。无论您是在资产风险管理、交易、天气预测、能源需求预测、生命体征监测还是交通分析领域工作,准确预测对于成功至关重要。

在这些应用中,时间序列数据可能具有重尾分布,其中尾部表示极值。准确预测这些区域对于确定极端事件的可能性以及是否发出警报非常重要。然而,这些异常值显著影响基本分布的估计,使得稳健预测具有挑战性。金融机构依靠稳健模型来预测诸如市场崩盘之类的异常值。在能源、天气和医疗保健领域,对罕见但具有高影响力的事件(如自然灾害和大流行病)进行准确预测可以实现有效的规划和资源分配。忽视尾部行为可能导致损失、错失机会和安全受损。将尾部的准确性优先考虑有助于得出可靠且可操作的预测。在本文中,我们使用Amazon SageMaker培训了一个稳健的时间序列预测模型,能够捕捉这样的极端事件。

为了有效训练这个模型,我们建立了一个MLOps基础设施,通过自动化数据预处理、特征工程、超参数调优和模型选择来简化模型开发流程。这种自动化减少了人为错误,提高了可复制性,并加快了模型开发周期。通过训练流水线,企业可以高效地整合新数据,并根据不断变化的情况调整其模型,这有助于确保预测保持可靠和最新。

在训练完时间序列预测模型后,将其部署到端点可以获得实时预测能力。这使您能够根据最新数据做出明智和及时的决策。此外,将模型部署到端点还可以实现可扩展性,因为多个用户和应用程序可以同时访问和利用模型。通过遵循这些步骤,企业可以利用稳健的时间序列预测的能力做出明智的决策,并在快速变化的环境中保持领先。

解决方案概述

该解决方案展示了训练一个时间序列预测模型,专门设计用于处理数据中的异常值和变异性,使用Temporal Convolutional Network (TCN)Spliced Binned Pareto (SBP)分布。有关此解决方案的多模式版本的更多信息,请参阅NFL Next Gen Stats新传球指标背后的科学。为了进一步说明SBP分布的有效性,我们将其与相同的TCN模型但使用高斯分布进行比较。

这个过程大大受益于SageMaker的MLOps特性,它通过利用AWS的强大云基础设施来简化数据科学工作流程。在我们的解决方案中,我们使用Amazon SageMaker自动模型调整进行超参数搜索,使用Amazon SageMaker实验管理实验,使用Amazon SageMaker模型注册表管理模型版本,并使用Amazon SageMaker管道编排整个过程。然后,我们将我们的模型部署到SageMaker端点以获得实时预测。

以下图示了训练流水线的架构。

以下图表说明了推理流程。

您可以在GitHub存储库中找到完整的代码。要实施解决方案,请在SBP_main.ipynb中运行单元格。

点击此处打开AWS控制台并跟随操作。

SageMaker流水线

SageMaker流水线提供了一个用户友好的Python SDK,用于创建集成的机器学习(ML)工作流程。这些工作流程,表示为有向无环图(DAG),由具有不同类型和依赖关系的步骤组成。使用SageMaker流水线,您可以简化训练和评估模型的整个过程,提高ML工作流程的效率和可重复性。

训练流水线从生成一个模拟数据集开始,该数据集被分为训练、验证和测试集。训练集用于训练两个TCN模型,一个利用Spliced Binned-Pareto distribution,另一个采用高斯分布。两个模型都通过使用验证集进行超参数调优来优化。之后,对测试集进行评估,以确定具有最小均方根误差(RMSE)的模型。最佳准确度指标的模型将被上传到模型注册表。

以下图表说明了管道步骤。

让我们详细讨论这些步骤。

数据生成

我们的流水线中的第一步是生成一个模拟数据集,它特征是正弦波形和非对称重尾噪声。数据是使用一些参数创建的,例如自由度、噪声乘数和比例参数。这些元素影响数据分布的形状,调节数据的随机变异性,以及调整数据分布的扩展。

此数据处理作业使用一个PyTorchProcessor来完成,它在由SageMaker管理的容器内运行PyTorch代码(generate_data.py)。数据和其他相关的调试工件位于与SageMaker账号关联的默认Amazon Simple Storage Service(Amazon S3)存储桶中。管道中每个步骤的日志可以在Amazon CloudWatch中找到。

以下是流水线生成的数据示例。

您可以用各种时间序列数据替换输入,例如对称、非对称、轻尾、重尾或多模态分布。该模型的鲁棒性使其适用于广泛的时间序列问题,只要有足够的观测数据。

模型训练

数据生成后,我们使用两个TCN进行训练:一个使用SBP分布,另一个使用高斯分布。SBP分布采用离散的分箱分布作为预测基础,其中实数轴被划分为离散的箱子,并且模型预测了每个箱子中观察值出现的概率。此方法能够捕捉到不对称性和多个模态,因为每个箱子的概率是独立的。下图展示了分箱分布的示例。

左侧的预测分箱分布对极端事件具有鲁棒性,因为对数似然不依赖于预测均值与观测点之间的距离,与参数分布(如高斯或学生t分布)不同。因此,红点表示的极端事件不会偏移分布的学习均值。然而,极端事件的概率将为零。为了捕捉极端事件,我们通过将下尾定义为第5个分位数,上尾定义为第95个分位数,用加权广义帕累托分布(GPD)替换两个尾部,从而形成SBP分布,该分布可以量化事件的可能性。TCN将输出分箱分布基数和GPD尾部的参数。

为了获得最佳输出,我们使用自动模型调优来通过超参数调优找到最佳模型版本。此步骤集成在SageMaker Pipelines中,允许并行运行多个训练作业,采用各种方法和预定义的超参数范围。结果是根据指定的模型度量(即 RMSE)选择最佳模型。在我们的流水线中,我们会具体调整学习率和训练轮数,以优化模型的性能。有了SageMaker的超参数调优能力,我们增加了模型在给定任务上实现最佳准确性和泛化性的可能性。

由于我们的数据是合成的,我们将上下文长度和预测范围作为静态参数保持不变。上下文长度是指输入模型的历史时间步数,而预测范围表示预测的时间步数。对于示例代码,我们只调整学习率和训练轮数,以节省时间和成本。

基于作者在原始论文中对不同数据集进行的广泛测试,SBP特定参数保持不变:

  • 箱子数(100) – 此参数确定用于模拟分布基数的箱子数。将其保持在100,已经在多个行业中证明最有效。
  • 分位数尾部(0.05) – 这表示分布尾部的广义帕累托分布的大小。与前一个参数类似,经过详尽的测试,已确定它最有效。

实验

超参数过程与SageMaker Experiments集成在一起,帮助组织、分析和比较迭代的机器学习实验,提供洞察力,并促进对性能最佳模型的跟踪。机器学习是一个包括数据变化、算法选择和超参数调优等许多实验的迭代过程。这些实验逐步改进模型的准确性。然而,大量的训练运行和模型迭代可能导致难以确定性能最佳的模型,并在当前和过去的实验之间进行有意义的比较。SageMaker Experiments通过自动跟踪我们的超参数调优作业,并允许我们获取更多的细节和洞察力,来解决这个问题,如下图所示。

模型评估

模型经过训练和超参数调优后,通过evaluate.py脚本进行评估。该步骤利用与超参数调优阶段不同的测试集来评估模型在实际环境中的准确性。使用RMSE来评估预测的准确性。

为了比较分布,我们采用了概率-概率(P-P)图,评估实际与预测分布之间的拟合情况。点密切接近对角线表示完美拟合。我们对SBP和高斯预测分布与实际分布的比较表明,SBP的预测与实际数据更为接近。

正如我们所观察到的,SBP在基础、较低尾巴和较高尾巴上的RMSE较低。 SBP分布使高斯分布在基础部分的准确性提高了61%,在较低尾巴上提高了56%,在较高尾巴上提高了30%。总体而言,SBP分布具有显着更好的结果。

模型选择

我们使用SageMaker Pipelines中的条件步骤来分析模型评估报告,选择具有最低RMSE的模型以提高分布准确性。所选模型被转换为SageMaker模型对象,准备用于部署。这涉及到创建一个带有关键参数的模型包,将其打包为ModelStep

模型注册表

然后,所选模型将上传到SageMaker模型注册表,该注册表在管理准备生产的模型方面发挥关键作用。它存储模型,组织模型版本,捕获关键元数据和容器图像等重要工件,并管理每个模型的批准状态。通过使用注册表,我们可以高效地将模型部署到可访问的SageMaker环境中,并为持续集成和持续部署(CI/CD)流水线建立基础。

推断

在完成训练流水线后,我们的模型将使用SageMaker托管服务部署,该服务可为实时预测创建推断终点。此终点可与应用程序和系统实现无缝集成,通过安全的HTTPS接口提供对模型预测能力的按需访问。实时预测可用于股价和能源需求预测等场景。我们的终点为所提供的时间序列数据提供了单步预测,呈现为百分位数和中位数,如下图和表所示。

第1百分位数 第5百分位数 中位数 第95百分位数 第99百分位数
1.12 3.16 4.70 7.40 9.41

清理

在运行此解决方案之后,请确保清理任何不必要的AWS资源,以避免意外费用。您可以使用SageMaker Python SDK清理这些资源,该SDK可以在笔记本的末尾找到。通过删除这些资源,您可以防止对不再使用的资源产生进一步收费。

结论

准确的预测可以对企业未来规划产生重大影响,还可以为不同行业的各种问题提供解决方案。我们对SageMaker上的MLOps进行了鲁棒的时间序列预测的探索,展示了一种获取准确预测和精简训练流水线的高效方法。

我们的模型采用了基于时间卷积网络的带切割的拟玻尔分布方法,通过在同样采用高斯分布的TCN上改进了RMSE,提高了61%的准确性和适应性,上下尾巴分别提高了56%和30%。这些数字使其成为实际预测需求的可靠解决方案。

该流水线示范了自动化MLOps功能的价值。这可以减少人工努力,实现可重复性,并加快模型部署。SageMaker提供的功能,如SageMaker Pipelines、自动模型调优、SageMaker Experiments、SageMaker Model Registry和endpoints,使这一切成为可能。

我们的解决方案采用了一个迷你TCN,仅优化了少数几个超参数和有限层数,这足以有效地突出模型的性能。对于更复杂的用例,考虑使用PyTorch或其他基于PyTorch的库来构建一个更具定制性的TCN,以满足您的特定需求。此外,进一步探索其他SageMaker功能将有助于提升流水线的功能。要完全自动化部署过程,您可以使用AWS云开发工具包(AWS CDK)或AWS CloudFormation

有关AWS时间序列预测的更多信息,请参考以下内容:

欢迎留下您的评论和想法或提问!