亚马逊预报 是一项完全托管的服务,它使用统计和机器学习 (ML) 算法来提供高度准确的时间序列预测。 最近,基于 Amazon Forecast,我们帮助我们的一位零售客户在 8 周内实现了准确的需求预测。 该解决方案将手动预测平均提高了 10% WAPE 公制。 这导致每月直接节省 16 个工时。 此外,我们估计,通过完成正确数量的商品,销售额最多可增加 11.8%。 在这篇文章中,我们介绍了从概念验证 (POC) 到生产的工作流和关键要素,这是一个使用 Amazon Forecast 的需求预测系统,专注于零售行业的挑战。
零售业需求预测的背景和当前挑战
需求预测的目标是根据历史数据估计未来的需求,并帮助商店补货和容量分配。 通过需求预测,零售商能够在其网络中的每个位置放置适量的库存以满足需求。 因此,准确的预测系统可以为不同的业务功能带来广泛的好处,例如:
- 通过更好的产品可用性增加销售额并减少店内转移浪费的工作
- 提供更可靠的洞察力以提高容量利用率并主动避免容量配置中的瓶颈
- 最小化库存和生产成本并提高库存周转率
- 呈现整体更好的客户体验
当存在大量高质量数据时,ML 技术会显示出巨大的价值。 今天,基于经验的补货管理或需求预测仍然是大多数零售商的主流。 以改善客户体验为目标,越来越多的零售商愿意用基于机器学习的预测取代基于体验的需求预测系统。 然而,零售商在将基于机器学习的需求预测系统投入生产时面临着多重挑战。 我们将不同的挑战总结为三类:数据挑战、ML 挑战和操作挑战。
数据挑战
大量干净、高质量的数据是推动基于 ML 的准确预测的关键要求。 需要收集和整合质量数据,包括历史销售和销售相关数据(例如库存、商品定价和促销)。 来自多种资源的数据多样性需要一个现代数据平台来统一数据孤岛。 此外,及时访问数据对于频繁和细粒度的需求预测是必要的。
机器学习挑战
开发高级 ML 算法需要专业知识。 为正确的问题实施正确的算法需要深入的领域知识和 ML 能力。 此外,从大型可用数据集中学习需要可扩展的 ML 基础架构。 此外,在生产中维护 ML 算法需要 ML 能力,以便分析模型退化的根本原因并正确地重新训练模型。
要解决实际业务问题,做出准确的预测只是故事的一部分。 决策者需要不同分位数的概率预测来做出重要的客户体验与财务结果权衡决策。 他们还需要向利益相关者解释预测,并执行假设分析以调查不同情景可能如何影响预测结果。
运营挑战
减少维护具有成本效益的预测系统的操作工作量是第三个主要挑战。 在需求预测的常见场景中,每个位置的每个项目都有自己的预测。 需要一个可以随时管理数十万个预测的系统。 此外,业务终端用户需要将预测系统集成到现有的下游系统中,例如现有的供应链管理平台,这样他们就可以在不修改现有工具和流程的情况下使用基于机器学习的系统。
当业务规模庞大、动态且不断增长时,这些挑战尤其严峻。 为了应对这些挑战,我们分享了一个客户成功案例,该案例减少了快速验证潜在业务收益的工作量。 这是通过使用 Amazon Forecast 进行原型设计实现的——这是一种完全托管的服务,无需管理底层基础设施资源和算法即可提供准确的预测结果。
使用 Amazon Forecast 为基于 ML 的预测系统快速制作原型
根据我们的经验,我们经常看到零售客户愿意对其销售数据进行概念验证。 对于快速原型制作,这可以在几天到几周的范围内完成,具体取决于数据复杂性和可用于迭代模型调整过程的可用资源。 在原型制作期间,我们建议使用冲刺来有效地管理流程,并将 POC 分为数据探索、迭代改进和自动化阶段。
数据探索
数据探索通常涉及与数据科学家或商业智能分析师的激烈讨论,以熟悉可能影响预测结果的历史销售数据集和可用数据源,例如库存和历史促销活动。 最有效的方法之一是在项目早期从数据仓库中整合销售数据作为目标数据集。 这是基于预测结果通常受目标数据集模式支配的事实。 数据仓库通常存储日常业务数据,短时间内详尽理解既困难又耗时。 我们的建议是集中精力生成目标数据集,并确保这个数据集是正确的。 这些数据探索和基线结果往往可以在几天内得出,这可以决定目标数据是否能够准确预测。 我们将在本文后面讨论数据的可预测性。
迭代
获得基线结果后,我们可以继续添加更多相关数据以查看这些数据如何影响准确性。 这通常是通过深入研究其他数据集来完成的; 有关详细信息,请参阅 使用相关的时间序列数据集 和 使用项目元数据数据集.
在某些情况下,可以通过使用具有类似行为的数据集子集训练模型,或通过从数据集中删除稀疏数据来提高 Amazon Forecast 的准确性。 在此迭代改进阶段,具有挑战性的部分(对所有 ML 项目都是如此)是当前迭代取决于前一次迭代的主要发现和见解,因此严格的分析和报告是成功的关键。
分析可以在数量上和经验上进行。 定量方面是指在回测和比较准确度指标时的评估,例如 WAPE. 实证方面是指将预测曲线和实际目标数据可视化,并利用领域知识纳入潜在因素。 这些分析可帮助您更快地进行迭代,以弥合预测结果与目标数据之间的差距。 此外,通过每周报告呈现此类结果通常可以为业务最终用户提供信心。
自动化
最后一步通常涉及 POC 到生产过程和自动化的讨论。 由于 ML 项目受项目总持续时间的限制,我们可能没有足够的时间探索每一种可能性。 因此,在项目期间指出整个调查结果的潜在领域通常可以赢得信任。 此外,自动化可以帮助业务最终用户评估更长时间的 Forecast,因为他们可以使用现有的预测器来生成包含更新数据的预测。
可以从技术和业务角度使用生成的结果评估成功标准。 在评估期间,我们可以估算以下方面的潜在收益:
- 提高预测准确性(技术) – 计算实际销售数据的预测精度,并与现有的预测系统进行比较,包括人工预测
- 减少浪费(商业) – 减少过度预测以减少浪费
- 提高库存率(业务) – 减少预测不足以提高库存率
- 预计毛利增长(业务) – 减少浪费并提高库存率以增加毛利
我们在下图中总结了开发工作流程。
在以下部分中,我们将讨论在实施过程中需要考虑的重要因素。
开发预测系统的分步工作流程
目标数据集生成
第一步是为 Forecast 生成目标数据集。 在零售行业,这是指零售商品 (SKU) 的历史时间序列需求和销售数据。 准备数据集时,一个重要方面是粒度。 我们应该从业务需求和技术需求两方面来考虑数据粒度。
业务定义生产系统中的预测结果:
- Horizon – 预测的时间步数。 这取决于潜在的业务问题。 如果我们想每周补充库存水平,那么每周预测或每日预测似乎是合适的。
- 粒度 – 预测的粒度:时间频率(例如每天或每周)、不同的商店位置以及同一商品的不同尺寸。 最后,预测可以是每个商店 SKU 与每日数据点的组合。
尽管应该定义上述预测范围和粒度来确定业务需求的优先级,但我们可能需要在需求和可行性之间进行权衡。 以鞋业为例。 如果我们想预测每个商店级别的每个鞋码的销售额,数据很快就会变得稀疏并且很难找到模式。 然而,为了补充库存,我们需要估计这个粒度。 为此,替代解决方案可能需要估计不同鞋码之间的比率,并使用该比率来计算细粒度的结果。
我们经常需要平衡业务需求和可以学习并用于预测的数据模式。 为了提供数据模式的定量资格,我们建议使用数据可预测性。
数据可预测性和数据模式分类
我们可以从目标数据集中收集的关键见解之一是它产生高质量预测的能力。 这可以在 ML 项目的早期阶段进行分析。 当数据显示季节性、趋势和周期性模式时,预测就会大放异彩。
为了确定可预测性,有两个主要系数:需求时间的可变性和需求数量的可变性。 需求时序变异性是指两次需求之间的时间间隔,它衡量需求在时间上的规律性。 需求量的变化意味着数量的变化。 下图说明了一些不同的模式。 预测准确性在很大程度上取决于产品的可预测性。 有关详细信息,请参阅 需求分类:为什么可预测性很重要.
值得注意的是,这种可预测性分析是针对每个细粒度项目(例如,SKU-Store-Color-Size)的。 在需求预测生产系统中,不同的项目遵循不同的模式是很常见的。 因此,按照不同的数据模式分隔项目很重要。 一个典型的例子是快速移动和缓慢移动的物品; 另一个例子是密集和稀疏数据。 此外,细粒度的项目更有可能产生块状图案。 例如,在一家服装店里,一件热门商品每天的销售量可能相当顺利,但如果我们进一步将商品的销售量按颜色和尺码分开,很快就会变得稀疏。 因此,将粒度从 SKU-Store-Color-Size 减小到 SKU-Store 可以将数据模式从块状变为平滑,反之亦然。
此外,并非所有项目对销售的贡献都是平等的。 我们观察到商品贡献通常遵循帕累托分布,其中顶级商品贡献了大部分销售额。 这些顶级商品的销售往往很顺利。 销售记录较低的项目通常是块状且不稳定的,因此难以估计。 添加这些项目实际上可能会降低最畅销项目的准确性。 基于这些观察,我们可以将商品分成不同的组,在销量最高的商品上训练预测模型,并将销量较低的商品作为极端情况处理。
数据丰富和额外的数据集选择
当我们想使用额外的数据集来提高预测结果的性能时,我们可以依赖 时间序列数据集 和 元数据数据集. 在零售领域,基于直觉和领域知识,可以将库存、价格、促销、冬季或夏季等特征作为相关时间序列导入。 识别特征有用性的最简单方法是通过特征重要性。 在 Forecast 中,这是通过可解释性分析完成的。 预报 预测器可解释性 帮助我们更好地理解数据集中的属性如何影响目标的预测。 Forecast 使用称为影响分数的指标来量化每个属性的相对影响,并确定它们是增加还是减少预测值。 如果一个或多个属性的影响得分为零,则这些属性对预测值没有显着影响。 这样,我们可以快速删除影响较小的功能,并迭代添加潜在的功能。 重要的是要注意影响分数衡量属性的相对影响,这些影响与所有其他属性的影响分数一起标准化。
与所有 ML 项目一样,通过附加功能提高准确性需要反复试验。 您需要试验多种数据集组合,同时观察增量变化对模型准确性的影响。 您可以尝试通过 Forecast 控制台或使用 带有 Forecast API 的 Python 笔记本. 此外,您还可以使用 AWS CloudFormation,它部署了 AWS 为常见用例提供的现成解决方案(例如, 使用机器学习解决方案提高预测准确性). Forecast 自动分离数据集并生成准确性指标来评估预测变量。 有关详细信息,请参阅 评估预测器准确性. 这有助于数据科学家更快地迭代以获得最佳性能模型。
高级改进和处理极端情况
我们提到预测算法可以从数据中学习季节性、趋势和周期性特征。 对于具有这些特征的项目,以及适当的数据密度和数量,我们可以使用 Forecast 来生成估计值。 然而,当面对块状数据模式时,尤其是当数据量较小时,我们可能需要进行不同的处理,例如基于规则集的经验估计。
对于密集的 SKU,我们通过使用时间序列数据集的类似行为子集训练模型来进一步提高预测准确性。 我们使用的子集分离策略是业务逻辑、产品类型、数据密度和算法学习的模式。 生成子集后,我们可以为不同的子集训练多个预测模型。 对于一个这样的例子,请参阅 用于 Amazon Forecast 的集群时间序列数据.
走向生产:更新数据集、监控和再培训
让我们探索一个使用 Forecast 的示例架构,如下图所示。 每次最终用户在 亚马逊简单存储服务 (Amazon S3),它触发 AWS步骤功能 编排不同的组件,包括创建数据集导入作业、创建自动预测器和生成预测。 生成预测结果后,Create Forecast Export 步骤将它们导出到 Amazon S3 以供下游消费者使用。 有关如何配置此自动化管道的更多信息,请参阅 使用 AWS CloudFormation 实现自动化. 它使用 CloudFormation 堆栈自动将数据集部署到 S3 存储桶并触发预测管道。 您可以使用相同的自动化堆栈通过您自己的数据集生成预测。
有两种方法可以将近期趋势纳入预测系统:更新数据或重新训练预测器。
要使用反映近期趋势的更新数据生成预测,您需要将更新的输入数据文件上传到 S3 存储桶(更新的输入数据应仍包含所有现有数据)。 当您导入更新的数据集时,Forecast 不会自动重新训练预测器。 你可以 生成预测 像往常一样。 Forecast 从更新的输入数据中的最后一天开始预测预测范围。 因此,最近的趋势被纳入 Forecast 产生的任何新推论。
但是,如果您希望根据新数据对预测器进行训练,则必须创建一个新的预测器。 当数据模式(季节性、趋势或周期)发生变化时,您可能需要考虑重新训练模型。 如中所述 使用 Amazon Forecast 持续监控预测器的准确性,由于经济环境或消费者行为的变化等因素,预测器的性能会随时间波动。 因此,可能需要重新训练预测器,或者可能需要创建新的预测器以确保继续进行高度准确的预测。 在...的帮助下 预测监测, Forecast 可以跟踪预测器的质量,让您减少操作工作量,同时帮助您做出有关保留、重新训练或重建预测器的更明智的决策。
结论
Amazon Forecast 是一种基于机器学习的时间序列预测服务,专为业务指标分析而构建。 我们可以通过结合历史销售和其他相关信息,如库存、促销或季节,来整合高精度的需求预测预测。 在 8 周内,我们帮助我们的一位零售客户实现了准确的需求预测——与人工预测相比提高了 10%。 这导致每月直接节省 16 个工时,预计销售额增长高达 11.8%。
这篇文章分享了将您的预测项目从概念验证推向生产的常见做法。 现在开始使用 亚马逊预报 为您的业务实现高度准确的预测。
作者简介
崔艳伟, 博士,是 AWS 的机器学习专家解决方案架构师。 他在 IRISA(计算机科学与随机系统研究所)开始了机器学习研究,并在计算机视觉、自然语言处理和在线用户行为预测方面拥有数年构建人工智能驱动的工业应用的经验。 在 AWS,他分享领域专业知识并帮助客户释放业务潜力,并通过大规模机器学习推动可操作的成果。 工作之余,他喜欢阅读和旅行。
高登王 是 Amazon Web Services 专业服务团队的高级数据科学家。 他为许多行业的客户提供支持,包括媒体、制造、能源、零售和医疗保健。 他热衷于计算机视觉、深度学习和 MLOps。 在业余时间,他喜欢跑步和徒步旅行。