这是“天枢系统”系列博客的第四篇。前三篇分别讨论了系统设计原则、数据清洗和预测模型;这一篇进入预测的下游,聊聊库存计划的核心逻辑:安全库存怎么算、订货点为什么不是拍脑袋、长尾产品的库存策略该怎么定。

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 天枢系统为什么用形式三?

天枢系统采用形式三,原因很实际:

  1. RMSE 可以直接从模型竞赛记录中读取,不需要额外计算历史需求标准差。
  2. RMSE 天然包含了预测模型本身的误差信息,而形式一和形式二都隐含“预测无偏”的假设。
  3. 与预测区间的口径一致:第三篇说过预测区间基于冠军模型过去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 - 已分配 0350 件
⑦ 理论订货量488.2 - 350138.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 - 已分配 080 件
⑦ 理论订货量158.6 - 8078.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 天的销量预测和库存建议。项目尚未上线,正在持续迭代中。