9.2 指数加权平均
因为后边的章节需要用到指数加权平均,这一节我们来学习一下指数加权平均的内容。
9.2.1 一个例子
假如你新开了一家小店,并记录小店前六天的收入:
日期 |
金额 |
第一天 |
100 |
第二天 |
114 |
第三天 |
118 |
第四天 |
117 |
第五天 |
120 |
第六天 |
122 |
接下来你想要预测第七天的收入。那该用什么方法来预测呢?
平均值
一个简单的预测办法,就是用前六天的平均值来预测。也就是前边6天,在预测第7天收入时,所占的权重都是相等的,均为1/6。
加权平均
根据我们的经验,越新的数据越有参考价值。比如预测第七天收入时,第六天就应该比第一天更有参考价值,因为第七天的运营情况更类似于第六天,而不是第一天。
9.2.2指数加权平均
指数加权平均就利用了加权平均的思想,并且老的数据的权重是按照指数衰减的。
每天利用指数加权平均预测的值我们用Vi表示,每天实际的收入值用θi表示。比如对于第四天的收入而言,θ4就是真实值,117。V4就是利用前三天的收入值进行指数加权平均得到对第四天收入的预测。下边我们就来看一下如何用指数加权平均来预测你每天的收入。
首先我们设置初始条件,V0=0,β=0.7。其中β是一个超参数,它越小,越老的数据,衰减的越厉害,在最终预测结果里占的比重越小。
首先对第一天收入进行指数加权平均:
V1=βV0+(1−β)θ1
前二天收入的指数加权平均值它需要用到V1,和第二天的收入值θ2:
V2=βV1+(1−β)θ2
前三天收入的指数加权平均值:
V3=βV2+(1−β)θ3
前t步的指数加权平均值为:
Vt=βVi−t+(1−β)θt
那么,对应到我们的问题里:
V0=0,β=0.7
V1=0.7V0+0.3θ1
V2=0.7V1+0.3θ2
V3=0.7V2+0.3θ3
V4=0.7V3+0.3θ4
V5=0.7V4+0.3θ5
V6=0.7V5+0.3θ6
我们带入实际的值来进行计算前六天的指数加权平均值:
V6=0.7(0.7V4+0.3θ5)+0.3θ6
=0.72V4+0.3×0.7θ5+0.3θ6
=0.72(0.7V3+0.3θ4)+0.3×0.7θ5+0.3θ6
=0.73V3+0.3×0.72θ4+0.3×0.7θ5+0.3θ6
继续带入V值,最终得到:
V6=0.3×0.75θ1+0.3×0.74θ2+0.3×0.73θ3+0.3×0.72θ4+0.3×0.7θ5+0.3θ6
观察上式,你可以看到越老数据的系数β的指数越大,因为β小于1,所以指数越大,权重越小。
经过计算,可以得到下表:
日期 |
θ |
V |
第一天 |
100 |
30 |
第二天 |
114 |
55.2 |
第三天 |
118 |
74.04 |
第四天 |
117 |
86.9 |
第五天 |
120 |
96.83 |
第六天 |
122 |
104.38 |
这样我们就可以用前t天的指数加权平均值来作为对t+1天收入的预测。比如用前6天的指数加权平均值来作为对第7天收入的预测。
指数加权平均算法的优点是:1.算法简单。2.计算过程中只要保存一个变量V,节省存储。
9.2.3对指数加权平均的改进
通过对上边表格的观察,我们发现对于前几天的指数加权平均,得到的值非常小,和实际值偏差较大,这是由于初始设置V0=0导致的。如果你计算的序列很长,越到后边的指数加权平均计算,V0的影响就会越小,结果自然得到修正。如果你计算的序列短的话,有什么办法解决吗?
办法是对V进行修正,在我们计算完V后,让它除以1−βt。t表示第几天。
V0=0
Vt=βVt−1+(1−β)θt
Vtcorrect=1−βtVt
这里我们计算出每天的1−βt,以及修正后的V值。
日期 |
θ |
V |
1−βt |
Vtcorrect |
第一天 |
100 |
30 |
0.3 |
100 |
第二天 |
114 |
55.2 |
0.51 |
108.2 |
第三天 |
118 |
74.04 |
0.657 |
112.6 |
第四天 |
117 |
86.9 |
0.76 |
114.3 |
第五天 |
120 |
96.83 |
0.832 |
116 |
第六天 |
122 |
104.38 |
0.942 |
110.8 |
可以看到经过修正后的V值就更准确了。我们再观察一下1−βt。发现它逐渐接近于1,也就是说当序列足够长,后面对V进行修正时基本等于除以1,也就是修正效果很小。