需求预测:上一期法与移动平均法

•0•0Comment iconComment iconComment iconComment icon

了解需求预测的时间范围和需求构成、季节性指数、上一期法与简单移动平均法,以及如何用 DAM 衡量预测误差。

Writer image

翻译者Editorial

Writer image

修订者Editorial

编辑文章

引言

预测是企业规划的一部分。制定计划时,企业需要估计未来的需求,并据此安排下一步行动。销售预测可以用于设定目标、编制原材料采购预算、确定库存上限和安全库存,以及规划用工和营运资金等。未来无法确知,因此需要一套估计方法。

这里要区分两个概念。本文所说的预测,是根据历史数据推测未来:观察过去的情况,再将其中的规律延伸下去。预判则是提前考虑可能改变需求的新情况,例如附近将开业的竞争对手,或即将实施的法律变化。

预测期

预测要覆盖多长时间,取决于规划的时间跨度:

  • 长期(一年或更久):推出新产品线、确定新设施的产能。
  • 中期(数月):规划用工、库存需求和原材料采购。
  • 短期(数周):安排机器产能、资金需求、库存调整和工时。

管理层级越高,关注的时间跨度通常越长。高层管理者着眼于长期战略决策,例如开发新产品、建设新设施;运营经理则处理短期事务,例如如何完成未来几周的订单。

所有预测的共同点

  • 没有完美的预测。
  • 预测期越长,估计结果通常越不准确。
  • 预测一类产品的总体需求,通常比逐一预测每种产品更准确,因为单项误差会部分抵消。
  • 任何预测系统都需要纠偏机制:为预测值与实际值的差距设定阈值,一旦超过阈值,就应重新审视模型。本课最后会介绍如何衡量这种误差。

需求的构成

销售历史数据通常混合了四种因素:

  • 水平:需求围绕其波动的平均值。
  • 趋势:需求随时间增长或下降的方向。
  • 季节性:周期性重复的波动,通常发生在一年之内,例如夏季的冰淇淋、1月和2月的学习用品,以及复活节的巧克力。
  • 随机波动:其他因素无法解释的变化,也是预测不可能完全准确的原因。

本课介绍的方法适合处理需求水平。趋势需要使用下一课的方法;季节性则可以通过指数来处理。

季节性指数

衡量季节性的一种简单办法是使用百分比:某个月的销量高于月均水平,其指数就超过100%;低于月均水平,指数就小于100%。

月度季节性指数 = 当月需求量 ÷ 月均需求量

如果有多年的历史数据,计算分子时应取各年同月需求量的平均值。以下是一组月度指数示例:

月份123456789101112
指数90%100%102%110%98%95%105%100%90%90%120%100%

这十二个月的指数平均为100%:高于平均水平的月份与低于平均水平的月份相互抵消。预测某个月的需求时,用该月指数乘以预计的月均需求量(预计年需求量 ÷ 12)。如果企业预计明年销售24.000件,月均为2.000件,那么11月的预测销量就是1,20 × 2.000 = 2.400件。

某企业一年共售出5.400件产品,其中1月的需求量为270件。如果预计明年销售6.000件,1月的预测需求量是多少?

Loading icon

答案:300件。该年的月均需求量为5.400 ÷ 12 = 450,因此1月的季节性指数为270 ÷ 450 = 0,6。明年的预计月均需求量为6.000 ÷ 12 = 500,所以0,6 × 500 = 300。若将指数直接乘以预计年需求量,得到0,6 × 6.000 = 3.600,就是忘了除以12;500则只是月均需求量,尚未考虑季节性。

预测模型

预测模型通常分为两大类。

定性方法主要依靠专家的经验和判断,适用于数据不足或情况全新的场景,例如推出新产品或新技术。常见做法包括:

  • 汇总销售人员各自作出的销量估计;
  • 德尔菲法:专家匿名回答一系列问题,阅读汇总后的群体意见,再分轮修订自己的判断,直至意见趋于一致;
  • 开展客户调查或市场调查;
  • 参照已经上市的类似产品。

定量方法依据历史数据,前提是在一定范围内,过去的信息有助于判断未来。主要方法包括朴素法(未来需求量等于最近一期的实际需求量)、时间序列方法(移动平均、指数平滑、趋势外推)和线性回归等因果模型。本课先介绍前两种;加权移动平均、指数平滑和最小二乘法将在下一课“需求预测 II”中讲解。

上一期实际值法

这是最简单的方法,也称朴素法:下一期的预测需求量等于上一期的实际需求量。

t+1月预测需求量 = t月实际需求量

如果7月售出4.900件,那么8月的预测销量就是4.900件。这看似过于简单,却能立即反映任何变化,因此可以作为比较基准:如果更复杂的方法误差反而更大,就没有发挥作用。它的缺点是会照搬随机波动:一个异常月份的数据也会成为下个月的预测值。

简单移动平均法

“移动”指计算所用的数据窗口随时间推进:每进入一个新时期,就纳入最新数据,同时剔除最早的数据。预测值是最近n期需求量的平均值:

t+1期预测需求量 = (D(t) + D(t−1) + … + D(t−n+1)) ÷ n

其中,D表示各期的实际需求量,n表示参与计算的期数。

取平均值可以减弱随机波动的影响:一个异常月份只占预测值的1/n。这种方法假设,即使需求略有上升或下降,其趋势相对于随机误差仍然较小。

示例。根据以下消耗量,使用12个月移动平均法预测第13个月的需求量:

月份123456789101112
消耗量99100102989996102101104969998

D13 = (99 + 100 + … + 99 + 98) ÷ 12 = 1.194 ÷ 12 = 99,50

更新平均值时,不必重新加总全部数据,只需减去移出窗口的数据,再加上新进入的数据。

新平均值 = 原平均值 + (新数据 − 移出窗口的数据) ÷ n

如果第13个月的实际消耗量为100,那么预测第14个月时,应剔除第1个月的99,纳入第13个月的100:D14 = 99,50 + (100 − 99) ÷ 12 = 99,58。

n该取多大?

n较大时,预测结果稳定、不易受偶然波动影响,但发现真实变化的速度较慢。n较小时,预测能迅速作出反应,却也更容易受到异常月份的干扰。如果需求存在趋势,移动平均值总会滞后:需求上升时,预测值低于实际值;需求下降时,预测值则高于实际值。下图以一家肉制品厂的需求数据展示了这一点。

实际需求量与3个月、5个月移动平均预测值:需求呈上升趋势时,两种预测值都低于实际值,5个月移动平均值滞后得更明显
实际需求量与3个月、5个月移动平均预测值:需求呈上升趋势时,两种预测值都低于实际值,5个月移动平均值滞后得更明显

对于趋势明显的数据序列,应使用下一课介绍的方法来修正这种滞后。

一家工厂第1至第9个月分别销售105、106、110、110、114、121、130、128和137件产品。使用3个月移动平均法和5个月移动平均法,预测第10个月的销量分别是多少?

Loading icon

答案:131,7和126,0。3个月移动平均使用130、128和137,计算得395 ÷ 3 = 131,7;5个月移动平均使用114、121、130、128和137,计算得630 ÷ 5 = 126,0。由于需求正在上升,取平均的时间跨度越长,结果离当前水平越远。

衡量预测误差

只有持续检查预测误差,预测才有实际价值。每一期的误差是实际需求量与预测值之差:

误差 = 实际需求量 − 预测值

直接将误差相加,正误差(预测值低于实际值)和负误差会相互抵消。因此,衡量误差大小要使用平均绝对偏差(DAM,英语缩写为MAD):先取各期误差的绝对值,再求平均。

DAM = |误差|之和 ÷ 期数

示例。一家工厂1月至7月的销量依次为4.100、3.800、3.800、4.000、4.100、4.200和4.900件。在两种方法都能给出预测值的月份(4月至7月),比较上一期实际值法与3个月移动平均法:

月份实际值上一期实际值法误差3个月移动平均误差
4月4.0003.8002003.900,0100,0
5月4.1004.0001003.866,7233,3
6月4.2004.1001003.966,7233,3
7月4.9004.2007004.100,0800,0
DAM275,0341,7

这组销量持续上升的数据中,朴素法的误差小于移动平均法,原因正是移动平均值跟不上上升趋势。关键在于:不存在对所有情况都最好的方法,只有在你的数据上误差更小的方法;DAM可以用来比较。如果使用Python,借助pandas,一行代码就能计算移动平均预测值:vendas.rolling(3).mean().shift(1)(shift(1)确保某个月的预测只使用此前月份的数据)。

误差大小也影响库存安排:预测误差越大,所需的安全库存就越多。有关这一点,将在交货提前期与安全库存一课中讨论。

两种方法在相同的4个月接受测试。方法A的误差分别为+50、−50、+50和−50;方法B的误差分别为+10、+20、+30和+40。以下哪项结论正确?

Loading icon

答案:方法B更好,DAM为25,低于方法A的50,但它倾向于低估实际需求。方法A的DAM = 200 ÷ 4 = 50;方法B的DAM = 100 ÷ 4 = 25。方法A的误差之和为零是一个陷阱:正负误差相加会抵消,所以要计算绝对值。方法B的误差始终为正,说明它存在值得修正的系统性偏差。

参考资料

[1] GONÇALVES, Paulo Sérgio. Administração de materiais. Rio de Janeiro: Elsevier. 关于需求预测的章节。

[2] CORRÊA, H. L.; GIANESI, I. G. N.; CAON, M. Planejamento, programação e controle da produção: MRP II/ERP. São Paulo: Atlas.

练习

基础题

1) 某产品3个月前的需求量为620件,2个月前为570件,上个月为545件。
a) 使用3个月简单移动平均法,本月的预测需求量是多少?
b) 如果本月的实际需求量为560件,下个月的预测需求量是多少?

2) 去年第一季度,产品X的需求量为1.260件,全年总需求量为4.200件。第一季度的季节性指数是多少?

3) 经销商每个月第一天都会打电话询问应配送多少件产品。6月、7月和8月的销量分别为260、290和310件。使用3个月移动平均法,9月的预测销量是多少?如果用9月的预测值代替实际值,10月的预测销量又是多少?

4) 一家商店1月、2月和3月分别售出320、350和380件产品。使用上一期实际值法和3个月移动平均法,4月的预测销量分别是多少?哪一种预测更接近近期的销售走势?

5)连续四个月的实际需求分别为 100、110、90 和 105 单位,预测值分别为 95、100、100 和 100。计算每个月的预测误差和平均绝对偏差(DAM)。

6)判断以下情况分别由需求的哪个组成部分(水平、趋势、季节性或随机波动)解释:
a)每年 11 月和 12 月,意大利圣诞面包的销量都会增长到平时的三倍;
b)过去两年,一款应用的订阅量每月增长约 3%;
c)某个星期六,一场未预报的降雨使一家商店的雨伞销量翻倍;
d)一家面包店平均每天卖出约 800 个面包。

难题

7)(CEFET/RJ,2018 年物流考试)一家零部件制造商在 1 月至 7 月分别售出 4.100、3.800、3.800、4.000、4.100、4.200 和 4.900 件 AM 产品。预测 8 月的销量:
a)使用上一期数值法;
b)使用 n = 3 的移动平均法。
c)将 b 小题对 8 月的预测值视作 8 月的数据,使用 n = 3 预测 9 月的销量。

8)一家肉制品企业使用移动平均法预测下个月的需求。第 1 个月至第 9 个月的需求分别为:105、106、110、110、114、121、130、128 和 137。
a)用 5 个月移动平均法预测第 10 个月的需求。
b)用 3 个月移动平均法预测第 10 个月的需求。
c)你会采用哪一种?为什么?

9)(CEFET/RJ,2018 年物流考试)某产品 2017 年 1 月的需求为 100 单位。2015 年、2016 年和 2017 年的全年需求分别为 1.200、1.100 和 1.000 单位。先用三年移动平均法预测 2018 年的全年需求,再结合 2017 年 1 月的季节性指数,2018 年 1 月的需求预测值是多少?

10)某企业记录了两年的季度需求:

季度第 1 年第 2 年
1200240
2300330
3250270
4450560

a)计算各季度的季节性指数,分子使用该季度两年的平均需求。
b)企业预计第 3 年销售 1.600 单位。各季度的预测销量是多少?

11)某产品过去 7 周的每周需求分别为:50、54、51、55、53、57 和 54。
a)分别使用上一期数值法和 2 周移动平均法,计算第 3 周至第 7 周的预测值。
b)计算这五周中两种方法各自的 DAM。
c)你会采用哪种方法?用它预测的第 8 周需求是多少?

参考答案

1)a)(620 + 570 + 545)÷ 3 = 1.735 ÷ 3 = 578,3。
b)去掉最早的数据(620),加入新数据(560):(570 + 545 + 560)÷ 3 = 1.675 ÷ 3 = 558,3。也可以使用更新公式:578,3 +(560 − 620)÷ 3 = 578,3 − 20 = 558,3。

2)1,2(即 120%)。季度平均需求为 4.200 ÷ 4 = 1.050,而 1.260 ÷ 1.050 = 1,2,说明第一季度的销量高于季度平均水平 20%。1.260 ÷ 4.200 = 0,3,算出的是第一季度销量占全年的比例,而不是季节性指数。

3)9 月:(260 + 290 + 310)÷ 3 = 860 ÷ 3 = 286,7,约为 287 单位。10 月:去掉 6 月的数据,加入 9 月的预测值:(290 + 310 + 286,7)÷ 3 = 886,7 ÷ 3 = 295,6,约为 296 单位。

4)上一期数值法:380(3 月销量)。3 个月移动平均法:(320 + 350 + 380)÷ 3 = 1.050 ÷ 3 = 350。销量每月增加 30,因此上一期的数值(380)更能反映当前走势;移动平均值(350)则有所滞后,仍与 2 月的销量相同。

5)误差 = 实际值 − 预测值:100 − 95 = +5;110 − 100 = +10;90 − 100 = −10;105 − 100 = +5。DAM =(5 + 10 + 10 + 5)÷ 4 = 30 ÷ 4 = 7,5 单位。

6)a)季节性:每年同一时期都会出现。
b)趋势:需求长期持续增长。
c)随机波动:由无法按固定规律预测的偶发事件引起。
d)水平:需求围绕其波动的平均值。

7)a)4.900,即 7 月的销量。
b)(4.100 + 4.200 + 4.900)÷ 3 = 13.200 ÷ 3 = 4.400。
c)(4.200 + 4.900 + 4.400)÷ 3 = 13.500 ÷ 3 = 4.500。由于 8 月尚未结束,计算时先用预测值代替实际数据;取得 8 月实际数据后,应重新计算。

8)a)第 5 个月至第 9 个月:(114 + 121 + 130 + 128 + 137)÷ 5 = 630 ÷ 5 = 126,0。
b)第 7 个月至第 9 个月:(130 + 128 + 137)÷ 3 = 395 ÷ 3 = 131,7。
c)选 3 个月移动平均法。需求呈明显上升趋势,较短的计算周期能减少预测滞后。更好的选择是使用能处理趋势的预测方法,例如下一课介绍的方法。

9)110 单位。
2018 年全年需求预测值:(1.200 + 1.100 + 1.000)÷ 3 = 1.100,折合每月 1.100 ÷ 12 = 91,67。
2017 年 1 月的季节性指数:2017 年月均需求 = 1.000 ÷ 12 = 83,33;指数 = 100 ÷ 83,33 = 1,2。
预测值:1,2 × 91,67 = 110。
全年需求每年减少 100,但移动平均法对 2018 年的预测值为 1.100,高于 2017 年实际的 1.000。这体现了移动平均值相对于趋势的滞后性。

10)a)各季度两年的平均需求:T1 =(200 + 240)÷ 2 = 220;T2 =(300 + 330)÷ 2 = 315;T3 =(250 + 270)÷ 2 = 260;T4 =(450 + 560)÷ 2 = 505。总体季度平均需求:(1.200 + 1.400)÷ 8 = 2.600 ÷ 8 = 325。季节性指数:T1 = 220 ÷ 325 ≈ 0,68;T2 = 315 ÷ 325 ≈ 0,97;T3 = 260 ÷ 325 = 0,80;T4 = 505 ÷ 325 ≈ 1,55。四个指数的平均值为 1,符合预期。
b)预计季度平均销量:1.600 ÷ 4 = 400。T1 = 0,677 × 400 ≈ 271;T2 = 0,969 × 400 ≈ 388;T3 = 0,80 × 400 = 320;T4 = 1,554 × 400 ≈ 622。(四季度之和为 1.601,是四舍五入造成的;使用未取整的数据计算,结果恰好为 1.600。)

11)a)和 b)

周次实际值上一期数值法误差2 周移动平均法误差
35154−3(50 + 54)÷ 2 = 52,0−1,0
45551+4(54 + 51)÷ 2 = 52,5+2,5
55355−2(51 + 55)÷ 2 = 53,00,0
65753+4(55 + 53)÷ 2 = 54,0+3,0
75457−3(53 + 57)÷ 2 = 55,0−1,0
DAM16 ÷ 5 = 3,27,5 ÷ 5 = 1,5

c)选 2 周移动平均法,其 DAM 为 1,5,不到上一期数值法(3,2)的一半。需求每周有升有降,上一期数值法会直接沿用每次波动后的结果,而移动平均法能平滑波动。第 8 周的预测值:(57 + 54)÷ 2 = 55,5。

您觉得这篇文章怎么样?

0%
用户评分 (0)

分享这篇文章!