9 种模型同台竞技——一个供应链预测系统的模型设计哲学
这是“天枢系统”系列博客的第三篇。前两篇分别从系统设计原则和数据清洗的角度,回答了“数据从哪来、如何变干净”;这一篇进入预测的核心,聊聊为什么需要 9 种模型、它们如何“模拟考试”,以及那个最重要的铁律:一个好预测必须同时满足准确度高和没有系统性偏差。
0. 为什么预测是有用的?
在进入模型之前,先回答一个更根本的问题:预测到底有什么用?
答案可以从以下几个层面来理解。
0.1 决策的前提:没有预测,就没有理性选择
任何面向未来的行动,都隐含着一个对未来的判断。
你决定今天出门带不带伞,是基于对下雨可能性的预测;企业决定扩大生产,是基于对市场需求的预测;政府决定加息,是基于对通胀走势的预测。
即使你说“我不做预测”,你实际上也在默认“未来会跟现在差不多”——这本身就是一种预测,只是比较粗糙。
所以,预测的有用性首先在于:它是所有理性决策的起点。没有预测,决策就只能是碰运气。
0.2 将不确定性转化为可管理的风险
未来是不确定的,但不确定不等于完全不可知。预测的作用,就是把“不知道会发生什么”变成“知道各种结果的可能性有多大”。
一旦不确定性被量化,我们就可以评估风险、制定应对方案、选择期望收益最大的行动。预测的价值不在于消除风险,而在于让我们有能力管理风险。
0.3 创造时间差:提前行动,占据主动
预测让我们能够提前采取行动,而不是等到事情发生后才被动反应。
台风预测让居民提前转移;销量预测让工厂提前备料;流行病预测让政府提前储备医疗资源。时间差本身就是巨大的优势。在商业、军事、公共安全等领域,谁预测得更早、更准,谁就拥有主动权。
这一点在供应链上体现得尤其具体:采购需要提前下订单,生产需要提前排产,仓库需要提前备料。如果不知道未来卖多少,就只能等订单来了再行动——这在竞争激烈的市场里,往往意味着错失机会。
0.4 反馈循环:预测是学习与适应的核心机制
预测不仅用于行动,还用于检验和改进我们的认知。
当我们做出预测后,实际结果会给我们反馈:如果预测准确,说明模型捕捉到了真实规律;如果预测错误,说明模型有缺陷,需要修正。这种“预测—反馈—修正”的循环,是人类学习和科学进步的基本方式。
在天枢系统的设计里,这个循环被直接落地为模型竞赛机制:每个模型都要先在验证集上接受检验,表现好的留下,表现差的淘汰。预测系统本身也在通过反馈不断进化。
0.5 适应性的生存优势
预测能力是生物进化的产物。动物必须预测猎物的移动、天敌的出现、季节的变化,才能生存和繁衍。人类将这种能力发展到极致——我们预测天气、市场、社会趋势,甚至预测他人的行为,从而协调合作。
拥有更好预测能力的个体、组织或社会,往往更能适应环境变化,获得竞争优势。企业也是如此:预测更准的企业,库存可以压得更低,响应可以更快,资金效率更高。
0.6 落到供应链:拿信息换库存
说了这么多,回到我们的主题。预测在供应链管理中的核心作用,可以概括为一句话:拿信息换库存。
库存本质上是为了应对不确定性而存在的。预测越准,需要备的安全库存就越少,资金占用就越低。信息越充分,库存越可以压得低;信息越缺乏,库存就得备得越多。
所以,预测不是为了预测而预测,而是为了让供应链的每一个环节都能提前行动,用更低的成本满足客户需求。预测不一定准确,但有预测的决策质量,通常优于没有预测的决策质量。这就是预测最根本的用处。
1. 为什么需要 9 种模型?
很多预测系统的做法是:选一个“看起来不错”的模型,比如移动平均或指数平滑,然后对所有产品一视同仁。
但天枢系统的设计逻辑正好相反:没有一种预测方法能通吃所有产品。爆款和长尾的需求模式完全不同,成熟品和新品的规律也不一样。如果用一个模型硬套,结果要么是爆款预测偏低,要么是长尾预测虚高。
所以我们引入了 9 种预测模型,分成五个模型族:
- 移动平均系:看近期均值,抹平波动
- 指数平滑系:越近的数据权重越大
- 季节模型系:记住以周为主的周期性规律
- 间歇性需求系:专治偶尔卖一次
- 朴素基线系:最简单的参照
每次预测时,系统让所有模型同时“上阵”,用最近 30 天的实际销量做一场“模拟考试”,选出每个产品在最近 30 天里表现最好的模型,作为它本次的“专属预测师”。
关于“9 种模型”的说明:这里的“9 种”指的是算法层面。每种算法内部还包含若干参数变体(如 SMA 有 3/7/14 三种窗口,EMA 有 0.1~0.7 四档 α)。在模型竞赛中,每种算法会先在内部调参,选出自己的最优参数配置,然后以该最优配置作为唯一代表与其他算法竞赛。因此,最终参赛的仍是 9 个算法代表,而不是全部参数组合。架构图中列出的参数范围,只是内部调参时的尝试选项,并非独立参赛选手。
2. 时间序列的系统性维度与随机波动
在正式介绍模型之前,先建立一个基本的分析框架:任何一条需求历史,都可以从三个系统性维度来理解,剩下的部分则是随机波动。
| 维度 | 特征 | 性质 |
|---|---|---|
| 水平 | 需求忽高忽低,但没有明显的趋势和季节性 | ✅ 系统性,可预测 |
| 趋势 | 随时间推移,需求呈现增长或降低 | ✅ 系统性,可预测 |
| 周期性(季节性) | 需求呈现交替性的高峰和低谷,有规可循 | ✅ 系统性,可预测 |
| 随机波动 | 除掉前三者之后的“剩余物” | ❌ 非系统性,不可预测 |
这个分解有着极其重要的实践意义:大部分变动其实是可知的,只有一小部分是真正不可知的。预测模型的任务,就是把“可知的系统性部分”尽量准确地提炼出来,把“不可知的随机波动”留给安全库存去应对。
3. 五个模型族,九种武器
3.1 移动平均系——“看近期均值”
| 模型 | 原理 | 适用场景 | 参数 |
|---|---|---|---|
| 简单移动平均 (SMA) | 过去 N 天平均卖多少,明天大概也卖这么多 | 销量稳定的成熟产品 | 窗口大小 N(3/7/14) |
| 加权移动平均 (WMA) | 还是近 7 天,但昨天比上周更重要 | 需求有惯性的产品 | 权重方案(线性递减) |
注意:SMA 的窗口只设了 3/7/14 三档,没有 30 天。因为 SMA(30) 与朴素基线系的“保底-月均法”在数学上完全等价,如果同时保留,竞赛中就会出现重复选手。因此,让 SMA 专注短期窗口,月均法作为基准线独立存在,各司其职。SMA(14) 与月均法只是窗口长度不同,并非重复,因此可以保留。
3.2 指数平滑系——“越近记得越牢”
| 模型 | 原理 | 适用场景 | 参数 |
|---|---|---|---|
| 一次指数平滑 (EMA) | 今天预测 = 昨天预测 + α × 昨天误差 | 无趋势的平稳需求 | 平滑系数 α(0.1~0.7) |
| 双参数指数平滑 (Holt) | 增加趋势项 β,能跟踪上涨或下跌 | 新品爬坡、老品衰退 | α(水平)、β(趋势) |
3.3 季节模型系——“记住以周为主的周期性规律”
| 模型 | 原理 | 适用场景 | 参数 |
|---|---|---|---|
| 温特斯法 (Holt-Winters) | 同时学习水平、趋势、季节指数 | 有明显周规律或淡旺季的产品 | α、β、γ(季节) + 季节周期长度 p |
关于季节周期:天枢系统的日粒度数据默认采用 周周期(p=7),因为日常消费品最普遍的是“周一高、周末低”的周规律。如果要捕捉年度淡旺季(如冬装/夏装),需要更长的历史数据和更长的验证窗口——这是当前版本的一个已知局限,暂以周周期为主。
3.4 间歇性需求系——“专治偶尔卖一次”
| 模型 | 原理 | 适用场景 | 参数 |
|---|---|---|---|
| Croston 方法 | 只关注非零需求量和间隔天数 | 长尾冷门产品 | 平滑系数 α(约0.1) |
| SBA 修正法 | Croston 的去偏版本 | 同上,但更准、更不偏 | α(约0.1)+ 修正系数 |
3.5 朴素基线系——“最简单的参照”
| 模型 | 原理 | 适用场景 | 参数 |
|---|---|---|---|
| 保底-上周同天法 | 直接取上周同天的销量 | 周规律极强的产品 | 无 |
| 保底-月均法 | 近 30 天均值 | 数据极稀疏时的兜底方案 | 无 |
朴素基线系为什么存在? 因为它们是所有复杂模型的“及格线”。如果一个复杂模型的表现连“上周同天”都比不过,那它就没有存在的价值。
4. 模型竞赛机制:训练集 vs 验证集
模型不是靠感觉选的,而是靠一场严格的“模拟考试”。
历史数据:[────── 训练集(约11个月) ──────────│── 验证集(最近30天) ──]
↑ ↑
“学规律” “考水平”
用这部分数据 用这部分数据
让模型记住 让模型预测这30天,
过去的销售模式 和真实销量对比,
看谁预测得最准
为什么验证集必须是最近 30 天?
- 最近的数据最像未来:上个月的销售模式,比去年同期的模式更接近下周的真实情况。
- 防止“过拟合”:如果一个模型只在前几个月准,最近不准,说明它没能跟上最新的变化。这就像学生死记硬背了模拟题,考试题目一变就不会了。
- 公平比较:所有模型用同一套“考卷”,谁分数高谁胜出。
5. 双标准择优:准确度高 + 无系统性偏差
到这里,问题还没有结束。即使有了独立的验证集,也不能简单地“谁误差最小就选谁”。
如果只把一堆数据填进去,让软件根据预测误差最小来自动选模型,很容易造成过拟合——模型在验证集上表现不错,一到真实世界就原形毕露。一个模型的优劣,最终取决于实际案例的测试,而不是拟合度。
所以,天枢系统的模型竞赛,不是简单的“谁 MAPE 小就选谁”,而是必须同时通过两道关卡。
| 标准 | 指标 | 含义 |
|---|---|---|
| 准确度高 | MAPE(平均绝对百分比误差) | 预测值和实际值平均差百分之多少?越小越好。 |
| 无系统性偏差 | ME(平均误差) | 是总是偏高,还是总是偏低?好的模型应该不偏不倚。 |
为什么“无系统性偏差”和“准确度高”同等重要?
设想一个模型,预测值总是比实际值高 5%。它的 MAPE 可能是 5%——看起来很准。但长期下来,库存会多备 5%,资金占用就多了 5%。这个模型虽然“准”,却是有害的。
相反,一个模型有时高估 10%,有时低估 10%,MAPE 也是 10%,但它的平均误差接近零。长期来看,库存不多不少,反而更健康。
两个标准冲突时怎么办?天枢系统采用先后的优先级:第一轮先筛 ME——平均误差偏离零超过容忍阈值的模型直接淘汰,不管 MAPE 多漂亮;第二轮在通过 ME 检验的模型中,选 MAPE 最小的。默认容忍阈值设为该产品平均销量的 ±5%,具体可在系统配置中调整。
所以,一个模型即使 MAPE 再低,如果存在系统性偏差,也不能用。这两条标准,是天枢系统“模型竞赛”的铁律。
6. 预测区间:比“置信度”更诚实的表达
单点预测值给人虚假的确定感。天枢系统不显示抽象的“置信度”,而是给出 80% 预测区间。
怎么理解预测区间?
物料 M1024 预测明天销量:85.3 件 80% 预测区间:74 ~ 96 件
意思是:根据历史表现,未来实际销量有 80% 的概率落在 74 到 96 件之间。区间越窄,说明历史销量越稳,预测越靠谱;区间越宽,说明波动越大,越需要人工介入。
预测区间不是系统“有多自信”,而是历史数据告诉我们的客观波动幅度。它和安全库存的计算直接相关——安全库存本质上就是为预测区间里的“坏运气”准备的缓冲垫。
7. 当所有模型都不准时:降级原则
如果 9 种模型对一个产品的预测全都差强人意——MAPE 全超 25%,或者预测区间下限为负——系统不会假装很准,而是会主动“认输”并请求人工介入。
| 动作 | 做法 |
|---|---|
| 临时降级 | 暂时用“保底-月均法”给出一个粗糙但稳定的均值 |
| 明确标记 | 标注“波动过大——建议人工判断”,高亮提醒计划员 |
| 保留决策权 | 计划员可手动修改预测值,或将该产品改为按单采购 |
关于降级时使用“保底-月均法”的说明:此刻的月均法不再以“竞赛选手”的身份参与评估,而是作为固定的兜底规则被调用。降级时,系统不再依据验证集表现来评判它,只把它当成一个稳定基准,为计划员提供参考;真正负责决策的是人,待人工调整后再替换。这样,“降级”不是“从九个模型里选了一个差的”,而是“明确承认九个模型都不行,先给一个粗糙的底线,然后交给人”。
核心原则是:宁可用一个粗糙但稳定的平均数,也不要一个看起来很精确但实际已经跑偏的算法结果。
8. 模型选择的三个实用原则
总结天枢系统在模型选择上遵循的三个原则:
- 方法简单,容易理解。复杂的模型往往不如简单的,你不懂的模型往往不如你懂的好。可解释性是推广的前提。
- 关系简单,容易理解。模型内部各个参数之间的关系要清晰,能说清楚每个参数在做什么。
- 决策简单,容易理解。从模型输出到补货建议的逻辑要透明,让计划员知道“为什么建议订这么多”。
对于大多数企业来说,用好基本模型,配以组织流程措施,远比追求复杂精致的模型重要。预测的最终目的不是模型本身,而是让库存更低、服务水平更高。
9. 天枢系统模型竞赛架构
天枢系统模型竞赛架构
SalesClean 表(清洗后数据)
│
▼
┌──────────────────────────┐
│ 训练集/验证集切分 │
│ 前11个月训练,近30天验证 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ 九种算法同时上阵 │
│ │
│ 每种算法内部先调参, │
│ 选出自己的最优参数配置 │
│ │
│ 调参范围示例: │
│ · SMA:3/7/14天窗口 │
│ · WMA:固定7天线性递减权重 │
│ · EMA:0.1/0.3/0.5/0.7 │
│ · Holt:多组 α/β │
│ · Holt-Winters:多组 α/β/γ│
│ · Croston/SBA:α≈0.1 │
│ · 保底方法:无参数 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ 九种算法以最优配置参赛 │
│ 每个算法仅一个代表选手 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ 双标准筛选 │
│ 第一轮:ME 偏差检验 │
│ 淘汰系统性偏差超阈值的模型 │
│ (默认阈值:±5%平均销量) │
│ │
│ 第二轮:MAPE 排序 │
│ 在通过 ME 检验的模型中 │
│ 选 MAPE 最小的 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ 冠军模型出炉 │
│ 负责该产品本次的预测 │
│ 附带 80% 预测区间 │
│ │
│ 若所有模型均未通过检验 │
│ → 降级为保底-月均法 │
│ → 标记“波动过大” │
│ → 请求人工介入 │
└──────────────────────────┘
10. 总结
这一篇讲了天枢系统的预测模型设计哲学:
- 9 种模型,覆盖平稳、趋势、季节、间歇性四类需求模式。
- 训练集和验证集,用模拟考试选出最近 30 天里最准的模型。
- 双标准择优,先筛 ME 无系统性偏差,再比 MAPE 准确度。
- 预测区间,比置信度更诚实,直接连接安全库存。
- 降级机制,当所有模型都不准时,主动示弱,请求人工介入。
在下一篇博客中,我们将进入预测的下游——库存计划的设计逻辑。安全库存公式怎么推导?订货点为什么不是拍脑袋?长尾产品的库存策略又该怎么定?敬请期待。
天枢系统,是一个基于 SQL Server 的销售预测与库存计划引擎。它从金蝶 ERP 取数,经过数据清洗、物料分层、九模型竞赛择优,输出未来 7 天的销量预测和库存建议。项目尚未上线,正在持续迭代中。