在做时序预测时,一个显然的思路是:认为离着预测点越近的点,作用越大。
例如某人体重,去年某个月120斤,本月100斤,显然对于预测下个月体重而言,本月的数据影响力更大些。由此,假设随着时间的前推,权重以指数方式下降:最近为$0.8$,然后之前依次为$0.8^2$,$0.8^3$…,最终时间久远的数据,权重将接近于0。
这种将前推时刻的权重,按照指数级进行衰减的思想,这就是指数平滑法的核心思想。
指数平滑法有几种不同形式:
- 一次指数平滑法针对没有趋势和季节性的序列;
- 二次指数平滑法针对有趋势但没有季节性的序列;
- 三次指数平滑法(Holt-Winters)针对有趋势也有季节性的序列。
趋势 -> 线性;季节性 -> 周期性。
所有的指数平滑法,更新平滑值时,都使用上一时刻的平滑值,并使用当前时刻的实际值。
它们通过混合新旧信息来实现,而相关的新旧信息的权重由一个可调整的参数来控制。
一次指数平滑
一次指数平滑法的递推关系如下:
其中,$s_i$是$i$时刻的平滑值,$x_i$是$i$时刻的数据实际值。$\alpha$取值0到1之间,它控制着新旧信息之间的平衡:当$\alpha$接近1,就只保留当前数据点;当$\alpha$接近0时,就只保留前面的平滑值(整个曲线都是平的)。
展开递推关系式:
可以看出,在指数平滑法中,所有先前的观测值都对当前的平滑值产生了影响,但它们所起的作用随着参数$\alpha$的幂的增大而逐渐减小。即,那些相对较早的观测值所起的作用相对较小。因此,称$\alpha$为记忆“衰减因子”可能更合适:因为$\alpha$的值越大,模型对历史数据“遗忘”的就越快。从某种程度来说,指数平滑法就像是拥有无限记忆(平滑窗口足够大)且权值呈指数级递减的移动平均法。
一次指数平滑所得的计算结果可以在数据集及范围之外进行扩展,因此也就可以用来进行预测。
预测时:
$s_i$是最后一个已经算出来的平滑值。$x_{i+1}$代表预测的下一个值。
即,将当前时刻的平滑值,作为对下一时刻值的预测。
二次指数平滑
在介绍二次指数平滑前介绍一下趋势的概念。
趋势,或者说斜率的定义很简单:$b = \Delta y / \Delta x$,其中$\Delta x$为两点在X坐标轴的变化值,而对于一个序列而言,相邻两个点$\Delta x = 1$,因此$b = \Delta y = y_x - y_{x-1}$。
除了用点的增长量表示,也可以用二者的比值表示趋势。比如可以说一个物品比另一个贵20块钱,等价地也可以说贵了5%,前者称为可加的(addtive),后者称为可乘的(multiplicative)。在实际应用中,可乘的模型预测稳定性更佳,但是为了便于理解,我们在这以可加的模型为例进行推导。
指数平滑考虑的是数据的baseline,二次指数平滑在此基础上将趋势作为一个额外考量,保留了趋势的详细信息。即我们保留并更新两个量的状态:平滑后的信号和平滑后的趋势。公式如下:
第二个等式描述了平滑后的趋势。当前的未平滑趋势,是当前平滑值($s_i$)和上一个平滑值($s_{i-1}$)的差;也就是说,当前趋势告诉我们,在上一个时间步长中,平滑信号改变了多少。要想使趋势平滑,我们用一次指数平滑法对趋势进行处理,并使用参数$\beta$(地位类似$\alpha$)。
为获得平滑信号,我们像上次那样进行一次混合,但要同时考虑到上一个平滑信号及趋势。假设单个步长时间内保持着上一个趋势(增加一些),那么第一个等式的最后那项就可以对当前平滑信号进行估计。
预测时:
取最后平滑值,然后每增加一个时间步长,就在该平滑值上增加一次最后那个平滑趋势。
三次指数平滑 Holt-Winters
当一个序列在每个固定的时间间隔中都出现某种重复的模式,就称之具有季节性特征,而这样的一个时间间隔称为一个季节。
一个季节的长度$L$为它所包含的序列点个数。
二次指数平滑考虑了序列的baseline和趋势,三次就是在此基础上增加了一个季节分量。类似于趋势分量,对季节分量也要做指数平滑。
预测时:
上述公式为加法模型。当季节变化在该时间序列中大致保持不变时,通常选择加法模型;而当季节变化与时间序列的水平成比例变化时,通常选择乘法模型。