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


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

    3. 什么是指数平滑

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

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

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

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

    3.1 单指数平滑(Single Exponential Smoothing)

    该平滑方案首先设置S2S2y1,其中Si为平滑观测值或EWMA, y为原始观测值,下标表示时间段,1,2,...n。第3期S3=αy2+(1α)S2,等等。没有S1,平滑序列从第2个观察值的平滑版本开始。

    对于任意时刻t,通过计算得到平滑后的值St

    St=αyt1+(1α)St10<α1t3

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

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

    设置第一个EWMA

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

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

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

    为什么叫“指数”?

    让我们把基本方程展开,先把St1代入基本方程,得到:

    再代入St2,再代入St3,以此类推,直到S2(即y1),可以表明展开方程可以写成:

    例如,平滑值S5的展开方程为:

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

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

    α= 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 单指数平滑预测

    预测公式

    预测公式是基本方程:

    可以写成这样:

    其中ϵtt时期的预测误差(实际预测)。

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

    预测引导(Bootstrapping of Forecasts)

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

    yorgin保持不变。这种技术被称为引导(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)

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

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

    初始值

    与单次平滑的情况一样,双次平滑中Stbt的初始值设置也有多种方案。 S1通常被设为y1。下面是对b1的三个建议值。

    注解

    第一个平滑方程直接调整St为,前一时期的趋势值bt1 加上最后一个平滑值St1。这有助于消除延迟,并将St带到当前值的合适基数。

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

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

    3.4 双指数平滑预测(LASP)

    下一阶段预测值的公式:

    Ft+1=St+bt

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

    Ft+m=St+mbt

    例子

    再次考虑下数据集:

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

    现在我们拟合α=0.3623和γ=1.0的双平滑模型。这些是最低的均方误差的参数估计结果,通过比较原始序列和提前一步预测的预测序列(因为这个版本的双指数平滑法使用当前的系列值来计算一个平滑值,平滑系列不能用于确定一个对应最小均方误差的α)。所选的起始值为S1=y1=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方法,我们至少需要一个完整的季节数据来确定季节指数ItL的初始估计。

    一个完整的季节数据由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
    ˉ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处理过程可以通过对用户友好的软件实现全自动化。

  • 相关阅读:
    【开发技术】SpingBoot数据库与持久化技术,JPA,MongoDB,Redis
    【linux/docker】解决ORA-28000: the account is locked
    Leetcode刷题详解——长度最小的子数组
    TypeScript学习文档-基础篇(完结)
    互斥mutex与spinlock的对比
    noip2012Vigenère 密码
    【Unity插件】 BehaviorTree 原理
    #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
    自定义类型:结构体,枚举,联合
    微信支付——微信退款实战教程(Java版)
  • 原文地址:https://www.cnblogs.com/ljhbjehp/p/15914059.html