为什么需要考虑销量的随机性?

商品采购是库存管理的重要环节, 它的主要内容是制定商品的需求计划, 向供应商下采购单, 协调相关的资源(供应商, 人力, 车辆等), 最终满足企业在成本, 质量和效率等方面的综合指标. 本文探讨如何在采购时考虑销量的随机性, 从而降低库存管理的风险.

1. 销量预测

销量预测是制定需求计划的重要工具. 常见的做法是预测未来一段时间的 总销量值 作为需求. 因此销量预测的准确度直接决定了库存的风险: 当预测偏高时, 容易造成商品的积压; 反之, 则容易造成缺货. 为了解决商品缺货和库存积压的问题, 我们希望有一套强大的预测工具使得我们能准确知道未来的需求. 但现状却是:

销量预测永远是不准确的.

影响商品销量的因素不仅有商品自身的属性, 例如商品的质量, 品牌, 价格, 颜色等, 还有外在的因素, 例如销售的日期, 天气等. 除此之外, 用户的购买行为本身就是不确定的, 即使我们获取所有的影响因素也无法预知消费者会在哪天购买何种商品.

2. 考虑销量的随机性

我们在采购业务中可能面临如下困境:

  1. 由于运营活动或其它因素的影响, 商品出现积压和缺货的情形时有发生.
  2. 销量预测的准确度已达到瓶颈, 现有条件下无法继续提升效果.

在这种情况下, 我们应该如何库存管理?

我们先回顾之前的采购策略: 根据销量预测值计算需求, 然后计算采购量. 当预测出现偏差时, 我们直接承担由偏差带来的后果, 例如缺货. 下面我们考虑另一种思路: 执行多种预测模型, 并得到了不同的预测值, 根据每一种预测值, 我们计算对应的采购量, 并评估其收益或风险(例如缺货率). 最后, 在所有的可能性中选择收益最大或风险最小的方案. 第二种思路显然优于第一种思路, 因为它枚举了所有可能性, 并选择了使得业务目标达到最优的方案.

为了在实践中考虑销量的随机性并作出最优决策. 我们总结两点:

  1. 明确业务目标. 例如考虑库存成本和缺货率(服务水平). 采购策略必须和业务目标联系起来, 这样才能有效降低由于预测偏差带来的影响.
  2. 预测销量的概率分布. 概率分布的本质是 枚举所有可能性. 它为决策提供基本的输入.

3. 示例问题

考虑管理一个商品的采购. 我们的的业务参数, 目标和约束描述如下:

  • 日销量 给定参数\mu, \sigma, 商品的日销量独立且服从正态分布N(\mu, \sigma^2)
  • 仓库容量 W=100 (初始库存为0)
  • 采购周期 T=7天. 即, 从第一天凌晨开始采购, 每7天下一次采购单.

注意 为了简化计算, 我们不考虑生产排期, 生产和运输时间. 假设下单之后商品自动补满库存(累计不超过采购总量, 且在第7天时必须全部入库).

. 设第1天的采购量为200, 那么当天凌晨的库存为W=100 (剩余入库量100). 设第1天的销量是80. 那么第2天凌晨的库存仍然自动补足W=100 (剩余库存量20). 假设第3-7天的销量为0. 第7天所有剩余库存必须入仓, 此时库存容量为100 + 20 = 120, 因此发生爆仓.

  • 在一个采购周期结束的时刻, 如果库存量大于W, 我们认为发生一次爆仓.
  • 在任意一天结束的时刻, 如果当前的库存量为0, 我们认为发生一次断货.
  • 目标 尽量不要发生断货和爆仓.

Remark 由于商品销量服从正态分布且\mu,\sigma已知. 以"无偏预测"为目标, 我们可以做出最优的预测y_t=\mu (t代表未来任意一天).

4. 简单策略

这种策略不考虑销量的随机性. 直接利用销量预测计算商品的需求, 从而指导采购. 详细步骤如下所述.

  1. 预测未来1到7天的销量, 即y_t=\mu, 其中t=1, 2, \ldots, 7.
  2. 计算未来7天总需求: \sum_{t=1}^7 y_t = 7\mu.
  3. 采购量的计算公式: \max \{7\mu - s, 0 \}, 其中s代表当前库存量.

该策略非常简单直观, 因而在业界广泛使用. 它的缺点是 非常依赖预测销量的准确性. 如果预测值与实际值偏差大, 则会较大概率引发库存问题(即, 造成缺货或爆仓).

Remark 有人可能会说实际中可以考虑安全系数, 安全库存天数, 从而防止缺货发生. 事实上, 对安全系数/天数等参数的调整本质上是调整销量的预测值. 在这个例子中, 由于我们知道销量的分布, 因此我们已经做出"最优"预测(在无偏估计的前提下).

5 优化模型

基本思想是建立一个符合业务目标的数学模型, 然后计算最优的商品采购量. 设Y_7为未来7天的总销量. 由于日销量服从N(\mu, \sigma^2), 因此Y_7服从N(7\mu, 49\sigma^2). 已知当前库存s. 设采购量为x, 缺货的概率为\gamma_1, 爆仓的概率为\gamma_2. 目标是使得缺货和爆仓的概率的平方和最小. 因此我们得到如下数学模型:

\begin{aligned} \min \ & (\gamma_1 + \gamma_2)^2\\ \text{s.t. } & \text{Prob}(Y_7 \geq x + s) = \gamma_1\\ & \text{Prob}(Y_7 \leq x+s-W) = \gamma_2\\ & 0 \leq \gamma_1 \leq 1\\ & 0 \leq \gamma_2 \leq 1\\ & x \geq 0. \end{aligned}

6 实验结果

实验代码(Python3)

实验用到的基础数据如下:

  • 库存容量W=100
  • 采购周期T=7
  • 销售天数 = 180
  • 日销量的均值\mu\in \{20, 21, \ldots, 80\}.
6.1 缺货和爆仓的总天数

给定\sigma, 对所有均值\mu, 我们将会分别计算 简单策略优化模型 造成的缺货和爆仓的总天数.

  • \sigma=10. 实验结果如下图所示, 其中横轴为\mu值, 纵轴为缺货和爆仓的总天数. 蓝色线(naive)代表简单策略, 橙色线(uncertain)代表采购模型.

    Fig. sigma-10
  • \sigma=20.

    Fig. sigma-20

结论

  1. 优化模型明显优于简单策略.
  2. 当销量的随机性比较小且销量远低于仓库容量时(见Fig. sigma-10), 采购模型提升的效果尤其明显.
  3. 当销量的随机性变大, 随着\mu值的增加(见Fig. sigma-20), 采购模型带来的提升逐渐降低. 这个结果是符合我们预期的, 因为销量的不确定性越大, 最终出现爆仓或者缺货的概率也会越大.
6.2 库存变化

固定\mu=20, \sigma=10, 然后观察两种策略下库存的变化情况.

Fig. 库存变化
模型 平均库存 库存标准差 缺货天数 爆仓天数 总天数(爆仓+缺货) 占比
Naive策略 50 31 25 0 25 13.89%
采购模型 71 18 1 0 1 0.56%

从上表的数据我们发现, 采购模型保持了一个较高的库存水平, 因而降低了断货的风险. 通过比较库存标准差, 我们发现采购模型的库存变化比较稳定, 这得益于它考虑了销量的概率分布.

7. 总结

  1. 商品采购需要明确业务目标. 需求预测与业务目标不能分离, 而应该紧密联系在一起.
  2. 考虑销量的不确定性的目的是为了达成业务目标, 从而降低由预测偏差带来的影响.

推荐阅读更多精彩内容