One self-hosted console to run your entire business — commerce, ERP, HRM, CRM & manufacturing

小型零售商的需求预测:从凭感觉补货到值得信赖的再订货点

清洗销售历史,用简单的移动平均做预测,用 WAPE 和偏差衡量误差,再把预测变成能站得住脚的再订货点和安全库存。一个完整的 SKU 示例、每周 30 分钟的例会流程,以及机器学习何时才值得用。

Author

Anichur Rahaman

1 个月前11 min read2 views
小型零售商的需求预测:从凭感觉补货到值得信赖的再订货点

一家三店连锁的家居用品商,卖得最好的那款水壶每个货架上都空了。周五早上老板一进店,就有一位顾客在问能不能买展示样品,供应商说下一批货要两周后才到。与此同时,仓库角落里有一箱 140 个烛台,从去年 10 月放到现在,没人问津。

这不是谁偷懒。水壶的再订货点是几个月前凭感觉定的,那时它每周卖 30 个。现在每周卖 50 个,却没人重新算过。(这是一个虚构的场景,并非真实门店。)

要解决这个问题,并不需要数据科学团队。你需要的是干净的销售历史、一两个简单的公式,以及把精力放在真正重要的商品上的自觉。大部分收益来自几个小习惯,而不是复杂的模型。

本文用一个贯穿始终的示例,带你走完整个流程,示例中的 SKU 和那把水壶一样每周卖 50 件:清洗历史数据,用移动平均做预测,衡量误差,把预测变成可以信赖的再订货点,再判断每个 SKU 值得投入多少精力。示例中的所有数字均为假设数据。

预测的是需求,不是销量

系统记录的是销量,而你要预测的是需求:如果货架从没空过、也没发生任何异常,顾客本来会买多少。

两者的差距比很多人想的要大。一款商品断货三天,这三天的销量就是零,简单粗暴的预测会把它当成需求疲软。结果下一次订货量偏小,商品又断货。这个循环会悄悄压缩你最畅销商品的销售规模。

预测之前,先清洗历史数据

动用任何公式之前,先花十分钟看看每个重点 SKU 最近 8 到 12 周的数据,留意四件事:

  • 断货。库存为零的那些天,需求会被低估。按正常的日均销量估出损失的销量,补回去。
  • 一次性大宗订单。某家公司为活动一次买 10 件,不代表趋势。把多出的部分剔除,否则预测会去追一个不会再来的峰值。
  • 促销。折扣周会把未来的销量提前拉到当下。给它打上标记,然后要么剔除,要么把促销周和正常周分开预测。
  • 退货。先决定预测的是总销量还是扣除退货后的净销量。对退货率高的商品,真正需要补的是净需求。

下面是一个假设 SKU 八周的数据。第 2 周有一笔 10 件的一次性大宗订单;第 4 周该商品断货一天(按正常日均 50 ÷ 7 计算,约损失 7 件销量)。

周次记录销量调整清洗后需求
144044
271−10(大宗订单)61
352052
431+7(断货一天)38
555055
649049
763063
838038

清洗后合计 400 件,平均需求为每周 50 件。原始合计是 403,几乎一样,但逐周的走势有两处被扭曲。扭曲有多大因商品而异,对销量更小的 SKU,这甚至可能直接改变结论。

趋势与季节性:普通平均值看不到的两样东西

普通平均值默认下周会和前几周差不多。有两种规律会打破这个假设。

趋势是几个月里销量缓慢上升或下降。如果一款商品连续一个季度每月增长 5%,那么最近八周的平均值永远会落后于现实。

季节性是反复出现的规律:冬季外套、开学前的文具、春节和双十一的购物高峰、雨季、婚庆旺季。最简单的处理办法是季节指数:某个月的平均销量除以全年各月的平均销量。12 月的指数是 1.4,就表示 12 月比普通月份多卖 40%。把基础预测乘以这个指数即可。

要靠谱地估算季节性,至少需要两年的历史。不到两年的话,就把去年同期当作粗略参考,再配合已知活动的日历,别太迷信它。

先用最简单、管用的方法

对于需求稳定的 SKU,移动平均很难被超越:把下周预测设为最近四周的平均值。它容易解释,容易手工核对,反应又足够迟缓,不会被随机波动牵着走。如果想进一步了解指数平滑,以及能加入趋势和季节性的其他方法,免费教材 Forecasting: Principles and Practice 是不错的下一步。

检验任何方法,最靠谱的做法是回测:假装现在是过去,预测你已经知道结果的几周,再对照。用上面清洗后的数据,四周移动平均对第 5 到第 8 周的预测如下:

周次预测(前 4 周平均)实际误差(实际 − 预测)绝对误差
548.7555+6.256.25
651.5049−2.502.50
748.5063+14.5014.50
851.2538−13.2513.25
合计200.00205+5.0036.50

衡量误差:WAPE 与偏差

两个数字就能告诉你预测有没有用。

WAPE(加权绝对百分比误差)是总绝对误差除以总实际需求。按上表:36.5 ÷ 205 = 17.8%。它让销量大的商品占更大权重,当个别周销量很低时也不会失真,普通的 MAPE 做不到这一点。

偏差是总预测减去总实际,再除以总实际:(200 − 205) ÷ 205 = −2.4%。偏差为负,说明你一直预估偏低。如果偏差连续好几周停在同一侧,就该着手修正了,因为这意味着每一次订货都在朝同一个方向出错,要么偏小,要么偏大。

这两个指标要按 SKU 或品类分别跟踪,不要只看全店一个数。全店数字好看,可能掩盖了十几款一直预测不准的商品。也没有放之四海皆准的目标:稳定的日用品 WAPE 可以做到 10% 以下,而时尚单品即使是 40%,只要安全库存设置得当,照样能管好。

从预测到再订货点

预测告诉你会卖多少,再订货点告诉你什么时候下单。规则很简单:

再订货点 = 提前期内的需求 + 安全库存

提前期内的需求等于周均需求乘以供应商的提前期。我们的 SKU 每周卖 50 件,供应商需要 2 周,所以提前期内的需求是 50 × 2 = 100 件。

安全库存是应对销量高于平均的那些周的缓冲。常用公式是:

安全库存 = z × σ × √L

  • z 由你想要的服务水平决定。95% 对应 z = 1.65(精确值为 1.645)。
  • σ 是周需求的标准差:需求围绕平均值通常会波动多大。
  • L 是以周为单位的提前期。之所以开平方,是因为时间越长,波动会部分相互抵消。

在我们清洗后的数据中,各周与 50 的偏离分别是 −6、+11、+2、−12、+5、−1、+13、−12。它们的平方和为 644,644 ÷ 7 = 92,所以 σ = √92 ≈ 9.6 件。在 95% 的服务水平、L = 2 周时:

1.65 × 9.6 × √2 = 1.65 × 9.6 × 1.414 ≈ 22 件

再订货点 = 100 + 22 = 122 件。当可售库存(现有库存加在途库存,再减去已为顾客预留的部分)降到 122 件时,就该下单了。

库存水平图:库存线不断下降,再订货点在 122 件,标出下单时刻、两周提前期,以及能吸收繁忙时段的 22 件安全库存
库存降到 122 件就下单。等货期间会消耗掉提前期内的 100 件需求,最后的 22 件则是应对繁忙周的缓冲。

服务水平的真实成本

这里的服务水平,指一个补货周期内不发生断货的概率。每多提高一点,成本都比上一点更高。

服务水平z安全库存再订货点
90%1.2817117
95%1.6522122
99%2.3332132

从 95% 提到 99%,要多备 10 件,缓冲增加 45%,换来的是预期断货从大约每 20 个周期一次降到大约每 100 个周期一次。对主打商品来说,这是便宜的保险;对周转慢、占地方的商品则不然。

这个公式假定供应商守时。如果提前期本身也会波动,就用扩展公式 z × √(L × σ² + d² × σL²),其中 d 是周均需求,σL 是提前期(以周计)的标准差。实际操作上就是:记录每次真实的到货时间,对不守时的供应商多留一些缓冲。

该订多少

再订货点告诉你什么时候下单,订多少则由目标水平决定:订够数量,把库存位置(现有库存加在途库存,再减去已预留的部分)补回到这个水平。每周复核时,一个实用的目标水平是:提前期内的需求,加上一个复核周的需求,再加安全库存:50 × 3 + 22 = 172 件。如果检查时库存位置是 118,订货量就是 172 − 118 = 54 件。

然后套上供应商的条件。如果最小起订量是 60 件,或者商品按每箱 12 件发货,54 都要向上取整到 60。流程图画出了完整的每周决策,包括数据检查这一步,它能防止断货的那一周把下周的订货量压小。

单个 SKU 每周再订货决策的流程图:对比可售库存与再订货点,清洗当周数据,计算订货量,向上取整到供应商最小起订量,最后下采购单
大多数周在第一个菱形就结束了:库存高于再订货点,不用下单。

ABC/XYZ:每个 SKU 值得多少精力

你不可能对每个 SKU 一视同仁。两种快速分类可以帮你决定精力往哪放。

ABC 按价值给商品排序。按通行做法,A 类是贡献约 80% 收入的头部商品,B 类是接下来的 15%,C 类是最后的 5%。XYZ 按可预测性排序,用变异系数(σ ÷ 平均需求)衡量。常见的分界线是:X 低于 0.5,Y 在 0.5 到 1.0 之间,Z 高于 1.0。可以按自己的业务调整。

我们这个示例 SKU 的变异系数是 9.6 ÷ 50 = 0.19,属于 X。如果它同时是畅销品,就是 AX:最适合自动再订货点加每周复核的类型。

ABC 与 XYZ 的三乘三矩阵,每个格子给出建议的订货策略,从 AX 的自动再订货点到 CZ 的按需订货或直接淘汰
价值高、需求稳的商品值得自动化;价值低、需求乱的商品几乎不值得花精力。

比起标签,更重要的是习惯:CZ 类商品不该占用你每周一个小时,AZ 类商品也不能只交给公式了事。

机器学习的用武之地

机器学习模型在以下几种情况下才物有所值:

  • 成千上万个 SKU,没人能逐个手工调参。
  • 有很多有价值的信号:价格变动、促销、天气、节假日、竞品库存、网站流量。
  • 没有历史数据的新品,模型可以从相似商品中学习。
  • 相互关联的商品,比如替代品和组合装,它们的销量会一起涨跌。

对于只有几百个 SKU、历史数据又短的小店,它并不合适:做好数据清洗的移动平均通常同样准确,而且让人放心得多。一个你无法向采购人员讲清楚的模型,采购人员最后还是会凭自己的判断推翻它。

无论选哪种方法,检验标准都一样:在你自己的回测上,拿它和一个简单基线比。如果它在 WAPE 上没有明显优于移动平均,那就继续用移动平均。在投入任何复杂方案之前,先把基础打牢:准确的库存盘点、每一笔库存变动的记录,以及干净的销售历史。把这些集中管理的软件,比如 StoreConsole 的库存模块,能让清洗这一步少很多手工操作。下面这段简短的演示,展示了按 SKU 设置的低库存提醒,以及为预测提供依据的库存变动记录。

库存功能演示(0:54):仓库、库存变动与低库存提醒,一屏看全。

每周 30 分钟的计划例会

预测只有变成习惯才有回报。前期设置完成后,这套流程半小时就能走完。

  1. 检查数据质量(5 分钟)。查看 A 类商品上周销量中的断货、大宗订单和促销,并做相应调整。
  2. 更新预测(5 分钟)。刷新 A、B 类商品的移动平均;该用季节指数的时候就用上。
  3. 复盘准确度(5 分钟)。查看 A 类商品的 WAPE 和偏差。对偏差连续三周停在同一侧的 SKU,要查明原因。
  4. 核对再订货点(5 分钟)。列出已经到达或低于再订货点的商品,以及在下一批货到之前就会到达的商品。
  5. 下单(5 分钟)。下单,并记下供应商承诺的到货日期,以便和实际到货时间对照。
  6. 处理 Z 类商品(5 分钟)。决定哪些需求乱的商品按实际需求再订货,哪些干脆不再备货。

每个季度,重新审视 ABC/XYZ 分类,更新季节指数,并用最新的 σ 和实测提前期重新计算安全库存。

回到那把水壶。有了 122 件的再订货点和上面的每周流程,可售库存一碰到 122 就下单,此时货架上还剩大约两周半的销量。烛台属于 CZ 类,不再占着仓库角落,而是每季度被问一次“留还是不留”。周五照样会有意外,但不会再是这一种。

核心要点

  • 预测需求,而不是销量:补回断货损失,剔除一次性大宗订单,给促销打标记。
  • 四周移动平均是稳定 SKU 的强力基线;有了两年历史之后,再加上季节指数。
  • 再订货点 = 提前期内的需求 + 安全库存,安全库存 = z × σ × √L。示例中,95% 服务水平下:100 + 22 = 122 件。
  • 按 SKU 跟踪 WAPE 和偏差。长期停在同一侧的偏差,是你可以修正的缺陷。
  • 用 ABC/XYZ 把精力花在刀刃上:AX 自动化,AZ 人工盯,CZ 放手。
  • 只有 SKU 多、信号多时才考虑机器学习,而且前提是它在你自己的数据上胜过简单基线。

Anichur Rahaman 是一名软件架构师,也是 StoreConsole 的创建者。他为成长型企业设计电商与 ERP 系统,专注于事件驱动架构、数据完整性和自托管部署。

About the Author

Anichur Rahaman

Continue Reading