时序数据落地供应链,我踩过的坑和最终跑通的方案
电商大促、原材料涨价、客户订单朝令夕改,这些场景背后其实都是同一个问题:供应链永远在跟时间和不确定性赛跑。我做供应链数据这块差不多六年,从最早用Excel拉历史均值做预测,到后来搭了一套基于时序分析的预测调度体系,中间走过不少弯路。这篇文章就把这套东西的完整思路、关键细节、实操过程以及我踩过的坑全部捋一遍,给正在琢磨“大数据+时序分析+供应链”这个方向的同行一个可参考的样本。文章里不会讲太多学院派公式,重点是怎么把理论落地到实际业务里,怎么让一线的计划员愿意用、敢用、用得顺手。
1. 整体设计与思路拆解
1.1 很多供应链项目死在第一步:把问题想简单了
拿到“用时序分析优化供应链”这个题目,第一反应往往是“找个时序模型预测未来销量”。但真正在业务里跑过的人都知道,预测只是整个链条里的一个环节,后面还跟着库存策略、补货节奏、产能排布、物流调度一整套东西。如果只盯着预测准确率,哪怕模型做到99%的精度,采购和计划那边照样可能不买账。
我在项目启动前做过一次业务摸底,发现供应链计划员每天的日常工作是这样的:从系统里导出最近三年的历史销量,人工剔除促销、缺货、退货这些异常值,然后按品类和区域分别做趋势外推,再凭经验乘以一个安全系数,最终形成下个月的采购建议。这个流程最大的问题不是“不科学”,而是太依赖个人经验——老计划员和新计划员的判断能差出30%以上。而且一旦遇到大促、新品上市、供应商断货这些特殊情况,Excel表格里的公式根本没法快速响应。
所以我的整体设计思路分成了三层:
- 第一层是数据底座,把散落在ERP、WMS、TMS各个系统里的历史订单、库存、物流数据打通,形成统一的分析宽表;
- 第二层是分析引擎,基于时序分析方法做需求预测、异常检测、安全库存计算;
- 第三层是决策应用,把分析结果推送到补货建议、库存预警、产能规划这些具体业务动作上。
这个分层设计的好处在于,每一层都可以独立迭代。数据底座不完善的时候,分析引擎可以先基于部分数据跑起来验证效果;分析引擎的模型不够好的时候,决策应用层还可以靠人工规则兜底。这样业务方不会因为某一个环节卡住就完全推不动。
1.2 时序分析在供应链里的四个典型角色
时序分析在供应链管理里不是一种单一技术,它实际上承担了四个完全不同的角色。把这四个角色分清楚,项目范围也就定了。
第一个是需求预测。这是最核心也是大家最熟悉的应用,用历史销售数据预测未来一段时间的需求量,直接决定采购计划和库存水位。常用的模型有Holt-Winters指数平滑、ARIMA、Prophet,以及基于机器学习的XGBoost、LightGBM等。
第二个是异常检测。供应链数据里很多问题不是靠预测发现的,而是靠“数据突然不听话了”发现的。比如某区域订单量突然暴跌,可能是因为系统接口故障导致数据没传上来,也可能是因为竞品促销导致真实下滑。时序异常检测通过分析历史波动的正常范围,能自动标出这些偏离点,让运营人员第一时间介入排查。
第三个是安全库存计算。传统做法是给每个SKU设一个固定天数或固定数量的缓冲库存,但这种一刀切的做法要么造成呆滞,要么造成缺货。基于时序分析,可以算出需求在提前期内的波动范围,再结合服务水平要求动态计算安全库存。
第四个是补货节奏优化。补货频率太高,物流成本和订单处理成本上升;补货频率太低,库存积压风险和资金占用增加。时序分析可以通过对需求趋势和季节性的判断,给出每个SKU最优的补货周期建议。
我见过很多项目号称上了时序分析,实际上就只做了第一个角色——需求预测。预测做完,PPT汇报完,后面三个角色根本没有落地。结果业务方用了一阵子发现,预测挺准的,但库存问题一点没解决,因为没人把预测结果转化成补货动作。所以项目设计阶段一定要跟业务方对齐:到底要解决什么问题,是整个供应链的库存优化,还是某一个品类的预测提升。范围不清,后面全是坑。
1.3 技术选型:为什么我没有一开始就上LSTM和Transformer
时序预测的模型选择是个热门话题,尤其是这几年深度学习在时序领域的论文一篇接一篇。但我在这个项目里,主力模型选的是Prophet + LightGBM的混合方案,再加上一套基于STL分解的兜底逻辑。选型逻辑是这么考虑的:
第一,供应链场景的样本量并没有想象中那么大。一个中等规模的制造企业,核心SKU通常也就几千个,每个SKU三五年日度数据,总量也就百万级。这个量级下,深度学习相比梯度提升树并没有明显优势,反而训练和调参成本更高。
第二,供应链数据有很强的业务规则性。比如节假日效应、促销效应、新品替代效应,这些信息光靠模型自己学很难学准,需要人工特征工程来注入。LightGBM这类树模型对特征工程非常友好,可以方便地加入节假日、促销、天气、价格变化这些外生变量。
第三,可解释性要求。计划员问“为什么这个月预测这么高”,如果回答是“神经网络算出来的”,业务方很难接受。但如果是Prophet分解出来的趋势项和季节项,或者LightGBM特征重要性排序里“上个月大促”排在前三位,业务方就很容易理解。
我不反对深度学习,事实上我在项目后期也试过用LSTM做部分长尾SKU的预测,效果并不差。但对于一个需要快速落地、业务方深度参与的项目,先跑通经典方案,再逐步引入更复杂的模型,这个路径更稳。技术选型不是炫技,是要为业务结果负责的。
2. 核心细节解析与实操要点
2.1 数据质量管理:时序分析里的“垃圾进垃圾出”
时序分析最容易被忽略但又最致命的问题,不是模型精度,而是数据质量。我接手这个项目时,光是清洗数据就花了接近三周时间,占整个项目周期的三分之一还多。总结下来,供应链时序数据有四大典型问题:
第一是历史数据口径不一致。同一个SKU,2021年在ERP里的单位是“箱”,2022年换成了“个”,中间没有做换算,预测模型直接把数量级差了几十倍的数据当成一条平滑曲线去拟合。这种问题在数据仓库里靠字段名根本发现不了,必须结合业务实际情况做单位校验。
第二是促销数据混在常态数据里。618、双十一、双十二的销量可能是平时的5到10倍,如果不把促销标记出来单独建模,模型会把促销效应平均分摊到全年,导致日常预测偏高,大促预测又偏低。我的做法是专门建一张促销日历表,把每次促销的时间范围、力度、覆盖品类都记录下来,作为建模的特征输入。
第三是缺货期间的需求被低估。产品断货了两周,这两周的销量是0,但真实需求可能很高,只是消费者买不到就流失了。直接用历史销量做预测,会把缺货期的低销量当成了需求下降,导致后续补货不足。处理方式是对缺货期间的数据做标记,在建模时选择忽略,或者用插值方法补一个估计值。
第四是新品和淘汰品没有历史数据。新品上架只有几周数据,淘汰品即将退市,这两类SKU用常规时序模型都没法处理。我的做法是把SKU分成“成熟品”、“新品”、“淘汰品”、“长尾品”四类,每一类用不同的预测策略。成熟品用完整时序模型,新品用同类老品的曲线做缩放,淘汰品直接按清仓计划来,长尾品用简单均值加上人工审核。
数据清洗这块我给团队定了一个铁律:所有清洗规则必须落成代码脚本和文档,不允许用Excel手工改数。理由很简单,手工改数在项目复盘时根本说不清楚当时为什么这么改,而代码脚本可以让每一次数据变换都有迹可循,可审计、可回溯、可复用。
2.2 特征工程:让模型理解供应链的语言
时序模型不是简单地喂一堆历史数据就完事,真正决定预测上限的往往是特征工程。我在这个项目里把特征分成了四类:
第一类是时间特征。包括年、月、日、星期几、是否月初月末、第几周、是否季度末。这类特征看似基础,但对捕捉供应链的周期性节奏非常关键。比如说采购计划通常是按月滚动,月末订单量天然偏高;某些B2B业务季度末会有集中开票冲量;日化快消品周末销量明显高于工作日。这些规律模型不会自己学会,必须通过特征告诉它。
第二类是历史统计特征。包括滞后7天、14天、30天、90天的销量,以及这些时间窗口内的均值、标准差、最大值、最小值、环比变化率。这类特征本质上是给模型提供“最近一段时间表现如何”的背景信息。我在实践中的一个经验是,滞后窗口的选择要跟业务节奏匹配:如果补货提前期是45天,那滞后45天这个特征就比滞后30天更有指导意义,因为今天做的预测目标,正好对应着45天前的订单和库存决策。
第三类是外部事件特征。包括节假日(春节、国庆、双11、618)、天气异常(暴雨、高温)、疫情封控、原材料涨价公告等。这些事件对需求的影响往往是脉冲式的,数据量也不够,模型很难自己学出来,必须做成显式的0/1特征。我见过一个案例,某饮品公司在预测时完全没考虑天气因素,结果当年夏天连续高温,实际销量比预测高出40%,直接导致全线缺货。
第四类是交叉特征和业务约束。比如在库天数、现有库存、在途库存、供应商交期、MOQ(最小起订量)等。这些特征的意义在于让模型知道“当前还有多少货能卖”、“下一次补货最快什么时候到”。一个需求预测很高的SKU,如果库房里还有大量库存,实际的补货建议可能就是0。这类约束特征的加入,让预测结果真正变成了可以指导行动的业务信号。
2.3 模型评估:不只盯着准确率看
模型评估这个环节,很多人习惯性地用MAPE(平均绝对百分比误差)来衡量好不好。但我在实际项目里发现,单一指标非常容易误导决策。特别典型的一个问题是:MAPE在销量大的SKU上几乎一定表现好,在销量小的SKU上几乎一定表现差,但这并不代表大SKU更容易预测,只是百分比误差对小基数天然敏感。
我的做法是建立一个多维度的评估体系:
- 第一看整体MAPE和WAPE(加权绝对百分比误差),用来对比模型好坏和上线前后的变化;
- 第二按SKU分层看误差分布,区分高销量、中销量、低销量三个层级各自的预测表现;
- 第三看趋势方向准确率,也就是预测值跟实际值不仅数值要接近,变化方向也得一致。有时候预测只差5%,但方向反了,备货节奏就完全错了;
- 第四看超额库存和缺货损失的模拟结果,这是业务方最关心的。用历史数据回测,对比“用模型结果做补货”和“按原计划补货”在库存周转天数和缺货率上的差异。
这里尤其要提一下趋势方向准确率。供应链管理里,预测数值偏差5%是可以接受的,但如果该备货的时候预测成下降、该收缩的时候预测成增长,那就是系统性错误。我在上线后的复盘里发现,某些SKU的MAPE看起来还不错,但方向准确率只有60%左右,实际上给采购和计划带来的困扰非常大。后来在特征里加入了“最近7天环比是增是减”这类方向性特征,方向准确率才提升到75%以上。
3. 实操过程与核心环节实现
3.1 数据平台的落地:从多套系统到一张宽表
项目的第一阶段是数据打通。我面临的现实是:ERP、WMS、TMS、OMS四个系统各自维护一套数据,编码规则不统一、时间字段不统一、状态定义不统一。比如订单状态,ERP里叫“已发货”,WMS里叫“出库完成”,OMS里叫“配送中”,其实说的是同一个业务动作,但字段值就是不一样。
打通的核心工作分三步:
第一步,建立主数据映射表。把四个系统里的物料编码、客户编码、仓库编码全部映射到一个统一的维度表里。这个过程没有技术含量,但极其耗时,需要业务人员全程参与核对。
第二步,构建统一的事实表。把订单、出库、库存、采购到货等事实数据统一到“SKU+仓库+日期”这个粒度上。这里有一个关键决策:事实表的粒度定多细,决定了后面分析的灵活性。我选的是SKU+仓库+日的粒度,日度以上可以聚合到周、月,SKU以上可以聚合到品类、品牌。如果粒度一开始就定在品类+月,后面很多分析就做不了了。
第三步,建立数据质量监控。每批次数据入库后,自动检查记录数波动、缺失率、极值、单位一致性,超过阈值就告警。这个机制保证了后面模型吃进去的数据是可靠的。
技术栈方面,离线分析用Spark SQL做ETL,结果存储用ClickHouse,日常分析和报表用Superset。选ClickHouse而不是MySQL的原因很简单:供应链分析经常涉及对几十个SKU按时间跨三年的数据进行聚合计算,MySQL这种行存储在这种场景下性能会很难看,ClickHouse的列式存储在时序聚合上的性能优势非常明显,几亿行的表做分组聚合也就秒级响应。
3.2 Prophet和LightGBM的混合预测流程
模型这块,我的核心流程是分阶段跑的,整个pipeline用Python实现,由Airflow调度。这里把主干逻辑讲一下。
第一阶段:数据准备。先取出宽表数据,按SKU+仓库维度做切分。每个切片只保留连续至少24个月有稳定销量的记录,不足24个月的历史统一归到“短历史SKU”另行处理。
第二阶段:Prophet粗预测。对每个SKU+仓库切片,跑一轮Prophet。之所以先用Prophet,是因为它对趋势和季节性的分解能力很强,能帮我们快速建立基线。我把Prophet结果的趋势项、周季节性、年季节性都保留下来,这些分解项本身就是有价值的业务信息——趋势项告诉计划员这个品是在涨还是在跌,年季节性告诉计划员哪个时段是旺季。
第三阶段:LightGBM精修。把Prophet的预测值、分解出来的趋势项和季节项,加上前面提到的时间特征、历史统计特征、外部事件特征,一起拼成特征矩阵,输入LightGBM做残差学习。通俗地说,就是让LightGBM去学Prophet预测值和实际值之间还差的那部分规律。这种Stacking的做法比只用单一模型效果要好,因为Prophet擅长抓长周期规律,LightGBM擅长利用丰富的外生特征,两者是互补的。
第四阶段:结果融合与人工规则修正。LightGBM输出最终预测后,还有几道规则兜底:新品SKU不能直接用模型结果,要用同品牌老品的成长曲线做系数缩放;预测值不能低于历史最低值的某个百分比,防止模型给出脱离实际的极端值;有在途大额采购订单的SKU,预测值需要叠加已确定的订单信息。
每个阶段的输出都会有日志记录,方便回溯“这个预测值是怎么算出来的”。这个可解释性在日常运营中太重要了,业务方不可能接受一个黑盒。
超参数是我比较在意的部分。LightGBM的核心参数我调了几轮,最终留下了一组相对稳定的配置:叶子节点数设在31到63之间,学习率0.05,特征采样比例0.8,样本采样比例0.8,L1正则0.1,L2正则0.5。针对几千个SKU分别调参是不现实的,我采用的方法是按SKU的销量层级分成几组,每组用同一套参数,然后通过早停(early stopping)控制树的数量避免过拟合。
模型训练的时间成本可控,全量SKU一轮训练在Spark集群上大概20分钟。这个速度保证了我们可以每天凌晨定时跑一次预测,计划员早上上班打开看板看到的都是最新的结果。
3.3 实时监控与调度:预测不更新,等于没预测
预测模型上线后,我遇到的一个新问题是:模型是每天跑的,但业务是实时的,尤其是仓库里的库存随时在变。预测结果出来了,但补货建议要不要跟着实时变化?如果每天只更新一次,那当天下午突然来了一笔大订单,库存骤降,系统里的安全库存预警还停留在早上,这就失去了意义。
我的解法是搭建了一个轻量的Lambda架构。批处理链路每天凌晨跑全量预测,流处理链路用Flink实时监听订单和库存变动事件。当某个SKU的可用库存低于安全库存阈值时,实时链路立刻触发补货提醒,同时把当天的预测值做一次增量修正。
这套架构看起来不复杂,但实际部署时有不少细节。Flink的检查点间隔、状态后端选择、事件时间和水位线的设置,每个参数都影响了实时计算的准确性。我当时在设计实时部分时保守了一些,只是在批处理结果之上做规则型修正,并没有把实时数据直接灌进模型重新训练。这样做的原因是,流式环境下做时序模型推理的复杂度会高很多,而且前期收益不明显。先把场景跑通,再考虑更复杂的实时建模,这是比较务实的路径。
3.4 与业务系统的集成:从看板到决策动作
时序分析最终要落实到业务动作上,我用三个出口来交付:可视化看板、周报推送、补货任务流。
可视化看板用Superset搭建,核心页面包括三块:全品类预测概览(展示未来四周的预测总需求和同比变化)、单品预测明细(可下钻查看每个SKU的预测曲线、历史实际值、模型置信区间)、异常预警列表(自动列出预测波动超过阈值或库存低于安全线的SKU)。
周报推送是给管理层的,自动生成一份PDF格式的供应链预测周报,包含本周预测总结、关键品类趋势变化、下月节假日影响提醒、异常事件汇总。
补货任务流是跟业务系统集成的关键环节。预测结果和补货建议通过API推送到采购系统,生成草稿状态的采购申请单。计划员只需要审核或修改,不需要从零创建,这样既减少了手工操作,又保留了人的关键决策权。这里我一定要强调:不要追求全自动下单。供应链里总有模型看不到的信息,比如供应商关系、付款条件、客户特殊要求,这些需要人来把关。系统的定位应该是辅助决策,不是替代决策。
3.5 一个具体的案例:某食品企业华南仓的落地过程
理论讲了一堆,拿个具体案例串一遍。某食品企业主要做休闲零食,SKU数量4000多个,其中活跃SKU大约1500个,覆盖华南、华东、华北三个大区,每个大区一个中心仓。
项目启动时最痛的点是华南仓。这个仓覆盖的区域消费力强、销售渠道分散,既有KA卖场,也有大量电商分销,需求波动非常大。历史缺货率长期在15%左右,而缺货的后果不是等两天补货就行,很多终端门店一旦缺货就会把货架让给竞品,过后很难抢回来。
我们的方案分为三步:
第一步,仅针对华南仓做数据专项。把整个SKU集合按“销量贡献度”和“需求波动系数”两个维度分成四个象限。高销量低波动的SKU最容易优化,直接用模型预测加动态安全库存;高销量高波动的SKU是重点攻关对象,需要做细致的特征工程,把促销、渠道活动全部纳入;低销量的SKU不追求预测精度,采用水位补货法保证不断货即可。
第二步,模型上线试运行一个月。在平行运行期间,系统每天输出预测值和补货建议,但计划员仍然按原方式做决策。月底复盘时对比数据:如果按系统的建议执行,缺货率能从15%降到8%左右,库存周转天数能缩短4天。这个结果给了业务方信心,决定切换到系统建议。
第三步,切换后连续监控三周。前两周缺货率确实降到了8%附近,但第三周遇到了一次突发促销活动,某单品销量暴涨,系统预测没来得及反应。这次事件推动我们完善了“补货申请人工加急”的响应机制——系统预测不是万能的,关键时候要给人留出快速干预的通道。
最终华南仓的缺货率稳定在9%左右,库存周转天数从42天降到35天。数字不算惊艳,但考虑到零食行业的特殊性(口味变化快、渠道复杂、大促频繁),这个改善已经相当可观了。
4. 常见问题与排查技巧实录
运行这套系统大半年,几乎每周都会遇到新问题。我把最典型的几个整理成了一份速查表,也写一下我实际排查的思路,供大家参考。
4.1 预测值出现明显异常跳变,怎么定位原因?
有一次某个SKU的周预测值突然比上周翻了3倍,业务方第一时间来问是不是系统坏了。我的排查步骤是这样的:先看特征数据,发现该SKU对应的“是否大促日”特征变成了1。查了促销日历,原来运营团队临时在某个电商平台报了一场大促活动,但并未同步给供应链团队。预测值飙升的根因是促销特征生效了,模型认为有促销就一定会放量,但实际备货根本来不及。
从此以后我们定了一个规则:促销日历由运营和供应链双人确认,任何一方没有确认标记,模型不会将促销特征置为1。同时,模型对“预测值环比变化超过200%”的SKU自动触发人工审核,宁可让计划员多看一眼,也不能让异常值直接进补货单。
4.2 节假日效应模型学不准,怎么办?
公历节假日如元旦、国庆,模型可以通过年份特征学出来。但农历节日(春节、端午、中秋)每年对应的公历日期都不同,且影响会提前一到两周显现(节前备货效应),只用年月日特征根本学不准。
我的解法是单独构造一个“距离春节天数”的数值特征,比如-30代表春节前30天,0代表春节当天,+15代表春节后15天。这样模型就能学会“春节前两周需求开始上升,节后一周回落”这种更复杂的规律。其他农历节日同理。
这个方法在第一版上线时并没有,是春节复盘后加进去的。当时春节前两周的预测误差非常大,我对比了模型输入特征才意识到,模型根本不知道农历春节快来了。加入这个特征后,节假日期间的预测误差平均降低了20%以上。
4.3 数据口径不统一导致预测偶发偏差,怎么从根上解决?
有一类问题是时序数据特有的,它在整体指标上不一定会暴露,但会突然影响某个SKU。比如某供应商换了包装规格,把以前一箱24瓶改成了一箱20瓶,但系统里的单位没有及时更新,导致最近一周的“箱数”销量突然下跌20%,模型把这个下跌当成了需求趋势下滑。
这种问题靠模型本身是发现不了的,必须在数据层增加监控:对每个SKU的日均销量做环比检测,如果连续3天环比变化超过15%,自动拉出该SKU的最近订单明细,由数据团队人工核对是真实需求变化还是口径变化。在我们的实践中,这类情况平均每周能抓到三四起,每一起如果不及时发现,都可能对补货造成误导。
4.4 模型漂移:模型训练时性能很好,过几个月效果就变差
时序模型的通病是时间越久,训练数据对当前场景的指导意义越弱。尤其是消费市场变化快的品类,半年前的销售模式可能已经完全不适应当下了。
我的应对策略是给每个SKU按时间加权:越近的数据权重越高,最早的数据权重最低。LightGBM本身支持sample weight,我在训练时对最近90天的样本给了1.0的权重,90天到180天的给0.6,180天以上的给0.3。这样模型会更注重近期模式,同时又保留了历史数据中的季节性规律。
另一个做法是定期重训练。我的节奏是每四周全量重训一次模型,每次重训后对比新旧模型在最近30天样本上的效果,如果新模型误差没有明显优于旧模型,就继续用旧模型。这个机制看起来简单,实际上非常有效,能防止“模型越更新越差”的坑。
4.5 业务方的信任问题:模型预测和历史趋势打架,该听谁的?
最后说一个非技术但特别重要的问题。计划员在系统上线初期经常抱怨:“我的经验是这款产品每年这时候都在下滑,系统却预测要涨,这系统不准。”后来我发现,很多时候系统其实没错,是因为计划员的记忆被最近一两年的特殊情况影响了,而模型看到了更长期更全面的规律。
处理方法不是强行要求业务方相信系统,而是让系统把“为什么这么预测”讲清楚。我在预测明细页面上增加了一个“主要驱动因素”的展示,自动列出影响该SKU预测值最大的三个因素,比如“去年同期销量较高”、“最近14天销量环比上升20%”、“临近春节(距离14天)”。当计划员看到这些解释之后,质疑声少了一大半。
5. 其他值得说说的实操经验
5.1 安全库存不能一刀切,要跟服务水平挂钩
很多企业的安全库存就是一个固定值,比如“每个SKU保底两周库存”。这个做法的问题在于,两周的库存对于需求稳定的SKU是过剩的,对需求波动大的SKU又远远不够。
用时序分析的方法,可以更精细地算安全库存。核心思路是利用预测误差的分布来设定缓冲量。具体公式是:安全库存 = 服务水平系数 × 提前期内的需求标准差。比如计划设定95%的服务水平(意味着缺货概率不超过5%),对应的服务水平系数取1.65,再乘以提前期内标准差的估计值,就得到了这个SKU应该备的缓冲库存。
实际执行时,预测误差的标准差并不是固定不变的,它会随着预测周期的延长而增大。正确的做法是分别计算7天、14天、30天提前期下的预测误差标准差,再按实际提前期取对应值。我有一次踩过坑,当时统一用30天的预测误差来算安全库存,结果对提前期只有7天的SKU来说安全库存普遍偏高,白白增加了几十万元的在库金额。
5.2 从预测到决策:还要考虑补货的执行约束
预测值从来不是直接的补货值。从预测到补货之间,至少要叠加三层约束:现有库存、在途库存、最小起订量和包装规格。
举个例子,某个SKU下周预测需求是500件,现有库存200件,在途库存150件,那么净需求就是150件。但如果供应商要求最小起订量是200件,实际下单就应该是200件而非150件。如果包装规格是50件一箱,那下单量应该向上取整到200件。这些业务规则在模型里不需要体现,但在决策引擎里必须逐条落实。我把这套规则写成了一个独立的“补货规则引擎”,与预测模型解耦,这样预测模型升级时不会影响规则执行,规则调整时也不用重新训练模型。
5.3 长尾SKU不配拥有复杂模型
1500个活跃SKU里,真正需要精细建模的其实不到500个。剩下1000个SKU的月销量可能就几十件,根本不值得为它们跑Prophet、LightGBM这套复杂流程,训练时间长,效果提升也微乎其微。
我最终把这些长尾SKU的预测策略简化成了一个非常简单的规则:预测值 = 历史90天日均销量 × 提前期天数 × 1.2的放大系数,再加上一个固定3天的安全库存垫底。粗放,但够用,而且维护成本几乎为零。省下来的算力、调参时间、监控精力,全部投入到高价值SKU上。资源永远是有限的,把好钢用在刀刃上,不是一句空话。
6. 写在最后
时序分析在供应链管理里的价值,很多人以为主要体现在算法多先进、模型多复杂。我这些年的体会恰恰相反,真正的难点在于数据通不通、业务懂不懂、规则清不清楚。技术只是把业务理解翻译成可执行的系统能力,如果对业务本身没有深刻理解,再好的模型也跑不出实际效果。
我自己在使用这套系统时最有感触的一点是:时序分析不是一个“做完就结束”的项目,它更像是给供应链装了一个雷达,需要持续校准、持续优化、持续跟着业务变化调整。今天有效的模型参数,可能半年后就不再适用;这个品类上的规律,放到另一个品类可能完全不成立。所以保持敬畏心,多听业务方的反馈,多关注细节里的异常,比追着新模型跑要有用得多。
如果你也在做类似的尝试,建议从小范围切入,先选一个痛点最明显的仓或品类跑通全流程,用数据说话,让业务方看到实实在在的改善,再逐步铺开。这套打法虽然慢,但每一步都走得很扎实。祝大家的供应链都能更快、更准、更稳。