时间序列分析(二)--指数平滑
本系列文章翻译自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:现在,通过计算每一行的平均值来形成季节指数。因此,初始季节指数为:
我们现在知道了计算初始估计值背后的代数方法。
下一页包含了一个三重指数平滑的例子。
零系数的情况
有时会发生,一个计算机程序的三重指数平滑输出的趋势(γ)或季节性(β)的最终系数为零。或者更糟的是,两者都输出为零!
这是否表明没有趋势和/或没有季节性?
当然不是!这仅仅意味着趋势和/或季节性的初始值恰巧是正确的。为了达到最低的可能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 |
读者可以以文本格式下载数据。
实际时间序列与预测
对比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处理过程可以通过对用户友好的软件实现全自动化。