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