时间序列分析(二)--指数平滑


本系列文章翻译自NIST(美国国家标准与技术研究院)的《Engineering Statistic Handbook》(工程统计手册) 的第6章第4节关于时间序列分析的内容。本文的翻译会先使用翻译软件进行初步翻译,笔者在对不恰当之处进行修正。由于笔者水平有限,翻译过程难免有疏漏之处,欢迎大家评论区指出。本站所有文章均为原创,转载请注明出处。

3. 什么是指数平滑

这是一种非常流行的产生平滑时间序列的方案。在单一移动平均(Single Moving Averages)中,过去的观测值的权重是相等的,而指数平滑则随着观测值的变久赋予指数递减的权重。

换句话说,最近的观测结果在预测方面比过去的观测结果具有相对更大的权重。

在移动平均的情况下,分配给观察值的权重是相同的,等于1/N。然而,在指数平滑中,有一个或多个平滑参数需要确定(或估计),这些选择决定了分配给观察的权重。

本节将介绍单指数平滑、双指数平滑和三指数平滑。

3.1 单指数平滑(Single Exponential Smoothing)

该平滑方案首先设置\(S_2\)\(y_1\),其中\(S_i\)为平滑观测值或EWMA, \(y\)为原始观测值,下标表示时间段,1,2,...n。第3期\(S_3 = αy_2 + (1-α)S_2\),等等。没有\(S_1\),平滑序列从第2个观察值的平滑版本开始。

对于任意时刻\(t\),通过计算得到平滑后的值\(S_t\)

\[S_t = αy_{t-1} + (1-α)S_{t-1} \qquad 0< α \leq 1 \quad t \geq 3 \]

这是指数平滑的基本方程,常数或参数\(α\)称为平滑常数。

注意:有一种指数平滑的替代方法,用当前观察值\(y_t\)替换基本方程中的\(y_{t-1}\)。这个公式,由Roberts(1959)提出,在EWMA控制图一节中有描述。这里的公式遵循了Hunter(1986)。

设置第一个EWMA

初始EWMA在后续所有EWMA的计算中起着重要的作用。将\(S_2\)设置为\(y_1\)是一种初始化方法。另一种方法是将其设置为处理的目标。

还有一种可能性是对前四五个观测值进行平均。

\(α\)值越小,初始EWMA的选择越重要。在完成设置之前,用户最好尝试一些方法(假设软件有这些方法)。

为什么叫“指数”?

让我们把基本方程展开,先把\(S_{t-1}\)代入基本方程,得到:

再代入\(S_{t-2}\),再代入\(S_{t-3}\),以此类推,直到\(S_2\)(即\(y_1\)),可以表明展开方程可以写成:

例如,平滑值\(S_5\)的展开方程为:

这说明了指数行为。权值\(α(1?α)^t\)呈几何递减,它们的和是统一的,如下图所示,利用几何级数的一个性质:

从上一个公式中我们可以看到,求和项表明,在每个连续的时间段内,对平滑值\(S_t\)的贡献变小了。

α= 0.3。观察值权重\(α(1?α)^t\)随时间呈指数(几何)递减。

Value weight
last y1 0.2100
y2 0.1470
y3 0.1029
y4 0.0720

α的最佳值是多少?

较久的响应被抑制(平滑)的速度是α值的函数。当α接近1时,衰减迅速,当α接近0时,衰减缓慢。下表说明了这一点。

--------------->过去

观测值

α \((1?α)\) \((1?α)^2\) \((1?α)^3\) \((1?α)^4\)
0.9 0.1 0.01 0.001 0.0001
0.5 0.5 0.25 0.125 0.0625
0.1 0.9 0.81 0.729 0.6561

我们选择α的最佳值,从而得到最小的均方误差。

让我们用一个例子来说明这个原则。考虑以下由12个观察结果组成的数据集:

Time yt S(α=0.1) Error Error squared
1 71
2 70 71 -1.00 1.00
3 69 70.9 -1.90 3.61
4 68 70.71 -2.71 7.34
5 64 70.44 -6.44 41.47
6 65 69.80 -4.80 23.04
7 72 69.32 2.68 7.18
8 78 69.58 8.42 70.90
9 75 70.43 4.57 20.88
10 75 70.88 4.12 16.97
11 75 71.29 3.71 13.76
12 70 71.67 -1.67 2.79

误差平方和(SSE) = 208.94。平方误差的均值(MSE)是SSE /11 = 19.0。

MSE再次计算α=0.5,结果是16.29,所以在这种情况下,我们更偏向α=0.5。我们能做得更好吗?我们可以采用经过验证的试错法。这是一个迭代过程,从0.1到0.9之间的α范围开始。我们确定α的最佳初始选择,然后在α-Δ和α+Δ之间进行搜索。我们可以再重复一次找出最好的α到小数点后3位。

但是有更好的搜索方法,比如Marquardt方法。这是一个非线性优化器,使残差平方和最小化。一般来说,大多数设计良好的统计软件程序应该能够找到使平均误差最小的α值。

3.2 单指数平滑预测

预测公式

预测公式是基本方程:

可以写成这样:

其中\(?_t\)\(t\)时期的预测误差(实际预测)。

换句话说,新的预测是旧的预测加上对上次预测中出现的误差的调整。

预测引导(Bootstrapping of Forecasts)

如果您希望从某个来源(通常是最后的数据点)进行预测,而又没有实际的观测结果,会发生什么?在这种情况下,我们必须修改公式使之成为:

\(y_{orgin}\)保持不变。这种技术被称为引导(bootstrapping)。

Bootstrapping例子

在前面的例子中,最后一个数据点是70,它的预测(平滑值S)是71.7。由于我们确实有数据点和可用的预测,我们可以使用α=0.1的普通公式计算下一个预测值:

但对于下一个预测,我们没有数据点(观测)。现在我们计算:

引导预测与常规预测的比较

两种方法的比较如下表所示:

Period Bootstrap forecast Data Single Smoothing Forecast
13 71.50 75 71.5
14 71.35 75 71.9
15 71.21 74 72.2
16 71.09 78 72.4
17 70.98 86 73.0

单指数平滑和趋势

单平滑(简称单指数平滑)在有趋势时不是很好。单系数α是不够的。

让我们用α = 0.3平滑的数据集来证明这一点:

Data Fit
6.4
5.6 6.4
7.8 6.2
8.8 6.7
11.0 7.3
11.6 8.4
16.7 9.4
15.3 11.6
21.6 12.7
22.4 15.4

当存在趋势时,单指数平滑是不充分的,结果图如下:

3.3 双指数平滑(Double Exponential Smoothing)

正如前面所观察到的,单平滑在有趋势时不能很好地跟踪数据。这种情况可以通过引入第二个方程和第二个常数γ得到改善,它必须与α相结合选择。 这是与双指数平滑相关的两个方程。

注意,在双指数平滑中,使用该序列的当前值来计算其平滑值。

初始值

与单次平滑的情况一样,双次平滑中\(S_t\)\(b_t\)的初始值设置也有多种方案。 \(S_1\)通常被设为\(y_1\)。下面是对\(b_1\)的三个建议值。

注解

第一个平滑方程直接调整\(S_t\)为,前一时期的趋势值\(b_{t?1}\) 加上最后一个平滑值\(S_{t?1}\)。这有助于消除延迟,并将\(S_t\)带到当前值的合适基数。

然后第二个平滑方程更新趋势,其表示为后两个值的差值。该方程的基本形式与单次平滑相似,但在这里应用于趋势的更新。

α和γ的值可以通过非线性优化技术获得,如马夸特(Marquardt)算法。

3.4 双指数平滑预测(LASP)

下一阶段预测值的公式:

\(F_{t+1}=S_t + b_t\)

未来m个阶段的预测值公式:

\(F_{t+m}=S_t + mb_t\)

例子

再次考虑下数据集:

6.4, 5.6, 7.8, 8.8, 11, 11.6, 16.7, 15.3, 21.6, 22.4.

现在我们拟合α=0.3623和γ=1.0的双平滑模型。这些是最低的均方误差的参数估计结果,通过比较原始序列和提前一步预测的预测序列(因为这个版本的双指数平滑法使用当前的系列值来计算一个平滑值,平滑系列不能用于确定一个对应最小均方误差的α)。所选的起始值为\(S_1=y_1=6.4\)

为了比较起见,我们还拟合了一个α=0.977的单指数平滑模型(单指数平滑的对应了最低的MSE)。

双平滑的MSE为3.7024。 单次平滑的MSE为8.8867。

这个例子的平滑结果是:

Data Double Single
6.4 6.4
5.6 6.6 (Forecast = 7.2) 6.4
7.8 7.2 (Forecast = 6.8) 5.6
8.8 8.1 (Forecast = 7.8) 7.8
11.0 9.8 (Forecast = 9.1) 8.8
11.6 11.5 (Forecast = 11.4) 10.9
16.7 14.5 (Forecast = 13.2) 11.6
15.3 16.7 (Forecast = 17.4) 16.6
21.6 19.9 (Forecast = 18.9) 15.3
22.4 22.8 (Forecast = 23.1) 21.5

预测比较

为了了解每种方法是如何预测未来的,我们从最近一次观测中计算了前五个预测,如下所示:

Period Single Double
11 22.4 25.8
12 22.4 28.7
13 22.4 31.7
14 22.4 34.6
15 22.4 37.6

这些结果的绘图(使用预测的双重平滑值)是非常有启发性的。

从图中可以看出,二次平滑比一次平滑更贴近数据。此外,对于预测来说,单次平滑并不比预测直线水平线更好,这在现实中是不太可能发生的。所以在这种情况下,最好采用双重平滑。

最后,让我们比较双平滑和线性回归:

这是一张有趣的图片。这两种技术以相似的方式遵循数据,但回归线更为保守。也就是说,采用回归线比采用双平滑时的增长速度要慢。

技术的选择取决于预测者。如果希望以一种更积极的方式描绘增长过程,那么可以选择双重平滑。否则,回归可能更可取。需要注意的是,在线性回归中,“时间”函数是自变量。第4章讨论了线性回归的基础知识,以及回归估计的细节。

3.5 三指数平滑( Triple Exponential Smoothing)

如果数据显示趋势和季节性会发生什么?

在这种情况下,双重平滑将不起作用。现在我们引入第三个方程来考虑季节性(有时称为周期性)。由此产生的方程组被称为“Holt-Winters”(HW)方法,以发明者的名字命名。

其方法的基本方程为:

这里:

y是观测值

S是平滑的观测值

b是趋势因子

I是季节指数

F是m个阶段后的预测值

t是一个表示时间段的指标

α, β和γ是常数,这3个参数必须根据均方误差是最小的方式来估计出来。这最好留给一个好的软件包处理。

为了初始化HW方法,我们至少需要一个完整的季节数据来确定季节指数\(I_{t?L}\)的初始估计。

一个完整的季节数据由L个周期组成。我们需要估计从一个时期到下一个时期的趋势因子。要做到这一点,建议使用两个完整的季节;也就是2L周期。

趋势因子的初始值

估算初始趋势的一般公式:

季节指数的初始值

正如我们将在示例中看到的,我们使用的数据包含6年,每年4个阶段(即4个季度)。

Step 1: 计算6年每年每个季度的平均值。

Step 2: 将观测结果除以适当的年平均值。

Step 3:现在,通过计算每一行的平均值来形成季节指数。因此,初始季节指数为:

image-20220213181103902

我们现在知道了计算初始估计值背后的代数方法。

下一页包含了一个三重指数平滑的例子。

零系数的情况

有时会发生,一个计算机程序的三重指数平滑输出的趋势(γ)或季节性(β)的最终系数为零。或者更糟的是,两者都输出为零!

这是否表明没有趋势和/或没有季节性?

当然不是!这仅仅意味着趋势和/或季节性的初始值恰巧是正确的。为了达到最低的可能MSE,不需要更新。我们应该检查更新的公式来验证这一点。

3.6 三指数平滑例子

这个例子展示了一个数据集的单指数平滑、双指数平滑和三指数平滑的比较。

下面的数据集代表了24个观察结果。这是六年的季度数据(每年有四个季度)。

Quarter Period Sales Quarter Period Sales
90 1 1 362 93 1 13 544
2 2 385 2 14 582
3 3 432 3 15 681
4 4 341 4 16 557
91 1 5 382 94 1 17 628
2 6 409 2 18 707
3 7 498 3 19 773
4 8 387 4 20 592
92 1 9 473 95 1 21 627
2 10 513 2 22 725
3 11 582 3 23 854
4 12 474 4 24 661

读者可以以文本格式下载数据。

实际时间序列与预测

Plot of raw data with triple exponential forecasts

对比MSEs

MSE α demand γ trend β seasonality
6906 0.4694
5054 0.1086 1.0000
936 1.0000 1.0000
520 0.7556 0.0000 0.9837

通过计算机程序选择更新系数,使每一种方法的均方误差最小。

计算初始趋势的例子

数据集包括季度销售数据。季节是1年,因为一年有4个季度,所以L=4。利用公式我们得到:

计算初始季节指数的例子

1 2 3 4 5 6
1 362 382 473 544 628 627
2 385 409 513 582 707 725
3 432 498 582 681 773 854
4 341 387 474 557 592 661
\(\bar{X}\) 380 419 510.5 591 675 716.75

在这个例子中,我们使用了整整6年的数据。其他方案可能只使用3年或其他年份。也有许多方法可以计算初始估计。

3.7 指数平滑法的总结

总结

多年来,指数平滑已被证明在许多预测情况下是非常有用的。它最初是由C.C. Holt在1957年提出的,用来表示没有趋势的非季节性时间序列。后来,他在1958年提出了一种处理趋势的方法。Winters(1965)将该方法推广到包括季节因素,因此被称为“Holt-Winters方法”。

Holt-Winters方法有3个更新方程,每个方程都有一个常数,范围从0到1。这些方程旨在给予最近的观测值更多的权重,而过去的观测值会减少权重。

这些权重以常数比例呈几何级数递减。

HM处理过程可以通过对用户友好的软件实现全自动化。