先说结论:九成是数据问题。
这话不是我拍脑袋。二十年里,我看过太多仓库花大价钱上 AI 需求预测,模型上线三个月,补货还是靠老师傅拍脑袋。每次复盘,IT 部门的第一反应都是"模型不行,换个算法"。我的反应永远是:先别动模型,把喂给它的数据拎出来晒一晒——十有八九,问题全在那儿。
模型这东西,说白了就是个很会找规律的学生。你给它的课本缺页、错字连篇,它考不好,真不能怪它。
一、数据全不全:先查主数据有没有"裸奔"
很多预测项目死在第一步:SKU 主数据不全。
我前几年去过一家加州安大略的 3PL 仓,十几万平方英尺,SKU 两万多个,上了一套带机器学习的补货预测。上线半年,准确率惨不忍睹。一查,SKU 主数据里"品类""季节性""替代关系"这几个字段,空了一大半。新品上市三个月,系统里连它属于哪个品类都没标——模型拿什么学?拿空气学。
更常见的是属性打标混乱:同一款商品,A 仓库叫"冬季款",B 仓库叫"Winter-2023",C 仓库干脆没填。模型看到的是三个不同的东西,规律自然学岔。
查法很直接:随机抽 200 个 SKU,看品类、季节性标签、生命周期状态、替代/互补关系这几个字段,空值比例超过两成,先别谈模型,把主数据治理做了。这是脏活累活,但不做,后面全是白搭。
二、口径对不对:历史销量里掺了多少"假需求"
这是我见过最坑的一类。模型学的"历史销量",根本不是真实需求。
一个经典场景:某 SKU 去年 11 月断货两周,系统记录的销量是 0。模型学到的是"这个 SKU 11 月没人要",今年 11 月直接少备货——结果今年不断货,需求正常,直接卖空。断货期间的 0,不是需求,是供给能力的上限。你把天花板当成了地板,模型能准才怪。
另一个:仓库之间的调拨。A 仓缺货,从 B 仓调了 500 件,B 仓的出库记录里多了 500 件"销量"。模型一看,B 仓这个 SKU 需求旺盛,多备点吧——备的全是调拨出去的假需求。真实需求和内部调拨混在一个口径里,预测不偏才怪。

还有退货。电商仓退货率高,净销量和毛销量能差出一大截。用毛销量训练,模型永远高估。
查法:找你们数据口径的定义文档,问三个问题——断货期的销量怎么处理(补没补真实需求估计)?调拨出库剔没剔除?用的是净销量还是毛销量?答不上来或者"没处理过",病根就找到了。口径不清,模型越"智能",错得越离谱。
顺带说一句:很多仓库的销量数据是从 ERP 里直接导的,ERP 的出库单根本不区分"卖给客户"和"调给兄弟仓"。这一层清洗没人做,模型就天天在学假需求。我一般会让数据团队先跑一条 SQL,把过去一年的出库按"销售出库/调拨出库/报废出库"拆开,光这一步,就能让不少 SKU 的"历史需求"缩水两三成——缩掉的那部分,全是噪声。
三、事件打过标吗:促销和季节,模型看不见
需求预测最怕"无缘无故的 spike"。去年某个月销量突然翻倍,模型记住了这个规律,今年同期也备了双倍的货——结果去年那是做了一场大促,今年没做,货全砸手里。
促销、清仓、KOL 带货、天气异常、竞品缺货,这些事件不打标,模型只能把它们当成"自然需求"学进去。学进去的不是规律,是噪声。
我见过最离谱的一家:历史数据里混着三年疫情期间的囤货潮数据,没做任何标记。模型把那几年的异常峰值当成基准线,日常备货常年偏高,呆滞库存堆了两个巷道。后来把那段时间单独标记、降权处理,预测才回到正常。
事件打标还有个容易被忽略的维度:供给侧的事件。供应商延期交货、海运罢工导致到货推迟三周,这些都会让销量曲线出现"无缘无故"的坑。模型看不懂"货没到所以卖不动",它只会学到"这个 SKU 那个月没人要"。所以事件日历不能只记促销,得把大额断供、到货异常也记进去,两边一起标,数据才完整。
查法:拉出历史上销量波动最大的十个 SKU-月份,问业务方"当时发生了什么"。如果一半以上答得上来、但系统里没有任何标记,说明你们的事件日历是空的。补事件标签这件事,业务部门十分钟能讲明白,数据团队可能要花两周落地——但值得。
四、什么时候,才轮到怀疑模型
数据三关都过了——主数据齐了、口径干净了、事件打标了——预测还是不准,这时候再谈模型,我举双手赞成。
模型问题的真正信号长这样:数据已经收拾干净,简单模型和复杂模型效果差不多,甚至简单模型还略好;或者需求分布发生了结构性变化,比如业务从批发转零售、从线下转线上,老模型学的是旧世界的规律。
还有一种:特征工程没跟上。比如只喂了销量序列,没喂价格、库存水位、lead time 这些业务强相关的特征。这与其说是"模型选错了",不如说是"建模的人不懂业务"。换算法没用,换懂仓库的人有用。
我自己的经验是,仓库需求预测这个场景,特征比算法值钱得多。一个懂补货逻辑的人加上线性回归,往往打得过不懂业务的人调出来的复杂模型。因为仓库的需求驱动因素其实很具体:促销日历、在手订单、季节性、供应商交期波动。把这些变成特征喂进去,比换模型架构实在得多。
我的判断标准很简单:同一份干净数据,换三个模型效果都差不多,说明瓶颈不在模型;在脏数据上折腾模型选型,纯属内耗。
一份能直接用的数据准备清单
排查完,动手收拾。按这个顺序来,别跳步:
- 主数据:SKU 的品类、季节性、生命周期、替代关系字段,空值率压到 5% 以内
- 口径:断货期销量做需求还原(至少标记出来),调拨出库剔除,用净销量训练
- 事件:建一张事件日历表,促销、清仓、异常天气、大客户一次性订单全部打标
- 粒度:预测粒度(SKU-仓库-周)和补货决策粒度对齐,粒度错了,准了也没用
- 回测:用干净数据做三个月回测,误差分布先看明白,再谈上线
这五件事做完,大部分仓库会发现:原来的模型突然"变聪明"了。其实它一直不笨,只是之前一直在读一本错字连篇的课本。
最后留个自测问题:你们现在喂给预测模型的历史销量里,能分清哪一行是真实需求、哪一行是断货、哪一行是调拨吗? 如果分不清,别急着换模型,先把这三类数据拆开。这个问题想明白了,预测不准的谜团,基本就解开了一大半。







