需求预测:加权平均、指数平滑与最小二乘法

•0•0Comment iconComment iconComment iconComment icon

如何让近期数据在预测中占更大权重,用指数平滑法根据误差调整预测,并通过最小二乘法拟合直线,把握需求趋势。

Writer image

翻译者Editorial

Writer image

修订者Editorial

编辑文章

引言

上一课介绍了两种最简单的预测方法:沿用上一期的数据,以及计算最近几个月的移动平均值。两者有同一个缺点:对历史数据一视同仁。沿用上一期的数据会舍弃此前的全部记录;移动平均则让最近一个月和一年前的数据占相同权重,因此需求发生明显变化时,预测往往跟不上。

这一课,我们再向前走三步:

  • 加权移动平均:让近期月份的数据占更大权重。
  • 指数平滑:只用两个数,就能巧妙地为全部历史数据赋予权重。
  • 最小二乘法(线性回归):首次把趋势纳入预测,也就是识别持续上升或下降的需求。

最后,我们会通过测量各方法的预测误差来比较它们。毕竟没有完美的预测,关键始终是:“对这个产品来说,哪种方法的误差最小?”

加权移动平均

计算 12 个月的移动平均值时,每个月的权重都是 1/12。但对大多数企业来说,上个月发生的事通常比一年前的情况更能说明下个月会怎样。加权移动平均为每期数据分配一个权重(W),使其反映我们认为该期数据有多重要:

预测值 = Σ (Dᵢ × Wᵢ) ÷ Σ Wᵢ

其中,Dᵢ 是第 i 期的需求量,Wᵢ 是该期的权重。如果权重之和已经是 1(例如 0,5;0,3;0,2),只需把各项乘积相加。

举例。最近三个月的消耗量分别为 99、100 和 102 件。我们依次赋予权重 1、2 和 3,让最近一个月的权重最大:

月份消耗量权重消耗量 × 权重
199199
21002200
31023306
合计6605

第 4 个月的预测值 = 605 ÷ 6 = 100,83 件。简单平均值是 100,33;加权平均值更接近最近一个月的数值(102),因为该月占总权重的一半。

权重由管理者确定,通常需要反复试验:用几组权重回测历史数据,选出误差最小的一组(见最后一节)。如果各期权重相同,加权移动平均就等同于普通移动平均。

某商店最近三个月的销量依次为 200、260 和 300 件(从最早到最近)。按 0,2;0,3 和 0,5 的权重计算,下个月的预测销量是多少?

Loading icon

答案:268 件——200 × 0,2 + 260 × 0,3 + 300 × 0,5 = 40 + 78 + 150 = 268。权重之和已经是 1,因此不必再除。253,3 是没有考虑权重的简单平均值。

指数平滑

指数平滑(英语为 exponential smoothing)是库存管理系统中最常用的时间序列预测方法。它也是一种加权平均,但数据越久远,权重就以指数方式递减,因此得名。公式如下:

P(t+1) = α × D(t) + (1 − α) × P(t)

其中:

  • P(t+1) 是下一期的预测值;
  • D(t) 是刚结束的这一期的实际需求量;
  • P(t) 是此前对这一期作出的预测值;
  • α(阿尔法)是平滑系数,取值介于 0 和 1 之间。

把公式换一种写法,含义就更直观:

P(t+1) = P(t) + α × [D(t) − P(t)]

也就是说,新预测值是在原预测值的基础上,加上本期预测误差的一部分;这一部分的比例就是 α。实际销量高于预测值,下一期预测值就上调;低于预测值,就下调。α 决定调整幅度。

为什么叫“指数”平滑?

如果用 P(t) 自身的计算公式替换 P(t),再依次替换 P(t−1),就会得到:

P(t+1) = α × D(t) + α(1 − α) × D(t−1) + α(1 − α)² × D(t−2) + α(1 − α)³ × D(t−3) + ...

每往前追溯一期,需求量的权重都会变成上一期权重的 (1 − α) 倍。因此,全部历史数据都会参与预测,只是越久远的影响越小。更方便的是,计算下一期预测值只需保留两个数:上一期预测值和上一期实际需求量。

三种 α 取值下,各期历史需求量在预测中的权重
三种 α 取值下,各期历史需求量在预测中的权重

图表展示了 α 的影响:

  • α 较小(0,1 至 0,2):权重衰减较慢,较早的数据仍有影响。预测值更稳定,不易受噪声干扰,但对真实变化反应较慢。
  • α 较大(0,5 或更高):权重几乎都集中在最近两三期。预测值反应更快,却也容易追随每一次随机波动。

在实际应用中,需求稳定的产品通常采用 0,1 至 0,3 之间的数值。要找出最适合某个产品的 α,可以用不同取值回测历史数据,选择误差最小的一个。

使用这一方法前,需要确定 α 的取值和一个初始预测值。由于一开始没有上一期预测值,通常会用首次观测到的需求量,或前几个月的平均需求量作为起点。

举例

某公司采用 α = 0,30。7 月第 1 周的预测需求量为 800 件,实际需求量为 850 件。第 2 周该预测多少?

P(2) = 0,30 × 850 + 0,70 × 800 = 255 + 560 = 815 件

也可以从误差入手:实际需求比预测多 850 − 800 = 50 件;按 30% 的比例调整,就是增加 15 件。800 + 15 = 815。

注意:简单指数平滑无法跟踪趋势

简单指数平滑只能根据已经发生的情况调整预测。如果需求每个月都在增长,预测值就会始终落后,持续低估需求。对于有趋势的序列,还有其他变体,例如同时平滑变化斜率的 Holt 方法;不过,处理趋势更经典、也更简单的工具是下面要介绍的线性回归。

某公司采用指数平滑法,α = 0,2。上个月的预测需求量为 1.000 件,实际需求量为 1.200 件。下个月的预测需求量是多少?

Loading icon

答案:1.040 件——误差为 1.200 − 1.000 = 200;按 20% 调整:1.000 + 0,2 × 200 = 1.040。1.160 是把两者的权重颠倒、给实际需求量赋予 0,8 的权重后得到的结果,相当于采用 α = 0,8。

某产品的需求总体稳定,但每周都有较大的随机波动。哪种 α 取值更可能得到有用的预测?

Loading icon

答案:α 较小,例如 0,1,以滤除随机波动——较小的 α 让更多期的数据参与预测,不会被某个异常周左右。α 接近 1 时,预测值几乎就是上一期的实际需求量,也就把噪声一并复制了。

最小二乘法(线性回归)

无论是简单平均、加权平均还是指数平滑,预测值都有向平均水平靠拢的倾向。假设需求量每月增加 50 件,我们却始终用最近三个月的平均值预测,并在预测后用预测值代替实际数据,继续预测下个月,结果会怎样?

月份消耗量
150(实际)
2100(实际)
3150(实际)
4100,00
5116,67
6122,22
7112,96
8117,28
9117,49
10115,91
11116,90
12116,77

尽管实际数据显示需求量每月增长 50 件,预测值却停在 116 到 117 件左右。原因很简单:平均值无法识别增长趋势。

要把趋势纳入预测,可以根据历史数据拟合一条直线:

Y = b + a × X

其中:

  • X 是期数(1、2、3……);
  • Y 是该期的预测需求量;
  • a 是斜率,表示需求量每期增加多少(a 为正)或减少多少(a 为负);
  • b 是截距,即直线与纵轴的交点。

在所有可能的直线中,最小二乘法选取的是让实际值与直线对应值之差的平方和最小的那一条。将误差平方,既能防止高估与低估相互抵消,也会让较大的误差受到更重的惩罚。由此得到的公式是:

a = [N × ΣXY − ΣX × ΣY] ÷ [N × ΣX² − (ΣX)²]

b = [ΣY − a × ΣX] ÷ N

N 是历史数据包含的期数。计算时先求 a,再求 b。

计算示例

生产 HR 零件的 Beta 公司今年的销量依次为:1 月 2.400 件、2 月 2.100 件、3 月 2.550 件、4 月 2.700 件、5 月 2.750 件、6 月 2.800 件、7 月 3.000 件。用趋势线预测,8 月的销量是多少?

先列出公式需要的数据:

月份XY(需求量)X²X × Y
1 月12.40012.400
2 月22.10044.200
3 月32.55097.650
4 月42.7001610.800
5 月52.7502513.750
6 月62.8003616.800
7 月73.0004921.000
合计2818.30014076.600

取 N = 7:

a = [7 × 76.600 − 28 × 18.300] ÷ [7 × 140 − 28²] = [536.200 − 512.400] ÷ [980 − 784] = 23.800 ÷ 196 = 121,43

b = [18.300 − 121,43 × 28] ÷ 7 = [18.300 − 3.400] ÷ 7 = 2.128,57

得到的直线为 Y = 2.128,57 + 121,43 × X。销量平均每月增长约 121 件。预测 8 月时,X = 8:

Y = 2.128,57 + 121,43 × 8 = 3.100 件

最小二乘法拟合的直线跟上了销量增长,简单平均值则落在后面
最小二乘法拟合的直线跟上了销量增长,简单平均值则落在后面

从图中可以看到,七个月的简单平均销量(2.614)比趋势预测值低了近 500 件。如果增长确实会持续,使用平均值预测的企业就可能缺货。

使用回归分析时,还要注意两点:

  • 它假设趋势会延续。向前预测很多期风险很高:销量不可能永远沿直线增长。更适合预测短期需求,并在获得新数据后重新拟合直线。
  • 它无法识别季节性。如果产品在某些月份有销售高峰,可结合上一课介绍的季节性指数:先预测趋势,再乘以该月的指数。

使用电子表格时,不必手工制作整张表:Excel 或 LibreOffice 中的 SLOPE 和 INTERCEPT 函数可以求出 a 和 b,FORECAST(或 FORECAST.LINEAR)函数则能直接计算任意 X 对应的 Y。不过,手算一次有助于理解这些数值从何而来。

某产品最近三个月的销量分别为 100、120 和 140。令 X = 1、2、3,用最小二乘法拟合直线,第 4 个月的预测销量是多少?

Loading icon

答案:160——这些数据本身就在一条直线上:ΣX = 6,ΣY = 360,ΣXY = 100 + 240 + 420 = 760,ΣX² = 14。a = (3 × 760 − 6 × 360) ÷ (3 × 14 − 36) = 120 ÷ 6 = 20,b = (360 − 20 × 6) ÷ 3 = 80。因此 Y = 80 + 20 × 4 = 160。120 是简单平均值,恰好体现了回归分析要避免的问题。

如何选择方法:衡量预测误差

任何预测系统都需要衡量预测值与实际值之间的偏差。最简单的指标是平均绝对偏差(MAD,英语为 mean absolute deviation),也就是将误差取绝对值后求平均:

MAD = Σ |实际需求量 − 预测值| ÷ 期数

对 Beta 公司的销量使用指数平滑法,并以 1 月销量 2.400 件作为 2 月的初始预测值,不同 α 取值对应的 MAD 如下:

方法MAD(2 月至 7 月)
指数平滑,α = 0,1331 件
指数平滑,α = 0,3290 件
指数平滑,α = 0,5254 件
指数平滑,α = 0,8216 件
最小二乘法拟合直线(1 月至 7 月)94 件

从这张表可以看出两点。第一,Beta 的数据呈上升趋势,简单指数平滑的预测误差较大;α 越大,预测越能跟上变化,误差也越小。第二,直线趋势模型的误差明显更小,说明这组数据更适合采用趋势模型。(但有一点需要说明:直线趋势模型的 MAD 是用拟合模型时的同一组数据计算的,这对它有利。更公平的检验方法是用部分历史数据拟合模型,再用随后几个月的数据衡量误差。)

MAD 也是理解安全库存的关键:预测的典型误差越大,为避免缺货而需要准备的额外库存就越多。

一名分析师用同一组 12 个月的历史数据测试了两种方法:3 个月移动平均法的 MAD 为 40 件,α = 0,2 的指数平滑法的 MAD 为 25 件。他应得出什么结论?

Loading icon

答案:对这个产品而言,α = 0,2 的指数平滑法更合适,因为它的平均误差更小——MAD 正是用来比较不同方法在同一组历史数据上的表现,平均偏差越小,方法越值得采用。任何预测都会有误差;关键是选择误差更小的方法。

练习题

基础题

1) 某产品的长期需求相对稳定,采用 0,30 作为指数平滑系数被认为是合适的。上一期的预测需求为 1.100 件,实际需求为 1.000 件。本期的预测需求是多少?

2)(CEFET/RJ,2018 年物流考试)某公司采用指数平滑法,α = 0,30。7 月第 1 周的预测需求为 800 件,实际需求为 850 件。求 7 月第 2 周的预测需求。

3) Vitória 采用指数平滑法,α = 0,8。第 1 个月的预测需求为 1.800 件,实际需求为 1.500 件。第 2 个月的预测需求是多少?

4)(CEFET/RJ,2018 年物流考试)上一期的预测需求为 820 件,最近一期的实际需求为 750 件。若 α = 0,2,用指数平滑法预测下一期需求,结果是多少?

5) 使用第一节加权平均法示例中的数值(99、100 和 102),按权重 0,2、0,3 和 0,5 计算第 4 个月的预测值,并与权重为 1、2 和 3 时的结果比较。

进阶题

6) 某家电产品线过去 7 个月的箱装销量如下。用最小二乘法拟合直线,预测 8 月、9 月和 10 月的销量。

月份箱数
1 月100
2 月110
3 月125
4 月135
5 月140
6 月153
7 月167

7) 某公司需要预测一种季节性产品的销量,已收集过去 4 年各季度的消耗量。如果第 5 年全年预计消耗 3.000 件,各季度预计分别消耗多少?(使用上一课介绍的季节性指数。)

季度第 1 年第 2 年第 3 年第 4 年
1150180230210
2340420510650
3190260350390
4410700750980

8) 某公司用 α = 0,1 的指数平滑法预测每周箱装啤酒的需求。2 月第 1 周的预测需求为 500 箱,实际需求为 450 箱。
a) 2 月第 2 周的预测需求是多少?
b) 如果第 2 周的实际需求为 515 箱,第 3 周的预测需求是多少?

9) 将练习题 8 的 α 改为 0,15,重新计算并比较结果。

10) 某产品过去 7 个月的月需求量依次为:40、44、43、48、50、53 和 55。
a) 分别用 3 个月简单移动平均法,以及权重为 0,2、0,3 和 0,5 的 3 个月加权移动平均法(最近一个月的权重为 0,5),计算第 4 至第 7 个月的预测值。
b) 计算两种方法在这四个月的 MAD。哪种方法的误差更小?
c) 分别用这两种方法,以及根据 7 个月数据拟合的最小二乘直线,预测第 8 个月的需求。
d) 从 a 项的误差来看,两种移动平均法在这组数据上有什么缺点?c 项的三个预测值中,你会采用哪一个?

参考答案

1) P = α × D + (1 − α) × 上一期的 P = 0,3 × 1.000 + 0,7 × 1.100 = 300 + 770 = 1.070 件。也可以从预测误差入手:1.000 − 1.100 = −100;按其中的 30% 调整预测值:1.100 − 30 = 1.070。

2) 0,3 × 850 + 0,7 × 800 = 255 + 560 = 815 件。

3) 0,8 × 1.500 + 0,2 × 1.800 = 1.200 + 360 = 1.560 件。α 越大,预测值越接近最近一期的实际需求。

4) 0,2 × 750 + 0,8 × 820 = 150 + 656 = 806 件。

5) 99 × 0,2 + 100 × 0,3 + 102 × 0,5 = 19,8 + 30 + 51 = 100,8。这与另一组权重得到的结果(100,83)几乎相同,因为权重 1、2 和 3 分别除以总和 6 后,得到 0,17、0,33 和 0,5,与前一组权重很接近。

6) 令 X = 1(1 月)至 7(7 月),N = 7:ΣX = 28;ΣY = 930;ΣX² = 140;ΣXY = 100 + 220 + 375 + 540 + 700 + 918 + 1.169 = 4.022。
a = (7 × 4.022 − 28 × 930) ÷ (7 × 140 − 28²) = (28.154 − 26.040) ÷ (980 − 784) = 2.114 ÷ 196 = 10,79。
b = (930 − 10,786 × 28) ÷ 7 = (930 − 302) ÷ 7 = 89,71。
得到直线 Y = 89,71 + 10,79 × X。8 月(X = 8):89,71 + 10,79 × 8 = 176 箱;9 月(X = 9):187 箱;10 月(X = 10):198 箱。

7) 先计算各季度占当年总量的比例(各年总量:第 1 年 = 1.090;第 2 年 = 1.560;第 3 年 = 1.840;第 4 年 = 2.230)。例如,第 1 年第 1 季度的占比为 150 ÷ 1.090 = 13,8%。

季度第 1 年第 2 年第 3 年第 4 年平均占比
113,8%11,5%12,5%9,4%11,8%
231,2%26,9%27,7%29,1%28,7%
317,4%16,7%19,0%17,5%17,7%
437,6%44,9%40,8%43,9%41,8%

各季度的平均占比乘以 4,即为季节性指数(例如,第 1 季度为 11,8% × 4 = 0,47)。用平均占比乘以全年总量,与用季节性指数乘以季度平均量(3.000 ÷ 4 = 750),得到的结果相同。预测值:第 1 季度 ≈ 3.000 × 11,8% ≈ 354;第 2 季度 ≈ 862;第 3 季度 ≈ 530;第 4 季度 ≈ 1.254。(如果改为汇总 4 年中各季度的消耗量,再除以四年总量 6.720,结果相差不大:344、857、531 和 1.268。)

8) a) 0,1 × 450 + 0,9 × 500 = 45 + 450 = 495 箱。
b) 0,1 × 515 + 0,9 × 495 = 51,5 + 445,5 = 497 箱。

9) a) 0,15 × 450 + 0,85 × 500 = 67,5 + 425 = 492,5,即约 493 箱。
b) 0,15 × 515 + 0,85 × 492,5 = 77,25 + 418,6 = 495,9,即约 496 箱。
α 越大,预测值对需求变化的反应越明显:第 2 周降得更多(492,5 对比 495);虽然随后回升幅度也更大(3,4 箱对比 2 箱),但由于起点更低,第 3 周的预测值仍略低(495,9 对比 497)。

10) a) 和 b)

月份实际值3 个月移动平均误差加权移动平均 0,2/0,3/0,5误差
448(40 + 44 + 43) ÷ 3 = 42,33+5,670,2 × 40 + 0,3 × 44 + 0,5 × 43 = 42,7+5,3
550(44 + 43 + 48) ÷ 3 = 45,00+5,000,2 × 44 + 0,3 × 43 + 0,5 × 48 = 45,7+4,3
653(43 + 48 + 50) ÷ 3 = 47,00+6,000,2 × 43 + 0,3 × 48 + 0,5 × 50 = 48,0+5,0
755(48 + 50 + 53) ÷ 3 = 50,33+4,670,2 × 48 + 0,3 × 50 + 0,5 × 53 = 51,1+3,9
MAD21,33 ÷ 4 = 5,3318,5 ÷ 4 = 4,63

加权移动平均法的误差更小(MAD 为 4,63,对比 5,33),因为它给最近一个月更高的权重。
c) 3 个月移动平均:(50 + 53 + 55) ÷ 3 = 52,67。加权移动平均:0,2 × 50 + 0,3 × 53 + 0,5 × 55 = 10 + 15,9 + 27,5 = 53,4。直线趋势模型:令 X = 1 至 7,ΣX = 28,ΣY = 333,ΣX² = 140,ΣXY = 1.402;a = (7 × 1.402 − 28 × 333) ÷ (7 × 140 − 28²) = (9.814 − 9.324) ÷ 196 = 490 ÷ 196 = 2,5;b = (333 − 2,5 × 28) ÷ 7 = 263 ÷ 7 = 37,57;Y(8) = 37,57 + 2,5 × 8 = 57,57。
d) 两种移动平均法的误差全为正值,说明预测值始终低于实际值。这是移动平均法面对上升趋势时常见的滞后现象(需求每月约增加 2,5)。加权移动平均法减轻了滞后,却没有消除它。因此,第 8 个月最符合数据趋势的是直线趋势模型的预测值,约 58 件。

您觉得这篇文章怎么样?

0%
用户评分 (0)

分享这篇文章!