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 天的总和,必须占用更多的内存,执行更加复杂,计算成本也更加高昂。 

posted @ 2018-09-15 20:24  刘-皇叔  阅读(1593)  评论(0编辑  收藏  举报