甲乙小朋友的房子

甲乙小朋友很笨,但甲乙小朋友不会放弃

0%

ms实习-指数平滑

指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。

  • 简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;
  • 移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;
  • 而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。

    也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。

一次指数平滑

当时间序列无明显趋势变化,可用一次指数平滑预测;其预测公式为:

\[y_{t}'= ay_{t-1}+(1-a)y_{t-1}'\]

其中:

  • \(y_{t}'\)表示当前预测值
  • \(y_{t-1}'\)表示上一时刻的预测值
  • \(y_{t-1}\)表示上一时刻的真实值

例题:已知某种产品最近15个月的销售量如下表所示:

用一次指数平滑值预测下个月的销售量y16。

为了分析加权系数a的不同取值的特点,分别取a=0.1,a=0.3,a=0.5计算一次指数平滑值,并设初始值为最早的三个数据的平均值,:以a = 0.5的一次指数平滑值计算为例,有

计算得到下表:

按上表可得  时间15月对应的19.9  26.2  28.1可以分别根据预测公式来预测第16个月的销售量。 以a = 0.5为例:    \(y16=28.1\)(万台)

而如果我们生成一个直线,用一次指数平滑,我们会得到:

我们发现,一次平滑存在着严重的滞后性。

由上述例题可得结论

  • 1)指数平滑法对实际序列具有平滑作用,权系数(平滑系数)a  越小,平滑作用越强,但对实际数据的变动反应较迟缓。
  • 2)在实际序列的线性变动部分,指数平滑值序列出现一定的滞后偏差的程度随着权系数(平滑系数)a  的增大而减少
  • 但当时间序列的变动出现直线趋势时,用一次指数平滑法来进行预测仍将存在着明显的滞后偏差。

因此,也需要进行修正。修正的方法也是在一次指数平滑的基础上再进行二次指数平滑,利用滞后偏差的规律找出曲线的发展方向和发展趋势,然后建立直线趋势预测模型,故称为二次指数平滑法。

 二次指数平滑      

一次指数平滑直接利用平滑值作为预测值,二次指数平滑法则是利用平滑值对趋势进行修正后得到的线性平滑模型。 

\[S_{t}^{(1)}=ay_t+(1-a)S_{t-1}^{(1)}\]

\[S_t^{(2)}=aS_t^{(1)}+(1-a)S_{t-1}^{(2)}\]

预测未来T时刻之后的值的计算方式为:

\[y_{t+T}'=a_t+b_tT\]

其中,

\[a_t=2S_t^{(1)}-S_t^{(2)}\]

\[b_t=\frac{a}{1-a}(S_t^{(1)}-S_t^{(2)})\]

需要注意的是,初始时,\(S_{0}^{(1)}=y[1]\)

某地1983年至1993年财政入的资料如下,试用指数平滑法求解趋势直线方程并预测1996年的财政收入。

代码:

1
2
3
4
5
6
7
8
9
10
alpha = 0.9
y = [29,36,40,48,54,62,70,76,85,94,103];
s1 = 23
s2 = 0
for i in range(len(y)):
s1 = alpha*y[i] + (1-alpha)*s1
s2 = alpha*s1 + (1-alpha)*s2
a = 2*s1 - s2
b = alpha/(1-alpha) * (s1-s2)
print(i, y[i], s1, s2)

结果:

1
2
3
4
5
6
7
8
9
10
11
0 29 28.400000000000002 25.560000000000002
1 36 35.239999999999995 34.272
2 40 39.524 38.9988
3 48 47.1524 46.33704
4 54 53.31524 52.61742
5 62 61.131524000000006 60.28011360000001
6 70 69.1131524 68.22984852
7 76 75.31131524 74.603168568
8 85 84.031131524 83.08833522840001
9 94 93.0031131524 92.01163536000001
10 103 102.00031131524 101.001443719716

预测时,只需要向前预测:

1
2
3
for t in range(predict_length):
y_pred = a + b*(t+1)
print(t, y_pred)

我们将以上的数据集的后4个作为验证。

可以看到,预测得还是很准的。

三次指数平滑

  三次指数平滑法,与二次指数平滑法一样,对时间序列的非线性趋势进行修正。是在前两次指数平滑的基础上,使用两次平滑值再进行一次平滑,得到其关于时间的非线性发展趋势模型。

评价

我试了一下指数平滑,无论是一二三次,对周期性数据都不是很友好:

在指数平滑法中,预测成功的关键是a的选择。a的大小规定了在新预测值中新数据和原预测值所占的比例。a值愈大,新数据所占的比重就愈大,原预测值所占比重就愈小,反之亦然。

指数平滑法的缺点:

  • (1)对数据的转折点缺乏鉴别能力,但这一点可通过调查预测法或专家预测法加以弥补。
  • (2)长期预测的效果较差,故多用于短期预测。

指数平滑法的优点:

  • (1)对不同时间的数据的非等权处理较符合实际情况。
  • (2)实用中仅需选择一个模型参数a 即可进行预测,简便易行。
  • (3)具有适应性,也就是说预测模型能自动识别数据模式的变化而加以调整。

参考文献

  1. 指数平滑
  2. 浮生烟雨 的CSDN 博客