9.2 指数加权平均

因为后边的章节需要用到指数加权平均,这一节我们来学习一下指数加权平均的内容。

9.2.1 一个例子

假如你新开了一家小店,并记录小店前六天的收入:

日期 金额
第一天 100
第二天 114
第三天 118
第四天 117
第五天 120
第六天 122

接下来你想要预测第七天的收入。那该用什么方法来预测呢? 平均值 一个简单的预测办法,就是用前六天的平均值来预测。也就是前边6天,在预测第7天收入时,所占的权重都是相等的,均为1/6。 加权平均 根据我们的经验,越新的数据越有参考价值。比如预测第七天收入时,第六天就应该比第一天更有参考价值,因为第七天的运营情况更类似于第六天,而不是第一天。

9.2.2指数加权平均

指数加权平均就利用了加权平均的思想,并且老的数据的权重是按照指数衰减的。 每天利用指数加权平均预测的值我们用ViV_i表示,每天实际的收入值用θi\theta_i表示。比如对于第四天的收入而言,θ4\theta_4就是真实值,117。V4V_4就是利用前三天的收入值进行指数加权平均得到对第四天收入的预测。下边我们就来看一下如何用指数加权平均来预测你每天的收入。 首先我们设置初始条件,V0=0,β=0.7V_0=0,\beta=0.7。其中β\beta是一个超参数,它越小,越老的数据,衰减的越厉害,在最终预测结果里占的比重越小。 首先对第一天收入进行指数加权平均:

V1=βV0+(1β)θ1V_1=\beta V_0+(1-\beta)\theta_1

前二天收入的指数加权平均值它需要用到V1V_1,和第二天的收入值θ2\theta_2

V2=βV1+(1β)θ2V_2=\beta V_1+(1-\beta)\theta_2

前三天收入的指数加权平均值:

V3=βV2+(1β)θ3V_3=\beta V_2+(1-\beta)\theta_3

tt步的指数加权平均值为:

Vt=βVit+(1β)θtV_t=\beta V_{i-t}+(1-\beta)\theta_t

那么,对应到我们的问题里:

V0=0,β=0.7V_0=0,\beta=0.7

V1=0.7V0+0.3θ1V_1=0.7V_0+0.3\theta_1

V2=0.7V1+0.3θ2V_2=0.7V_1+0.3\theta_2

V3=0.7V2+0.3θ3V_3=0.7V_2+0.3\theta_3

V4=0.7V3+0.3θ4V_4=0.7V_3+0.3\theta_4

V5=0.7V4+0.3θ5V_5=0.7V_4+0.3\theta_5

V6=0.7V5+0.3θ6V_6=0.7V_5+0.3\theta_6

我们带入实际的值来进行计算前六天的指数加权平均值:

V6=0.7(0.7V4+0.3θ5)+0.3θ6V_6=0.7(0.7V_4+0.3\theta_5)+0.3\theta_6

=0.72V4+0.3×0.7θ5+0.3θ6=0.7^2V_4+0.3\times0.7\theta_5+0.3\theta_6

=0.72(0.7V3+0.3θ4)+0.3×0.7θ5+0.3θ6=0.7^2(0.7V_3+0.3\theta_4)+0.3\times0.7\theta_5+0.3\theta_6

=0.73V3+0.3×0.72θ4+0.3×0.7θ5+0.3θ6=0.7^3V_3+0.3\times0.7^2\theta_4+0.3\times0.7\theta_5+0.3\theta_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θ6V_6=0.3\times0.7^5\theta_1+0.3\times0.7^4\theta_2+0.3\times0.7^3\theta_3+0.3\times0.7^2\theta_4+0.3\times0.7\theta_5+0.3\theta_6

观察上式,你可以看到越老数据的系数β\beta的指数越大,因为β\beta小于1,所以指数越大,权重越小。 经过计算,可以得到下表:

日期 θ V
第一天 100 30
第二天 114 55.2
第三天 118 74.04
第四天 117 86.9
第五天 120 96.83
第六天 122 104.38

这样我们就可以用前tt天的指数加权平均值来作为对t+1t+1天收入的预测。比如用前6天的指数加权平均值来作为对第7天收入的预测。 指数加权平均算法的优点是:1.算法简单。2.计算过程中只要保存一个变量V,节省存储。

9.2.3对指数加权平均的改进

通过对上边表格的观察,我们发现对于前几天的指数加权平均,得到的值非常小,和实际值偏差较大,这是由于初始设置V0=0V_0=0导致的。如果你计算的序列很长,越到后边的指数加权平均计算,V0V_0的影响就会越小,结果自然得到修正。如果你计算的序列短的话,有什么办法解决吗? 办法是对VV进行修正,在我们计算完VV后,让它除以1βt1-\beta^ttt表示第几天。

V0=0V_0=0

Vt=βVt1+(1β)θtV_t=\beta V_{t-1}+(1-\beta)\theta_t

Vtcorrect=Vt1βtV_t^{correct}=\frac{V_t}{1-\beta^t}

这里我们计算出每天的1βt1-\beta^t,以及修正后的VV值。

日期 θ V 1βt1-\beta^t VtcorrectV_t^{correct}
第一天 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

可以看到经过修正后的VV值就更准确了。我们再观察一下1βt1-\beta^t。发现它逐渐接近于1,也就是说当序列足够长,后面对VV进行修正时基本等于除以1,也就是修正效果很小。

results matching ""

    No results matching ""