从预测到补货——一个库存计划引擎的设计逻辑
这是“天枢系统”系列博客的第四篇。前三篇分别讨论了系统设计原则、数据清洗和预测模型;这一篇进入预测的下游,聊聊库存计划的核心逻辑:安全库存怎么算、订货点为什么不是拍脑袋、长尾产品的库存策略该怎么定。
0. 预测之后,问题才刚刚开始
预测回答了“未来卖多少”,但库存计划要回答的是另外三个问题:
- 备多少:除了预测值,还要额外多备多少安全库存?
- 何时补货:库存降到什么水平就该下采购单(外购件)或生产单(自制件)?
- 补多少:这次采购单或生产单上的数量填多少?
这三个问题分别对应库存计划的三个核心输出:安全库存、订货点、建议订货量。下面逐一拆解它们的计算逻辑和设计思路。
1. 安全库存:为“坏运气”准备的缓冲垫
预测值只是“最可能的销量”,实际销量一定会有波动。安全库存的作用,就是吸收这些波动,防止断货。
1.1 为什么要设置安全库存?
假设某物料未来 10 天的预测需求是 850 件。如果我们只备 850 件,当实际需求恰好是 850 件时没问题。但预测永远有误差——实际需求可能是 800,也可能是 900。
如果实际需求是 900 件,库存只备了 850,就会断货 50 件。客户拿不到货,可能转去买竞品,甚至永远流失。
安全库存的作用,就是在预测值之外,额外多备一部分库存,用来吸收需求波动、预测误差,以及供应或生产提前期的波动。无论外购件还是自制件,都需要安全库存来应对不确定性。它不是“多买的浪费”,而是“为不确定性付的保险费”。
1.2 安全库存的标准公式
安全库存的标准公式有三种形式,分别适用于不同场景:
形式一:只考虑需求波动(最经典)
$$ SS = Z \times \sigma_d \times \sqrt{L + R} $$其中:
| 符号 | 名称 | 含义 | 数据来源 |
|---|---|---|---|
| $SS$ | Safety Stock (安全库存) | 额外多备的库存量 | 计算得出 |
| $Z$ | Z-score / Service Level Factor (服务水平系数) | 想达到的服务水平对应的统计系数 | 管理决策 |
| $\sigma_d$ | Standard Deviation of Daily Demand (日需求标准差) | 日需求的波动幅度。$\sigma$ 是标准差,下标 $d$ 表示 daily(日) | 历史销量数据 |
| $L$ | Lead Time (补货提前期) | 从发出补货订单到货物实际到货的天数。外购件是供应商交期,自制件是生产提前期(加工+等待+搬运) | ERP 物料主数据 |
| $R$ | Review Period (补货检查周期) | 系统每隔多久检查一次库存,并决定是否需要补货。外购件是采购补货检查周期,自制件是生产检查周期 | 企业补货策略 |
| $L+R$ | 下单间隔期 | 从本次下单到下次补货到货之间的总时间 | 计算得出 |
需要特别说明一下 $L$ 和 $R$ 的区别:
- $L$(Lead Time,补货提前期):从本次下订单,到货物送到仓库,中间要等多久。外购件是供应商交期,自制件是生产提前期。生产提前期通常包含加工时间、等待时间和搬运时间。
- $R$(Review Period,补货检查周期):系统每隔多久检查一次库存,并决定是否需要补货。外购件是采购补货检查周期,自制件是生产检查周期。例如每周检查一次,$R=7$ 天;每月检查一次,$R=30$ 天。$R$ 决定的是“多久 Review 一次、多久有机会下下一次单”,而不是“到货后固定多久下单”。
- $L+R$:从本次下单,到下次补货到货,整段时间内库存只消耗不补充,安全库存必须覆盖这整段时间。
形式二:同时考虑需求波动和提前期波动(最完整)
$$ SS = Z \times \sqrt{ (L + R) \times \sigma_d^2 + \mu_d^2 \times \sigma_L^2 } $$其中 $\mu_d$ 是日均需求预测值,$\sigma_L$ 是提前期标准差。形式二比形式一多了一个“交期波动项”,适用于供应商交期不稳定的场景。
形式三:直接用预测误差(工程实用版)
$$ SS = Z \times RMSE \times \sqrt{L + R} $$其中 $RMSE$ 是预测模型在验证集上的均方根误差。形式三用 RMSE 替代 $\sigma_d$,因为 RMSE 直接反映“预测模型有多不准”,不需要再单独计算历史需求标准差。
1.3 三种形式的优劣对比
| 对比维度 | 形式一 | 形式二 | 形式三 |
|---|---|---|---|
| 核心参数 | 历史需求标准差 $\sigma_d$ | $\sigma_d$ + 提前期标准差 $\sigma_L$ | 模型 RMSE |
| 优点 | 公式简单,参数易得 | 最全面,交期波动也纳入 | 直接反映预测误差,和预测区间天然一致 |
| 缺点 | 未考虑预测模型本身的误差 | 需要交期数据,计算复杂 | 依赖验证集质量,需要模型竞赛记录 |
| 数据要求 | 历史销量 | 历史销量 + 采购交期 | 验证集 RMSE |
| 适用场景 | 交期稳定,需求波动为主 | 交期不稳定,供应商经常延迟 | 已有模型竞赛机制的预测系统 |
1.4 天枢系统为什么用形式三?
天枢系统采用形式三,原因很实际:
- RMSE 可以直接从模型竞赛记录中读取,不需要额外计算历史需求标准差。
- RMSE 天然包含了预测模型本身的误差信息,而形式一和形式二都隐含“预测无偏”的假设。
- 与预测区间的口径一致:第三篇说过预测区间基于冠军模型过去30天的预测误差计算,而这个预测误差在系统中可以用 RMSE 表示。安全库存和预测区间用同一个误差指标,整套逻辑统一,不会出现两套标准。
但如果供应商交期不稳定,形式三就不够了,需要改用形式二,把交期波动 $\sigma_L$ 也纳入计算。这不是“升级”,而是根据供应商交期特性选择匹配的形式。交期稳定时,形式二反而多引入参数,未必更准。
1.5 公式逐项拆解
$Z$——服务水平系数
服务水平是指“不缺货的概率”。95% 服务水平意味着 100 次补货中,95 次不断货,5 次可能断货。
| 服务水平 | Z 值 | 业务含义 |
|---|---|---|
| 90% | 1.28 | 接受 10% 断货风险 |
| 95% | 1.64 | 标准配置 |
| 97.5% | 1.96 | 关键物料 |
| 99% | 2.33 | 断货代价极大的核心物料 |
$Z$ 越大,服务水平越高,但安全库存也越高。选择服务水平,本质是在“库存成本”和“断货损失”之间做权衡。
$\sigma_d$ / RMSE——预测误差或需求波动
这个值越大,说明预测越不准或需求越不稳定,需要更多安全库存来兜底。
$\sqrt{L+R}$——下单间隔期的平方根
下单间隔期越长,不确定性累积越多,安全库存越高。但注意是开根号增长,不是线性增长。时间翻 4 倍,不确定性只翻 2 倍。原因是:有些天的偏高和有些天的偏低会互相抵消一部分。
1.6 计算示例
物料 M1024,RMSE=8.5,L=3,R=7,Z=1.64:
$$ SS = 1.64 \times 8.5 \times \sqrt{10} \approx 44.1 $$意思是:即使未来 10 天销量冲到预测区间的上限,这 44 件缓冲库存也能在 95% 的情况下保证不断货。
2. 订货点:库存降到多少就该补货
订货点是触发补货的库存水位线。当净可用库存低于这个数,说明必须马上补货,否则下单间隔期内可能断货。
2.1 订货点公式
$$ ROP = \sum_{i=1}^{L+R} F_i + SS $$其中 $F_i$ 为未来第 $i$ 天的预测需求量,$\sum_{i=1}^{L+R} F_i$ 即下单间隔期内的预测需求总量。
2.2 计算示例
M1024 未来 10 天预测需求总量为 851.2 件,安全库存 44.1 件:
$$ ROP = 851.2 + 44.1 \approx 895.3 $$意思是:当 M1024 的净可用库存降到 895 件左右,计划员就该下采购单了。如果等到库存见底再买,供应商的 3 天交期加上 7 天补货间隔,中间这 10 天必然断货。
3. 建议订货量:这次该补多少
建议订货量是本次建议补货的数量。它综合考虑下单间隔期需求、安全库存、净可用库存、最小批量和圆整规则。
3.1 订货量公式
$$ Q = \max\left(MOQ,\; \text{round}\left(\sum_{i=1}^{L+R} F_i + SS - I_{available}\right)\right) $$其中:
- $I_{available}$ 为净可用库存,即真正能用来满足未来需求的数量。
- $MOQ$ 为最小起订量(外购件)或最小生产批量(自制件)。
- $\text{round}(\cdot)$ 为按圆整规则取整。
净可用库存的计算:
$$ I_{available} = I_{onHand} + I_{inTransit, \text{窗口内}} - I_{allocated, \text{窗口内}} $$其中:
- $I_{onHand}$:当前在手库存。
- $I_{inTransit, \text{窗口内}}$:在当前下单间隔期内会到货的在途库存。
- $I_{allocated, \text{窗口内}}$:在当前下单间隔期内会发出的已分配量。
| 符号 | 含义 | 数据来源 |
|---|---|---|
| $I_{onHand}$ | 当前在手库存:仓库里实际存在的数量 | ERP 库存表 |
| $I_{inTransit, \text{窗口内}}$ | 窗口内到货的在途库存 | ERP 采购订单表(按预计到货日期过滤) |
| $I_{allocated, \text{窗口内}}$ | 窗口内发出的已分配量 | ERP 销售订单表(按需求日期过滤) |
超出当前下单间隔期的在途到货和已分配发出,不属于本次 Review 的考虑范围,它们留给下一次 Review。这正是定期补货策略的自然工作方式:每个周期的决策只对该周期负责。
为什么必须用净可用库存?
举一个例子:假设某物料订货点为 500 件,当前在手库存 200 件,窗口内在途库存 300 件,窗口内已分配量 0 件。如果只用在手库存计算,会得出“需补货 300 件”的错误结论;但实际净可用库存是 500 件,刚好达到订货点,根本不需要补货。只看在手库存,会造成重复下单和库存过剩。
“圆整规则”是企业在补货实务中的常见约束,例如:
- 按最小包装量圆整:供应商按箱发货,一箱 50 件,订货量必须是 50 的整数倍。
- 按托盘/层数圆整:物流以托盘为单位,订货量必须是整托。
- 按金额圆整:采购单金额不能低于供应商要求,反推数量取整。
天枢系统的圆整规则可以在物料主数据或系统配置中设置,常见做法是“向上取整到指定步长的整数倍”。例如步长为 100,则 138.2 向上取整为 200;步长为 50,则取整为 150。
超周期数量的自然处理
当 MOQ 或最小生产批量超过周期需求时,超出的数量不需要额外的冲销机制,ERP 的数据流会自动完成处理:
- 超出的数量如果已经交货或完工,就进入在手库存,下次 Review 时自动被净可用库存计入。
- 如果尚未交货或完工,就继续留在采购订单/生产订单未交/未完工数量中,下次 Review 时由天枢按预计到货/完工日期自动判断是否属于窗口内。
因此,天枢只需要做一件事:从 ERP 正确读取净可用库存。只要在途库存和已分配量都按时间窗口过滤,超周期数量就会自然被正确处理,不需要在系统中额外设计冲销逻辑。
3.2 计算示例
M1024 净可用库存 850 件,下单间隔期需求 851.2 件,安全库存 44.1 件,MOQ=10:
$$ Q = \max\left(10,\; \text{round}(851.2 + 44.1 - 850)\right) = \max(10,\; 50) = 50 $$意思是:当前净可用库存 850 件刚好覆盖下单间隔期需求,但没有任何缓冲。系统建议补 50 件,把库存拉回安全水位。
4. 补货信号:一眼看懂该不该动
| 信号 | 触发条件 | 你该做什么 |
|---|---|---|
| 🔴 需补货 | 净可用库存 < 订货点 | 尽快下采购单/生产单,库存已经不够覆盖下单间隔期需求 |
| 🟡 接近订货点 | 净可用库存介于安全库存和订货点之间 | 本周可能触发补货,提前关注,做好准备 |
| 🟢 库存充足 | 净可用库存远大于订货点 | 暂时不需要操作,库存足够覆盖未来需求 |
| ⚪ 按单采购 | 长尾/间歇性产品,零值占比极高 | 不自动备库存,接到销售订单后再采购 |
5. 长尾产品的特殊处理
对于零值占比超过 40% 的长尾产品(I 级),标准安全库存公式不再适用——大量零值让 RMSE 计算不可靠,正态分布假设不成立。系统会根据零值占比严重程度,自动选择以下三种策略之一:
| 零值占比 | 安全库存策略 | 业务含义 |
|---|---|---|
| 40% ~ 60% | 泊松分布法 | 需求是独立随机事件(如备件损坏),用泊松分布查 95% 分位数 |
| 60% ~ 90% | 历史最大单次需求法 | 信号太弱,直接按历史最大单笔销量备货 |
| 90% 以上 | 不备库存(按单采购) | 一年只卖一两次,备货纯属浪费资金,来了订单再买 |
6. 完整的库存计划示例
下面分别用一个外购件和一个自制件,走通完整的库存计划流程。
6.1 外购件示例:M2048
M2048 是一个外购件,供应商要求最小起订量(MOQ)500 件,采购提前期 5 天,采购补货检查周期 14 天。假设该物料没有在途和已分配,净可用库存就是在手库存。
| 步骤 | 内容 | 数值 |
|---|---|---|
| ① 基础参数 | 提前期 L、补货检查周期 R、服务水平 | L=5天, R=14天, 95% |
| ② 预测输入 | 未来 19 天(L+R)预测需求总量 | 419.9 件 |
| ③ 误差评估 | 冠军模型 RMSE(日预测误差标准差) | 12.3 件 |
| ④ 安全库存 | $1.64 \times 12.3 \times \sqrt{19}$ | $\approx 68.3$ 件 |
| ⑤ 订货点 | 419.9 + 68.3 | $\approx 488.2$ 件 |
| ⑥ 净可用库存 | 在手 350 + 在途 0 - 已分配 0 | 350 件 |
| ⑦ 理论订货量 | 488.2 - 350 | 138.2 件 |
| ⑧ 圆整规则 | 按 100 件向上圆整 | 200 件 |
| ⑨ MOQ | 最小起订量 | 500 件 |
| ⑩ 建议订货量 | max(500, 200) | 500 件 |
| ⑪ 补货信号 | 350 < 488.2 | 🔴 需采购 |
业务解读:M2048 净可用库存 350 件,连未来 19 天的基本需求(419.9 件)都覆盖不了,更别说应付波动了。系统亮红灯建议采购。虽然库存缺口只有 138 件,但因为供应商要求最小起订量 500 件,最终建议采购量是 500 件。注意,500 件超过了一个周期的需求 419.9 件,超出的 80.1 件会在 ERP 中自然反映为在手库存或未来周期的在途库存,天枢只需在下一次 Review 时按时间窗口正确读取。
6.2 自制件示例:M3077
M3077 是一个自制件,生产提前期 3 天,生产检查周期 7 天,最小生产批量 200 件。同样假设没有在途和已分配。
| 步骤 | 内容 | 数值 |
|---|---|---|
| ① 基础参数 | 提前期 L、生产检查周期 R、服务水平 | L=3天, R=7天, 95% |
| ② 预测输入 | 未来 10 天(L+R)预测需求总量 | 126.4 件 |
| ③ 误差评估 | 冠军模型 RMSE(日预测误差标准差) | 6.2 件 |
| ④ 安全库存 | $1.64 \times 6.2 \times \sqrt{10}$ | $\approx 32.2$ 件 |
| ⑤ 订货点 | 126.4 + 32.2 | $\approx 158.6$ 件 |
| ⑥ 净可用库存 | 在手 80 + 在途 0 - 已分配 0 | 80 件 |
| ⑦ 理论订货量 | 158.6 - 80 | 78.6 件 |
| ⑧ 圆整规则 | 按 10 件向上圆整 | 80 件 |
| ⑨ 最小生产批量 | 约束:生产量不能低于此值 | 200 件 |
| ⑩ 建议生产量 | max(最小生产批量, 圆整后理论量) = max(200, 80) | 200 件 |
| ⑪ 补货信号 | 80 < 158.6 | 🔴 需生产 |
业务解读:M3077 净可用库存 80 件,订货点 158.6 件,触发补货。理论缺口 78.6 件,按 10 件步长圆整后为 80 件,但最小生产批量是 200 件,两者取大,所以建议一次性生产 200 件,把库存拉回安全水位以上。同样,200 件超过了一个周期的需求 126.4 件,超出的 73.6 件会自然反映为在手库存或后续周期的生产在制,天枢只需按时间窗口读取。
7. 外购件与自制件的对比
| 维度 | 外购件 M2048 | 自制件 M3077 |
|---|---|---|
| 提前期 L | 供应商交期 5 天 | 生产提前期 3 天 |
| 检查周期 R | 采购补货检查周期 14 天 | 生产检查周期 7 天 |
| 最小批量 | MOQ 500 | 生产批量 200 |
| 天枢输出单据 | 采购申请单 | 金蝶预测单 |
| 补货动作 | 下采购单 | 下生产单 |
8. 供应链视角:拿信息换库存
库存计划不只是数学公式,它背后是一条供应链管理的核心逻辑:拿信息换库存。
库存本质上是为了应对不确定性而存在的。预测越准,需要备的安全库存就越少,资金占用就越低。信息越充分,库存越可以压得低;信息越缺乏,库存就得备得越多。
算库存要算整个供应链的库存。有些库存看起来是在供应商那里,实际上也是由“链主”买单的。要避免对零部件重复设置安全库存——供应链上的三个推拉结合点:原材料、半成品、成品,每个点都设安全库存,库存就层层加码,总体资金占用巨大。
对于大多数企业来说,用好基本模型,配以组织流程措施,远比追求复杂精致的模型重要。销售与运营的协调,信息对称后,整体库存都能降下来,运营成本就跟着降了。
9. 总结
这一篇讲了天枢系统的库存计划设计逻辑:
- 安全库存,用 $Z \times RMSE \times \sqrt{L+R}$ 量化预测不确定性,为波动准备缓冲。
- 订货点,下单间隔期需求 + 安全库存,明确什么时候该补货。
- 建议订货量,基于净可用库存计算,综合最小批量和圆整规则。
- 净可用库存 = 在手库存 + 窗口内在途 - 窗口内已分配,按下单间隔期过滤。
- 超周期数量:由 ERP 数据流自然处理,天枢只需按时间窗口正确读取。
- 架构分工:计划在天枢,执行在 ERP。
- 长尾特殊处理,泊松分布法、历史最大单次需求法、按单采购,不搞一刀切。
- 外购件与自制件边界:外购件导出采购申请单,自制件导出预测单作为 MRP 输入。
- 拿信息换库存,是库存计划的终极指导思想。
至此,天枢系统从数据清洗、物料分层、模型竞赛、批量预测到库存计划的完整链路已经全部走通。下一篇,我们将聊聊系统落地与组织协同——如何让这套系统真正跑起来,而不是停留在设计文档里。
天枢系统,是一个基于 SQL Server 的销售预测与库存计划引擎。它从金蝶 ERP 取数,经过数据清洗、物料分层、九模型竞赛择优,输出未来 7 天的销量预测和库存建议。项目尚未上线,正在持续迭代中。