☰
需求预测与分仓规划:供应链库存效率提升的实战拆解
2026/10/6 3:58:18 网站建设 项目流程

做供应链的人应该都有同感,“需求预测”和“分仓规划”这两件事,放在招聘JD里是两种岗位,落到业务上却是一根绳上的蚂蚱。我在菜鸟体系里接触过不少类似的智能供应链项目,这个标题看起来朴实,实际上把电商物流最核心的库存效率问题全点出来了:货备多少、备在哪、什么时候补过去,这三个问题不解决,后面谈时效、谈体验、谈成本都是空的。

这个项目最值得说的,不是哪个模型多精妙,而是怎么把“预测”和“仓网”这两套逻辑真正咬合在一起。很多团队做预测只交付一个数字,做分仓只拍一个网络拓扑,结果预测报告做得漂漂亮亮,仓库里该缺货还是缺货,该积压还是积压。所以这篇复盘我想从业务定义、预测模型、分仓决策到落地踩坑,把这一整条链路完整拆一遍。适合刚接手供应链计划、数据产品,或者在做仓网优化项目的同学参考,至少能少走几个月弯路。

1. 先把业务问题定义清楚:预测的是销量还是发货量

需求预测看着是数据问题,第一步却往往是业务问题。不把口径定清楚,后面所有模型都是在给错误的目标做拟合。

1.1 预测口径:前台销量、GMV还是出库件数

做电商的人对几个数字应该很熟:前台页面上的销量、交易系统里的GMV、仓库实际发出的件数。这三个数字在某些场景下差别巨大。预售商品可以计入前台销量,但仓库今天根本不出货;用户下单之后退款了,GMV记了一笔,仓里不用拣货;还有拦截、拒收、改地址,每一个异常订单都在制造预测口径的偏差。

在菜鸟这种仓配一体的场景里,需求预测最终是给仓储作业和运输计划用的,所以我建议直接把预测目标定成“可执行出库量”,也就是某个SKU在某个仓库、某一天实际需要拣货并发出的件数。这个口径的好处是和WMS、TMS的执行数据完全对齐,模型预测出来的数字可以直接对接到补货逻辑和产能排班。如果非要看GMV,那只能作为辅助参考,不能作为库存补货的依据。

口径定错会引发一个典型问题:前台销量看着很高,预测模型按历史销量训练,结果仓库库存早就被预售占用,实际可售库存为负,补货单却迟迟没触发。最后消费者等货,运营催仓,数据团队背锅。其实根子就在一开始没把“预测目标”和“执行目标”统一。

我一般在项目启动前会和业务方对齐一个口径表,至少包含四类:订单口径、支付口径、出库口径、签收口径,并且明确每个口径对应哪些状态字段。别看这一步简单,能做到的团队真不多。

1.2 预测粒度:SKU×仓×日,还是类目×区域×周

口径定了,下一个问题是预测的粒度。菜鸟的仓网是典型的区域仓加前置仓布局,订单从哪个仓发,决定了时效和成本。所以预测必须落到“SKU仓日”这个最细粒度,也就是每个SKU在每个仓库每天的出库量。只有到这个粒度,分仓规划才有意义,否则你只知道全国要卖一万件,却不知道这一万件该放杭州仓、广州仓还是成都仓,等于白预测。

但“SKU仓日”粒度听着干净,做起来非常痛。长尾SKU在单仓单日可能只有零星的几单,用任何模型都很难预测准;新品的生命周期只有几周,历史数据不足;大促期间的流量剧变,让日常模型训练出来的参数全部失真。所以我不建议所有SKU都硬上同一个模型,而是分层处理。

实际项目中我的做法是:高周转SKU(日销几十件以上)用细粒度时序模型或机器学习模型,逐仓逐日预测;腰部SKU用类目和区域维度的模型,再做仓内比例拆分;长尾SKU干脆不单独预测,直接合并到类目池里做整体水位管理,配合安全库存兜底。预测的时间窗口一般滚动到14天、30天、90天三个版本,14天给补货,30天给调拨,90天给仓网规划。

这个分层策略看着不智能,但非常实用。因为模型在稀疏数据上强行预测出来的数字,误差大到没法用;与其得到一个好看的“伪精准”结果,不如承认不可预测,用策略去补位。

1.3 需求类型拆解:日常需求、促销需求与新品需求

如果把所有销量混在一起建模,最后得到的是一堆互相污染的参数。日常需求通常平稳,有周期性;促销需求则是脉冲式的,受流量、折扣、库存深度影响;新品需求没有历史数据,完全依赖相似品和流量预测。三者放在一个模型里,模型会非常困惑。

我习惯在特征工程和模型训练阶段就把需求拆开。日常需求用历史同期加趋势季節性建模;促销需求单独看活动因子,比如大促期间的流量倍数、转化率变化、价格弹性;新品需求则用同品类老品做冷启动。尤其是大促的那一波,一定要把活动标识、报名商品、折扣力度作为特征喂进去,否则预测出来的数字会让人怀疑人生。

拆完之后还要合回来。库存补货看的是总需求,所以最后要把基线预测和增量预测相加,而不是在同一个模型里“顺便预测”。这个加法要符合业务节奏,比如大促预热期的预估单量、正式期的爆发量、返场期的回落量,每一段的预测因子都不同。

2. 需求预测的落地路径:模型选型与特征工程

很多同学一上来就聊DeepAR、Transformer、XGBoost,我的建议是先别急着追新。模型选型是一个“从简单到复杂、从粗到细”的演进过程,先用简单模型跑通链路,再逐步替换,否则你连bad case归因都做不清楚。

2.1 先有基线模型,再做差异化模型

任何需求预测项目,第一个里程碑都应该是一个可解释的基线模型。最简单的做法是取过去四周同仓同SKU的日均出库,叠加周几系数、月末效应、节假日参数,形成一个基准预测。这个基线可能不准,但它能帮你检验数据管道、口径、评估体系是否正常。

当基线模型稳定之后,再按SKU分层引入更复杂的模型。在菜鸟这个项目里,我们当时对高周转SKU用的是LightGBM加上时间序列特征,因为树模型对特征交互的拟合能力强,也能自然处理SKU、仓库、活动等类别特征。对部分特爆款,也试过用时序深度学习模型做多步预测,效果没有比LightGBM拉开质的差距,但训练和调参成本高不少。

关于模型我见过一个误区:以为模型越复杂越准。实际上在高波动的电商场景里,误差的主要来源不是模型能力不够,而是数据里掺了太多业务异常。比如某个链接缺货两周,复售后销量反而暴涨,模型如果不知道断货事件,很容易把这两周的低值算进历史均值。这类问题靠特征工程解决,而不是靠换模型。

2.2 特征体系:除了历史销量,还能利用什么

销量预测的特征可以分成几类:历史序列特征、日历特征、业务事件特征、外部环境特征。历史序列特征包括滞后N天的销量、滚动均值、滚动标准差、最近一天销量、周同比等。日历特征包括星期几、是否月初月末、是否节假日、距离最近大促的天数。业务事件特征包括价格、折扣、是否参加活动、库存深度、是否断货恢复。外部环境特征包括天气、热搜指数、流量预估等。

这里我特别想讲两个容易被忽视的特征:库存深度特征和生命周期特征。当可售库存接近零时,销量会被截断,模型看到的“实际销量”是被拍脑袋补货和限购扭曲过的。如果补货跟不上,明明需求很强,历史销量却很低,模型会学到一个错误规律。所以我会把“当天库存是否断货”“断货持续天数”“恢复后第几天”这些字段作为特征引入,让模型学会识别断货影响。生命周期特征则是给每个SKU打一个阶段标签:导入期、成长期、成熟期、衰退期,不同阶段的趋势和方差完全不同,分阶段建模或加对应特征能明显降低预测误差。

特征工程做完之后,一定要做数据版本管理。我见过太多项目,业务方改了一个字段定义,第二天模型输出全变了,排查半天才发现是上游表结构变了。预测链路越长,越需要固化特征生产流程,给每个模型的输入输出打上版本号。

2.3 模型评价与纠偏:别只盯着MAPE

预测模型常用的指标有WAPE、MAPE、RMSE和Bias。很多人喜欢看MAPE,但这个指标对低销量SKU特别不友好。一个日销1件的SKU,预测错了1件,MAPE就是100%;一个日销1000件的SKU,预测错了50件,MAPE只有5%。如果直接按所有SKU的MAPE求平均,长尾 SKU 会把整体指标拉得很差,但业务上它只影响一两件货,根本不需要精细预测。

我建议评价指标分两层:一层用WAPE看整体加权误差,公式是绝对误差和除以实际值之和;一层用Bias看系统性偏差,公式是(预测值之和减去实际值之和)除以实际值之和。Bias比MAPE更贴近库存决策,因为正的Bias意味着整体高估,会导致库存积压;负的Bias意味着整体低估,会导致缺货。库存计划里,我们甚至可以主动设定目标Bias,比如爆款SKU的Bias略微为正,保证现货率;普通SKU的Bias尽量接近零,控制周转。

模型上线不等于工作结束,还需要建立滚动回测机制。每周用历史数据重放一遍模型,看最近四到八周的预测误差是否在容忍范围内,一旦误差连续恶化,马上排查原因。排查时先看数据管道是否异常,再看业务事件是否没有被识别,最后才怀疑模型参数需要重训。

3. 分仓规划怎么做:从预测结果到仓网布局

需求预测只回答“要备多少货”,分仓规划回答“货放在哪里”。这两个问题必须串联起来看,否则很容易出现全国库存量看着充足,但区域间调配不动、时效达不到的尴尬局面。

3.1 分仓的本质:把正确数量的货放到正确的仓

不同地区的消费者购买偏好差别很大,同一个SKU在江浙沪可能是日销上千的爆款,在西北可能一周才卖几件。分仓规划的第一步,就是把第一节算出的预测值按仓域拆解,得到每个SKU在每个区域的需求分布。这一步做不好,后面全是空中楼阁。

拆解的方法有两种:一种是先做全国性预测,再按历史占比拆分到仓;另一种是直接在每个仓维度做独立预测。前一种实现简单,但拆出来的数字很容易在低销量SKU上失真。后一种更准,但需要每个SKU在每个仓都有足够的历史样本。我实际用的混合方案是:高销量SKU用仓级预测,中低销量SKU用区域预测并叠加仓域吸收系数。所谓吸收系数,就是根据收货地址聚类,算出每个仓可以覆盖哪些区域的订单,再把区域需求映射到仓。

分仓规划还要考虑一个“风险共担”效应。把库存集中在一个大仓,虽然时效变差,但总安全库存可以降低;把库存分散到多个前置仓,时效好、覆盖广,但每个仓都要备一份安全库存,总库存就会上升。这个权衡在SKU层面差异很大:高价值、长尾、需求波动大的商品,适合集中存放;低价值、高频、竞争激烈的商品,适合前置铺货。这就是分仓里最经典的ABC分类逻辑。

3.2 分仓数量与布点:不是越多越好

很多业务方会有个直觉:仓越多,时效越好,客户体验越好。但仓越多,租金和运营成本越高,更关键的是,每个仓都要放库存,一旦需求波动,某仓缺货、某仓积压的概率也在增加。所以分仓数量本质上是成本、时效、库存三者的一个权衡问题。

在做布点规划时,我习惯先拿历史订单数据做发货地址聚类,找到几个候选城市。然后把这些候选仓组合成不同方案,比如全国3仓、5仓、8仓、12仓,跑一遍仿真:把真实历史和预测数据灌进去,按不同仓储成本和运输时效计算履约率、现货率、库存周转和总成本。最后不是选成本最低的方案,也不是选时效最好的方案,而是选一个“时效满足业务底线、总成本最优”的平衡点。

以一个简化案例来说:全国单仓方案库存周转天数大约25天,但次日达覆盖率只有20%;五仓方案库存周转天数上升至32天,次日达覆盖率能达到60%;八仓方案次日达覆盖率进一步到75%,但库存周转天数到了40天,且部分前置仓日均单量太低,仓储人工成本明显增加,投资回报率已经下降。这时候需要管理层拍板,是用成本换体验,还是用体验换效率。预测数据和仿真结果在这中间是拍板依据,不是替代决策。

3.3 补货与调拨:让预测结果真正进入库存决策

分仓布局定下来之后,日常运转靠补货和调拨。补货计划的核心公式不复杂:净需求 = 预测未来N天需求量 - 当前可售库存 - 在途库存 + 目标安全库存。这里的N就是补货提前期,包括采购周期、运输时间、入库上架时间。预测越准,安全库存就可以定得越低。

安全库存的计算不能只看均值,还要看需求波动和提前期波动。常用的安全库存公式是SS = Z × σ_dlt,其中Z是服务水平对应的标准正态分位数,σ_dlt是提前期内需求的标准差。如果需求不稳定,还要在前面的公式里考虑预测误差的分布,而不是只依赖历史均值。我在实际项目中会把预测模型的Bias作为系数校准安全库存:模型系统性偏低时,安全库存自动加高;模型偏移校正后,再调回正常水平。

仓间调拨则是在静态分仓之后做的动态兜底。当某个仓的库存水位低于未来两周预测需求,且另一个仓有充足库存时,系统生成调拨建议。调拨触发不能只看单一库存阈值,要结合剩余可售天数、调拨提前期、干线运输成本、断货风险综合判断。比如某仓剩余可售天数只有3天,从其他仓调拨需要5天,那直接调拨就来不及,这个仓应该立即触发紧急补货或对消费者展示预售/延期。这些逻辑如果不在系统里固化成规则,分仓规划就永远停留在PPT层面,落不了地。

4. 实操中掉过的坑和排查方法

再好的方案,上线过程中总会遇到一堆意外。下面这几个坑是我在菜鸟这类供应链项目里反复遇到的,写出来给大家排雷。

4.1 预测不准,可能是数据口径先出了问题

有个让我印象很深的case:某个类目的预测误差从10%突然飙到30%,模型代码没人动过,训练数据也没异常。排查到最后发现,上游订单表里新增了一个“多仓拆单”逻辑:一个订单如果跨仓发货,拆成多个子订单,订单表的行数变多,导致历史“订单量”和“出库量”的关系被打破。而模型训练时用的是订单口径,执行端用的是出库口径,两边没有对齐。

这种问题在大型供应链系统里非常常见,最有效的排查方式是先画数据血缘图,明确每个字段从哪个业务系统来、经过哪些清洗、变成什么口径。然后每天跑一个一致性校验:订单量、支付量、出库量、签收量之间的逻辑差异是否在合理范围。只要校验不通过,测试环境里的预测模型就不放量,先把数据问题解决再谈精度。

4.2 全国预测很准,拆到仓就崩了

这是分仓规划最常见的痛点。全国口径的WAPE只有12%,看起来很不错,但拆到仓级之后,很多仓的误差超过40%。原因是各地需求结构不同,全国模型拟合的是平均规律,拆仓占比一波动,预测误差就跟着放大。

解决思路有两个。一是高销量SKU坚持仓级建模,不要让占比拆分去做颗粒度转译;二是对低销量SKU不要硬拆到仓,而是采用“大区池+仓内比例”的方式,用策略兜底。另一个是可以通过仓间调拨来吸收误差:即使仓级预测不准,只要大区总库存合理,调拨可以缓解局部缺货。前提是调拨频率和时效得跟上,否则预测误差会直接转化成缺货或积压。

4.3 新品和大促是没有历史数据的“双重灾区”

做预测最怕遇到没有历史规律的东西,新品和大促就是典型。新品上线没有历史销量,我的冷启动方法是找同类目、同价格带、同流量层级的老品作为参考,再根据新品近期流量趋势和转化率做缩放。也可以在模型里加入“新品年龄”特征,让模型自己学习一个生命周期曲线。大促就更难了,因为每次活动机制、流量渠道、参与商品都不一样。

对于大促预测,我一般会和运营团队提前对齐三件事:整体流量目标、折扣计划和库存深度约束。然后基于这几个输入做情景预测,给出悲观、中性、乐观三版需求。这样业务方可以根据大促实际进度,在D-7、D-3、D-1三个节点不断刷新预测数值,而不是拍死一个数字不动。这个“滚动刷新”机制,比把模型调到多精确都管用。

最后再说一个个人体会。需求预测与分仓规划这类项目,真正难的不是算法,而是让业务团队信任你的输出。我刚做项目的时候,总想着优化模型指标,后来发现业务方不关心WAPE从12%降到11%,他们关心的是:你为什么说这个品下周会缺货?备货依据是什么?如果预测结果不能给出可解释性的提示,业务方最终还是会凭经验拍脑袋,系统再准也推不动。所以我后来都会在预测报表里额外输出“预测原因摘要”:本周销量上涨是因为活动因素、季节因素还是历史趋势。这种解释能力,才是预测模型能被业务接受的关键。这个经验,比任何模型参数都值钱。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询