2-3 指数加权平均数
指数加权平均数( Exponentially weighted averages)
指数加权平均,在统计中也叫做指数加权移动平均。
下面列举出表示伦敦一年之中的温度:
如果要计算趋势的话,也就是温度的局部平均值,或者说移动平均值:
先使:${v_0} = 0$,然后计算:
${v_1} = 0.9{v_0} + 0.1{\theta _1}$
${v_2} = 0.9{v_1} + 0.1{\theta _2}$
依次类推:
${v_t} = 0.9{v_{t - 1}} + 0.1{\theta _t}$
将移动平均值即每日温度的指数加权平均值画出来的效果是:
上面的计算更一般的形式是:
${v_t} = \beta {v_{t - 1}} + (1 - \beta ){\theta _t}$
${v_t}$可以理解为大概是$\frac{1}{{(1 - \beta )}}$ 的每日温度,例如$\beta = 0.9$,可以理解为这是十天的平均值,也就是上图红线部分。
如果$\beta$接近于1,比如0.98,则$\frac{1}{{(1 - 0.98)}}$,大概计算过去 50 天的温度,这时作图可以得到绿线:
这种情况下曲线要平坦一些,原因在于你多平均了几天的温度,所以这个曲线,波动更小,更加平坦,缺点是曲线进一步右移,因为现在平均的温度值更多,要平均更多的值,指数加权平均公式在温度变化时,适应地更缓慢一些,所以会出现一定延迟。$\frac{1}{{(1 - 0.98)}}$,相当于给前一天的值加了太多权重,只有 0.02 的权重给了当日的值。
如果$\frac{1}{{(1 - 0.5)}}$,平均了两天的温度,这时作图黄线所示:
由于仅平均了两天的温度,平均的数据太少,所以得到的曲线有更多的噪声,有可能出现异常值,但是这个曲线能够更快适应温度变化。
参数$\beta$,是一个很重要的参数,可以取得稍微不同的效果,往往中间有某个值效果最好,在本例中红线比起绿线和黄线更好地平均了温度。
理解指数加权平均数(Understanding exponentially weighted averages)
将公式${v_t} = 0.9{v_{t - 1}} + 0.1{\theta _t}$倒着写:
${v_{100}} = 0.9{v_{99}} + 0.1{\theta _{100}}$
${v_{99}} = 0.9{v_{98}} + 0.1{\theta _{99}}$
${v_{98}} = 0.9{v_{97}} + 0.1{\theta _{98}}$
依次类推。。。
进一步展开可以表示为:
${v_{100}} = 0.1{\theta _{100}} + 0.1*0.9{\theta _{99}} + 0.1*{(0.9)^2}{\theta _{98}} + 0.1*{(0.9)^3}{\theta _{97}} + 0.1*{(0.9)^4}{\theta _{96}} + ......$
第 100 天计算的数据是一个总和,包括100号数据,99号数据,98号数据等等。
假设我们有一组数据,例如100天中每天的温度,画图表示:
然后我们构建一个指数衰减函数,从 0.1 开始,到$0.1*0.9$,到$0.1*{(0.9)^2}$,以此类推,所以就有了这个指数衰减函数,画图表示:
此时计算${v_{100}}$,只需要将两组数据对应相乘再求和即可。所有的系数相加起来为 1 或者逼近 1,我们称之为偏差修正。
需要平均多少天的温度的计算思路:
${(0.9)^{10}} \approx 0.35$,这个值大概是$\frac{1}{e}$,也就是说:
$\varepsilon {\rm{ = }}0.1$,${(1 - \varepsilon )^{\frac{1}{{(1 - \varepsilon )}}}} \approx \frac{1}{e}$大约是 0.34, 0.35,换句话说, 10 天后,曲线的高度下降到$\frac{1}{3}$相当于在峰值的$\frac{1}{e}$。
所以当$\beta = 0.9$,也即$\varepsilon = 1 - \beta $时只关注了过去 10天的温度,因为 10 天后,权重下降到不到当日权重的三分之一。
所以估算大约平均多少天的温度时,我们使用公式:$\frac{1}{{1 - \beta }}$
不过这只是思考的大致方向,并不是正式的数学证明。
在实际计算时,我们可以使用:$v: = \beta v + (1 - \beta ){\theta _t}$
指数加权平均数公式的好处之一在于,它占用极少内存,电脑内存中只占用一行数字而已,然后把最新数据代入公式,不断覆盖就可以了。
计算指数加权平均数也只占用单行数字的存储和内存,当然它并不是最好的,也不是最精准的计算平均数的方法。如果你要计算移动窗,你直接算出过去 10 天的总和,过去 50 天的总和,除以 10 和 50 就好,如此往往会得到更好的估测。但缺点是,如果保存所有最近的温度数据,和过去 10 天的总和,必须占用更多的内存,执行更加复杂,计算成本也更加高昂。