资讯动态

供应链预测实战:从需求预测到库存优化的完整技术路线

发布时间:2026/10/24 6:01:25 来源:尧图企业网站定制
预测这件事放在供应链里跟放在别的领域完全是两码事。外面讲机器学习的文章很多一上来就是XGBoost调参、LSTM预测股价看着很热闹但真要落回到补货、备库存、排产这摊事上你会发现很多通用方法论根本使不上劲。这里面最大的坑不在于模型精度不够而在于供应链预测本质上不是纯粹的数据问题它是一道决策题——预测只是前半场后半场还要拿预测结果去做库存优化、做产能分配。这两个环节一旦脱节模型跑得再漂亮仓库该缺货还是缺货该积压还是积压。我这几年一直在做供应链计划相关的项目从需求预测模型搭建到库存策略优化都趟过一遍。今天这篇东西不打算讲大而全的教科书理论就围绕“预测优化”这条主线把我实际沉淀下来的一套做法、踩过的坑、以及最终跑通的技术路线拆开来说。内容会比较偏向实战适合正在搭供应链预测系统、或者想把现有预测模型再往前推一步的团队参考。1. 为什么常规的时间序列模型在供应链场景下经常失灵先别急着上模型得先把问题看清楚。供应链需求预测跟股票预测、销量预测这些事最大的区别在于你要预测的对象是一个被“人为干预”过的序列。什么意思呢你今天看到的销售历史数据里面混着上个月的促销活动、上季度的缺货记录、某个渠道突然爆单又突然断崖……这些事件全都会扭曲真实的需求形态。如果你直接把这段历史扔给模型去学习模型学到的是一堆噪声和异常事件之间的“伪相关”而不是稳定的需求规律。我之前在某制造企业做过一个项目当时用过去三年的月销售数据训练了一个梯度提升模型效果出奇地好——回测精度达到90%以上。后来一上线就露馅了预测值跟实际值差了将近30%。排查了半天才找到原因训练集里那三年正好覆盖了一轮大规模渠道压货期模型的记忆里全是“淡季也会有大订单”的幻觉一旦渠道政策转向它的预测基础就崩塌了。1.1 供应链数据的“非平稳”和“事件污染”问题供应链数据有两个绕不开的特征。第一个叫非平稳性也就是数据的均值、方差会随着时间发生变化。促销、涨价、竞品上新、季节更替都会让需求分布整体漂移。第二个是事件污染历史数据里埋着大量一次性事件的冲击痕迹比如某平台大促、某次极端天气、某段时期的工厂停产。这两个特征结合在一起意味着你不能简单地把历史数据当成“干净样本”来训练模型。常规做法是先把序列清洗成“干净需求”再建模把这几个步骤走完再去碰模型识别并剔除促销事件期间的销量记录事件期间的额外增量幅度单独建模对缺货月份做需求回填用相邻正常月份的销售结构推算被抑制的需求量对异常值比如仓库盘点的批量退货做截断或替换处理修正渠道结构性变化带来的均值漂移比如某条渠道停运或者新增了经销商。这些预处理工作带来的精度提升通常比换一个更强的模型算法来得更明显。我见过太多团队花几周时间去调LSTM的网络结构却不愿意花半天时间去做事件剔除。方向反了。1.2 预测的目标到底是什么是预测需求还是预测“可控的需求模式”还有一个容易被忽略的点我们最终想要的不是“预测值本身”而是“可执行的需求计划”。这两者之间的差距在于前者是被动地猜未来会发生什么后者是在理解业务约束的前提下回答“如果正常运作需求应该是多少”。举个例子某个SKU上周销量特别低是因为市场需求真的塌了还是因为仓库库存见底导致没货可卖如果你用那个低销量去训练模型模型就会认为“这个SKU的需求在萎缩”然后给出一个更低的预测运营团队看到预测低就降低备货结果缺货更严重形成一个恶性循环。正确的做法是在做预测之前就把“缺货期”标注出来告诉模型“这段时间的销量不等于需求请模型忽略并估算实际需求量”。再往深一层讲预测方法的选择要跟预测的用途挂钩。如果预测结果是用来做中长期产能规划的模型要平滑、要稳不必追求精确捕捉每一次短期波动如果预测结果是用来做周补货决策的那模型就要灵敏要能捕捉到近期的趋势拐点。同一个SKU可以同时跑两套不同口径的预测模型分别服务不同的决策场景。这一点很多新手容易忽略总想用一套模型通吃。2. 预测模型的选型逻辑从统计基线到机器学习再到概率预测模型选型这一步我不想直接丢结论说“用哪个最好”因为供应链场景千差万别选型的核心逻辑是在模型复杂度、可解释性、数据需求之间找到平衡。一个简单可解释的模型如果已经能满足业务精度要求就不要为了炫技去换复杂模型。供应链计划系统的使用者是运营和计划员他们需要理解预测为什么是这个数而不是只看一个黑盒输出。2.1 第一梯队统计基线模型很多人看不起传统统计模型但它在供应链里依然是基石级的工具。指数平滑Exponential Smoothing和ARIMA这类方法对单序列数据的拟合能力其实相当稳定尤其是SKU数量多、单SKU历史数据短的情况下它们的表现往往不输机器学习模型而且计算成本低、可解释性极强。我在项目里经常是先用ETS误差、趋势、季节性模型跑一轮全量SKU的基线预测把结果作为“及格线”。所有更复杂的模型都必须证明自己比及格线有明显提升才有资格被采用。这一步看着笨实际上非常有用——它能拦住至少一半的过度拟合问题。2.2 第二梯队机器学习模型及特征设计当SKU数量达到一定规模、历史数据足够长或者需要引入外部因素价格、活动、天气、宏观指标时统计模型就吃力了。这时候我才会切换到机器学习模型比如梯度提升树这类非线性模型。但机器学习在供应链预测里有个命门它对特征工程的依赖极高。同样是用梯度提升树有人能跑到不错的精度有人只能过拟合历史噪声差别全在特征设计上。我通常会把特征分成几大类来组织时间类特征月份、星期、是否月初/月末、距离最近一次节假日的天数、当年第几周日历与事件特征是否促销期、促销强度系数、是否上新/退市、是否有渠道活动历史统计特征过去4周/8周/12周的销量均值、方差、最大值、最小值、近期变化斜率外生变量特征天气温、市场热度指数、价格变动幅度、渠道铺货覆盖率交叉特征SKU属性品类、价格带、保质期与上述特征的组合。这里有一个实操经验历史统计特征的窗口设置非常关键窗口太长会把近期趋势变化摊平窗口太短又会被短期波动带偏。我一般建议按“短周期中周期”双轨去做——比如4周和12周各算一组统计量模型可以自己学习哪个窗口的参考价值更高。2.3 第三梯队分位数预测与概率需求前面说的所有模型输出的都是一个“期望值”——即未来某个时间点的需求量大概率是多少。但供应链计划偏偏不是围绕期望值来做的它需要回答的是“备多少货能满足95%的服务水平”。期望值预测天然无法回答这个问题。所以到了预测科学这个层面我强烈建议团队把目光从“点预测”转向“概率预测”。具体做法是通过分位数损失函数训练模型比如配合分位数回归损失直接输出预测分布的分位数比如P10、P50、P90。这样一来补货决策端就可以直接拿P90去兜底服务水平拿P50去算平均预期整个预测到优化的链条就通顺了。实现分位数预测并不复杂在现有的梯度提升树框架里只需要把损失函数从均方误差换成分位数损失然后对目标分位数分别训练模型即可。我实际做过对比分位数模型在库存决策里的价值远远高于点预测加残差假设——因为它能捕捉到需求分布的“右偏”特性也就是偶尔爆单带来的厚尾风险这是单纯假设正态分布无法做到的。3. 需求预测与库存优化之间的衔接层模型把预测做出来只是第一步真正产生业务价值的是接下来的决策环节。我见过最多的失败案例是这样的预测团队辛辛苦苦把精度做到行业前列但补货团队和计划团队根本不看预测系统的输出还是按自己的经验拍脑袋——因为预测系统只给了一个数却不告诉他们“应该备多少、留多少安全边际、什么时候下单”。这里的关键在于预测是决策的输入不是决策本身。中间必须有一个优化环节把预测值转换成可执行的库存参数。这个环节做得好不好直接决定了预测系统的实际价值。3.1 从预测误差到安全库存的量化逻辑安全库存的计算公式本身不复杂核心就一句话安全库存 需求波动带来的额外库存用来吸收预测误差和供应波动。经典的公式是[ SS z \times \sqrt{L \times \sigma_D^2 D^2 \times \sigma_L^2} ]其中( z ) 是服务水平对应的标准差倍数95%服务水平约为1.65( L ) 是补货提前期( \sigma_D ) 是需求的波动标准差( D ) 是平均需求( \sigma_L ) 是提前期的波动标准差。这个公式的逻辑用生活中的例子来理解就非常直观了你每天上下班通勤平均耗时30分钟但有时候堵车会拖到45分钟。如果你想保证90%的日子都不迟到你就得把出门时间提前到“平均耗时一段缓冲时间”。安全库存就是这个缓冲时间。但公式本身只是起点实际落地时有两个隐藏问题。第一个问题是公式里用的需求波动应该用“预测误差”而不是“历史销量方差”。因为补货决策是在预测的基础上做的如果预测很准历史再波动的商品也不需要太多安全库存。很多团队用错了口径导致高波动但可预测的商品被过度备货。第二个问题是服务水平不能拍脑袋拍一个公司统一的数要按照SKU的重要程度分级。爆款断货损失的利润和长尾SKU断货完全不是一个量级。3.2 预测结果如何转化为补货参数再订货点与目标库存有了预测值和安全库存就可以推导出两个核心补货参数再订货点Reorder Point当现有库存降到这个水平时触发补货。计算公式是“提前期内的需求期望 安全库存”。目标库存Target Inventory补货的目标水位用于周期性盘点模式下的订货量计算。这两个参数的好处是它们把“预测值”和“库存风险偏好”解耦了。预测模型的输出变化只会影响期望需求部分而服务水平偏好只影响安全库存部分。计划员想要提高服务水平时不需要去改预测模型只需要在参数配置里调高服务水品即可。我做一个项目时甚至不需要预测团队天天看补货系统——预测模型每周自动重跑生成新的期望需求补货参数每个月根据服务水平策略调整一次即可。这套机制一旦运转起来人工干预的成本大幅度下降。3.3 约束条件下的库存优化不只是“备够货”到这一步还算简单真正复杂的是加上业务约束后的优化问题。现实场景里永远有这些约束仓库存储空间有限、资金的占用有上限、供应商有最小起订量、物料有保质期不能一次性囤太多。这些约束的存在让“备多少货”从一个计算问题变成了一个优化问题。我常用的建模方式是把库存补货问题抽象为一个以服务水平为约束、以库存成本最小化为目标或反之的优化问题。目标函数里至少包含三个成本项库存持有成本资金占用、仓储费用、过期损耗缺货成本销售损失、客户流失、加急补货的额外运费订货成本下单处理费用、运输固定费用。这个优化问题在SKU数量上千、约束条件几十条的情况下靠人工经验几乎不可能解出最优解。我们的做法是把问题分解成“垂直分品类”的小规模子问题每个品类单独跑优化求解器。这样做的好处是让解决方案的约束表达足够清晰也方便业务团队逐个品类去验证和调整参数。从预测到补货参数到约束优化这一步做通之后供应链计划就真正走上“数据驱动”了。预测模型的输出不再是报表上的一个数字而是直接变成仓库里的实物库存、采购订单上的具体数量、工厂产线上的排产优先级。4. 实操中很容易翻车的5个隐蔽细节流程和技术框架讲完了接下来这部分是我最想强调的。预测与优化系统从理论设计到真正跑起来中间隔着无数细节很多项目做着做着就死在细节上。我把自己踩过或看别人踩过的坑总结成五条供大家参考。4.1 数据集划分必须按时间维度切不能随机切做机器学习的人习惯把数据集随机切分训练集和测试集但供应链预测绝对不能这么干——时间序列数据随机切分等于未来穿越测试集里混着训练集前后的信息回测精度一定虚高。正确做法是按时间顺序切分比如用前24个月做训练后3个月做验证再往后3个月做测试。更严谨一点还可以用滚动窗口的方式做多轮回测每轮把窗口往后推一段时间模拟长期运行中模型会经历的各种环境变化。4.2 预测层级要跟决策层级对齐供应链里预测可以在多个层级做公司总体、品类、SKU、SKU-仓库组合。不同层级的时间序列特征差很多上层的序列平稳、易预测下层序列稀疏、噪声大。业务上补货是在SKU-仓库粒度做的所以预测如果不做到底层就接不上补货系统。但这里有个巧妙的做法不要直接在底层训练一个独立的预测模型而是采用“自上而下的分解”和“自下而上的汇总”相结合的方式。构建一个预测框架让数据量充足的SKU用自己的历史建模数据量稀疏的SKU则借用上层品类的趋势来分解推断。类似的做法在行业里叫分层预测调和可以显著提升底层预测稳定性。4.3 模型更新频率不能太高也不能太低有些团队把预测系统做成天天自动重跑觉得越频繁越准结果是预测天天变补货计划员根本没法干活——周一刚根据预测调整了订单周三预测又变了采购订单只能跟着反复改。有些团队又走另一个极端模型上线后半年不更新市场早变天了预测还在用旧参数。我的经验是“滚动月度季度校验”比较稳妥模型参数季度更新一次需求数据每周滚动刷新预测结果每周重新生成。这样既保证模型足够灵敏又能维持计划的稳定性。4.4 预测误差要分层审视别只看平均值平均误差指标比如MAPE看着不错但很多商品其实是“旱的旱死涝的涝死”——一部分SKU预测很准一部分SKU预测完全跑偏。如果使用平均指标这两类SKU的误差会互相抵消让你误以为系统整体精度还行。我在项目中从不只看整体MAPE而是做误差分布切片分析按品类看、按销量规模看、按波动率看把误差率超过阈值的SKU单独拉出来复盘。一个健康的预测系统应该是大部分SKU的误差集中在一个较窄的区间内而不是被极少数异常SKU拉高总量。4.5 预测系统的输出要能被“质疑”而不是只能被“接受”这一点纯属组织和流程层面的经验但非常关键。如果预测系统输出一个结果业务团队完全没有能力、没有渠道去挑战它那么系统的精度迟早会劣化——原因是它缺少外部反馈信号来纠正模型的偏差。我给团队做预测系统时会额外做一个“计划员反馈”入口当计划员认为系统预测明显偏离业务预期时可以提交人工调整值和调整理由。每周反馈数据被重新收集起来当作特征或者误差分析的一部分来用。这本质上是让人和模型之间形成闭环而不是让模型卷到天上、业务在地上硬扛。5. 分层预测框架落地案例从一个制造企业的视角来复盘前面讲了很多原则我拿一个实际做过的项目来复盘一下整体落地路径。这个项目对应的是一个中等规模的制造企业产品覆盖3个品类、约2000个SKU、5个区域仓库。由于涉及具体数据不方便公开我就把方案思路和关键步骤讲清楚。5.1 现状与问题诊断项目启动时最直观的问题有三个缺货率在畅销品上达到15%以上同时整体库存周转天数又高出行业平均水平一截。也就是说钱都压在仓库里了但消费者想要的商品反而经常没货。这其实是很多企业的通病——库存结构不合理而不是库存总量不够。诊断下来根因有两个一是预测只在品类层面做没有分解到SKU-仓库粒度导致每个仓库的补货没有参照系二是补货参数全部用固定周期和固定倍数设置没有根据每个SKU的预测误差差异来动态配置安全库存。5.2 方案设计与落地步骤针对上述问题我们分四步做了改造第一步搭建数据底座。把ERP系统的订单数据、WMS系统的发货数据、市场部门的活动日历、供应商的提前期数据统一清洗到一张宽表里按天和按仓库聚合。这一步骤听起来简单实际工作量最大前前后后花了两周才把数据口径统一好。第二步建立分层预测模块。品类层用ETS做基线预测SKU-仓库层用梯度提升树做特征增强预测再用调和法把上下两层结果做一致性修正。分位数预测这次我也一并上了每个SKU输出P10、P50、P90三分位的预测值。第三步重写库存策略模块。把补货参数从“固定公式”升级为“差异化参数”高预测精度SKU削掉一部分安全库存低预测精度SKU补上安全库存服务水平按SKU价值分三档设定。第四步落地运营流程。每周一早上生成预测和补货建议计划员花半天时间审核下午把采购单发给供应商。新的预测系统不再是一个“参考工具”而是正式进入业务流程作为唯一补货依据。5.3 上线后的效果与后续迭代方向经过一个季度对比效果比预想得还要明显畅销品缺货率从15%降到6%左右整体库存周转天数下降了近20%。这两个指标同时改善说明库存结构确实变合理了而不是单纯靠多备货来压低缺货率。后续的迭代方向也很明确一是引入促销耦合预测把活动期间的增量需求单独建模而不是让主模型去猜测促销的影响二是做供应商维度的协同补货把采购提前期的波动也纳入安全库存的计算三是逐步向自动化下单推进把人工审核变成异常审核——只有在预测置信度低或者关键SKU发生大幅偏差时系统才提示人工介入。关于预测置信度的标注我后来还加了一个有意思的优化用分位数预测的区间宽度来标识风险等级。如果某个SKU的P10到P90区间特别宽说明这个SKU的需求不确定性很高系统会自动在补货建议里标注“高不确定性”图标提醒计划员重点关注。这个功能虽然不加一个模型但对团队的决策信心帮助很大——因为你不仅知道预测值还知道这个预测值有多“靠谱”。如果你正在做类似的事我的建议是不要在模型层面追求一步到位先把预测口径洗干净、把预测到补货参数之间的链路打通、把模型评估体系建好这三件事做扎实了无论后面用什么算法都会顺很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑