本篇文章聚焦于供应链中的库存优化,技术亮点在于通过机器学习改进预测精度,成功将预测误差降低25%,并在六个月内实现库存过剩减少40%。该方法适用于需要优化库存和提升服务水平的商业场景,特别是制药行业,帮助企业在降低库存的同时保持高服务水平(>95%)。
文章目录
1 项目背景
在这个两部分的验证性概念项目中,SupChains 和 DragonRitter(一个预测即服务平台)帮助一家医药分销商在优化其服务水平的同时减少库存。该概念验证项目显示,在六个月内,预测误差减少了 25%,预期库存过剩减少了 40%,同时确保了更高的服务水平(高于当前 80% 的 95%)。此外,该模型还为客户提供了一份滞销库存清单,以便他们立即采取行动。
基于这些初步结果(于 2022 年 11 月公布),客户决定从 2022 年 12 月起使用我们的预测引擎,并从 2023 年 1 月起根据该模型规划其采购。
1.1 业务情况
我们的客户是一家活跃于拉丁美洲的医药分销商,拥有十几个活跃仓库和约 10,000 种独特产品。2021 年,他们报告的总收入为 10 亿美元,雇佣了超过一千名员工。
与全球许多供应链一样,他们同时面临滞销库存和短缺:尽管库存相当于 45 天的销售额,但他们在 2022 年仅实现了60% 的满足率(在我们用于概念验证的仓库中高达 80%)。他们寻求 DragonRitter(一个预测即服务平台)和 SupChains 的帮助,以提出一个联合的端到端解决方案。
我们客户的目标是提高其服务水平,同时减少其总库存。
1.2 我们的端到端解决方案:需求预测与库存优化
为实现库存减少和服务水平提高的双重目标,SupChains 建议采用两步法:
- 提高预测质量:通过实施机器学习预测引擎。
- 计算适当的库存水平:[捕捉需求和供应的可变性],以达到所需的服务水平目标。
由于我们的客户没有合适的预测引擎,我们通过开发一个利用我们机器学习专业知识的定制预测引擎来启动该项目。
2 需求预测
2.1 需求预测的问题
为了支持其供应链决策,分销商需要针对未来 26 周的每个仓库、产品和每周的准确预测。这代表着大约 100,000 种组合。(概念验证项目侧重于单个仓库。)
我们可以访问历史销售数据(按客户渠道划分)——这是主要要求。但输入模型的信息可以通过促销、积压订单、短缺、产品信息、价格等进行丰富。不幸的是,这个项目数据集呈现出两个主要困难:不稳定的需求行为和缺乏丰富数据。让我们详细讨论这两点。
2.1.1 需求行为不稳定
该数据集尤其偏斜,平均每周销售量为 30 个单位,但中位数为 0 个单位(见下图)。
图 1 超过 50% 的观测周期销售量为零。
此外,99% 的销售观测值低于 400 个单位,但剩余的 1% 在单周内销售量高达 80,000 个单位。
图 2 99% 的销售观测值低于 400 个单位,但有些产品在单周内销售量高达 80,000 个单位。
为了说明这种不稳定的需求,您可以查看下图所示的他们最畅销产品之一的匿名需求模式。这种模式极不规律:平均订单数量是中位数的四倍——需求变异系数约为 150%(而通常情况下,畅销产品享有更稳定的需求模式)。
图 3 即使是畅销产品也显示出不稳定的需求模式(匿名数据)。
2.1.2 缺乏数据
机器学习模型特别适合处理丰富需求数据集(包括需求驱动因素,如促销和定价;以及额外信息,如历史短缺)。不幸的是,正如以下段落所详述的,我们在此次概念验证中无法访问这些额外信息。
2.1.2.1 有限的历史数据
客户的 ERP 系统仅允许保留长达 3.5 年的历史销售数据。这种限制在供应链中不幸地司空见惯,是实现最佳准确性的一个重大缺陷。
2.1.2.2 缺乏需求驱动因素
机器学习模型特别适合从各种需求驱动因素(定价、促销、短缺)中收集洞察力,以生成准确的预测。
对于这个具体案例,我们只能收集历史价格。
2.1.2.3 无产品生命周期数据
不幸的是,在这个最初的概念验证中,我们没有机会访问产品生命周期数据。如下图所示,标记产品生命周期是一个至关重要的最佳实践,它将始终导致更高的预测准确性和更适合新产品的库存目标。
图 4 — 类似产品的旧版本和新版本的组合。组合数据将用于预测未来销售(数据:化工厂)。
我们强烈鼓励所有供应链从业者尽可能多地保留历史数据,并以清晰、一致的方式存储。
2.1.3 缺乏缺货数据
我们的客户,像任何供应链一样,正在遭受短缺。在短缺期间,他们的客户(零售商和药店)将不会下订单。这意味着,如果您使用历史订单数据来预测未来需求(参见下图中的示例),您将因这些短缺而使您的时间序列出现零期。
图 5 短缺对销售额的影响(数据:在线零售商)。
不幸的是,我们没有获得关于历史短缺的精确数据。(对历史库存水平的严格分析将在 2023 年晚些时候完成。)
总而言之,这个数据集和预测设置尤其具有挑战性,因为需求模式不稳定,而且我们缺乏丰富数据(需求驱动因素、短缺、产品生命周期)。
2.2 SupChains 解决方案
2.2.1 预测指标
由于数据集不稳定,我们选择了平均绝对误差(MAE,或图中的简单“预测误差”)和偏差的简单组合来评估我们预测的质量。这种组合的优点是易于解释,同时兼顾准确性和偏差。
2.2.2 机器学习预测引擎
我们开发了一个基于树的机器学习模型。该模型利用最新技术(CPU 多线程和 GPU 计算)在 5 分钟内使用笔记本电脑生成预测。
2.2.3 结果
如下图所示,我们的机器学习模型与基准(12 周移动平均线)相比,提供了超过 25% 的预测附加价值。我们将附加价值计算为评分指标(MAE 和偏差的组合)的百分比减少。
图 6 我们的机器学习模型与基准相比,实现了 27.9% 的 FVA。由于需求模式不稳定,基准的绝对误差远高于 100%。
尽管缺乏丰富数据,我们仍能提供这惊人的 25% 附加价值。如果数据集能够通过需求驱动因素(营销和促销)、生命周期信息(前身和继承者)以及短缺数据进行丰富,我们可以取得更好的结果。
2.3 预测期内的结果
如下图所示,我们的机器学习模型在 26 周的预测期内提供了准确的预测。我们的模型每周损失约 0.5% 的准确性,而基准损失约 0.25%。从偏差来看,机器学习模型提供了稳定的结果——正确捕捉了长期趋势、周期和季节性。
这种差异可以通过偏差的演变进行机械解释:当偏差较低时,绝对误差通常会减小。由于基准在长期预测中实现了较低的偏差,因此它也受益于减小的绝对误差。
3 库存优化
3.1 库存问题定义
这是供应链优化项目的第二部分。本部分重点关注库存优化。
在这个由两部分组成的概念验证项目中,SupChains 和 DragonRitter(一个预测即服务平台)帮助一家制药分销商在优化服务水平的同时减少了库存。该概念验证显示,在六个月内,预测误差减少了 25%,预期过剩库存减少了 40%,同时确保了更高的服务水平(>95% 相比目前 80%)。此外,该模型为客户提供了一份滞销品清单,以便他们立即采取行动。
基于这些初步结果(于 2022 年 11 月提出),客户决定从 2022 年 12 月起使用我们的预测引擎,并从 2023 年 1 月起根据模型规划其采购。
为了实现减少库存和提高服务水平的双重目标,SupChains 建议采用两步法:
- 通过实施机器学习预测引擎来提高预测质量。
- 计算适当的库存水平,捕获需求和供应变异性,以实现所需的服务水平目标。
在这个业务案例的第一部分,我们介绍了我们的预测解决方案及其结果——预测误差减少了 25%(尽管数据很少)。
让我们继续讨论库存优化引擎。从业务角度来看,我们的目标是评估需要多少库存才能达到所需的满足率。一旦我们有了这个目标,我们就可以评估当前的_库存质量_以及它将如何根据我们的建议(库存目标和预测)演变。从数学角度来看,我们需要为每个产品-仓库组合评估最佳库存水平,基于所需的安全库存(以达到服务水平目标)和预期周期库存(基于供应策略)。
库存质量。实现所需服务水平实际所需的总库存百分比。从技术上讲,我们将库存水平分为周期库存、安全库存和过剩库存,并计算质量比率,即:库存质量 = (周期库存 + 安全库存) / 过剩库存
为此,我们将:
- 分析历史预测误差。
- 使用我们的库存模型计算库存目标(基于历史预测误差、满足率目标和提前期)。
- 将这些目标与当前的实际库存水平(和即将到来的交货)进行比较。
- 在仿真系统中模拟 26 周,以查看库存质量将如何随时间演变。
让我们详细说明我们创建模型所采取的步骤。
3.2 SupChains 的库存模型
3.2.1 数据要求
创建高级库存模型需要大量信息:
- 历史预测误差。为了生成这些误差,我们使用我们的预测模型生成了两年的历史预测。
- 预期供应提前期和供应商可靠性。
- 当前库存水平和预期交货。
- 满足率目标。
- 未来预测以模拟未来库存水平。
我们使用我们的预测引擎计算历史和未来预测,而客户提供了其他信息。
3.2.2 库存模型
我们创建了一个_动态库存_模型,旨在基于_自定义预测误差分布_,直接在每个产品的_风险范围_内计算_满足率_。
让我们逐一详细说明这些概念:
- 动态目标。我们的模型能够根据预期需求适当调整其目标:更高的预测通常意味着保持更多安全库存是健康的。反之,如果预测较低(或下降),模型将减少其库存目标。
- 预测误差。模型不着眼于每个时期的需求偏差(并假设需求呈正态分布),而是着眼于历史预测误差来估计未来误差。
关注历史需求偏差而不是预测误差是一个典型的错误,应该避免。换句话说,你不应该关注需求变异性(或 COV),而应该关注可预测性。
- 自定义预测误差分布。模型不假设预测误差呈正态分布。相反,它为每个产品-仓库组合创建自定义误差分布。
请注意,我们不建议使用泊松分布,因为它不能正确描述低销量不规则产品。此外,它不适用于预测误差(预测误差可以是负数——而泊松分布严格为正)。
- 风险范围。我们不着眼于每周(每个产品每个仓库)的预测误差,而是着眼于每个产品整个_风险范围_内的误差(传入供应提前期加上其订单评审期)。[1] 例如,如果一个产品有 3 周的提前期,每周下订单,我们将着眼于连续四周的预测误差分布。换句话说,对于每个产品,我们着眼于在整个风险范围内容可能发生的情况。
风险范围。你需要等待收到订单的最长时间。在此期间,你的库存有耗尽的风险。该术语在 [Inventory Optimization: Models and Simulations]_ 中创造。
图 1 衡量每周预测误差与衡量风险范围内的累积误差。
- 满足率。模型的目标是_满足率_,而不是通常的_周期服务水平_(大多数软件供应商和通常的安全库存公式都使用周期服务水平。不幸的是,周期服务水平与业务绩效[相关性不佳]。
即使具有这些多重特性和改进,该模型仍然可以在几分钟内在笔记本电脑上运行。
3.3 业务成果
使用我们的优化引擎,我们运行了一个仿真系统,在 6 个月的范围内重现了 MRP 行为(见下图)。我们可以评估:
- 实现目标服务水平需要多少库存,以及该水平如何随时间波动。
- 当前的_库存质量_以及它未来将如何演变(随着过剩库存缓慢消耗)。
图 2 6 个月库存模拟。
模型首先补充所有缺失的货物(参见 11 月中旬的交货高峰)——直接效果是产品短缺和销售损失基本停止(假设供应不受限制)。
然后,过剩库存随着时间的推移而减少,因为它被预测缓慢消耗(从大约 700,000 单位到大约 425,000 单位)。部分过剩库存可以被认为是滞销品:在可预见的未来,自然消耗永远不会消耗当前的库存。相反,你可能需要与销售团队合作来处理这些产品。
从库存质量来看,它开始时较低,为 37%(换句话说,只有 37% 的初始库存是实现所需服务水平实际需要的)。六个月后,库存质量应达到 60% 的高水平。
如下图所示,我们还可以预测总库存天数将如何随时间演变。请注意,所需库存与实际库存之间的差距正在随着时间的推移而缩小(随着过剩库存的耗尽)。
最后,这项分析帮助团队发现了滞销品(即六个月后仍会过剩的产品),以便他们可以立即开始采取行动。
文章来自:An End-to-End Supply Chain Optimization Case Study: Part 1 Demand Forecasting
以及
An End-to-End Supply Chain Optimization Case Study:
Part 2 Inventory Optimization
手动推荐关联文章
作者Nicolas Vandeput、SupChains技术团队、供应链相关文章还有:
- SupChains技术团队零售产品销量预测建模方案解析(一)
- SupChains技术团队回答:模型准确率提高 10%,业务可以节省多少钱?(二)
- SupChains团队: 衡量Forecast模型结果在供应链团队内的传递质量(三)
- SupChains团队:供应链数据的异常特征管理指南(四)
- SupChains技术团队:需求预测中减少使用分层次预测(五)
- SupChains团队:全局机器学习模型在需求预测中的应用(六)
- VN1 供应链销量预测建模竞赛技巧总结与分享(七)
- SupChains团队:供应链新品预测建模的一些策略(八)
- 供应链团队设置安全库存的五层境界(九)
- 供应链项目中产品的ABC XYZ分类法弊端(十)
- 供应链项目中库存管理与优化指南(十一)
- 端到端供应链优化案例研究:需求预测 + 库存优化(十二)