python——pandas——rolling、ewm函数(滚动平均VS指数加权平均)

在时间序列分析当中,我们经常会遇到时间轴上数据缺失值的补充,常用的方法使用移动平均值。Series的方法fillna()实现了该功能。常用的移动平均值方法有以下两种:

滚动平均值

roll_mean=reindexed['ppg'].rolling(window=30).mean()

滚动平均值的理解较为简单:

如现在有一个Series,包含100个数(\upsilon _{1},\upsilon _{2},\upsilon _{3},......,\upsilon _{100}),现在我们要以10为窗口,计算滚动平均值,过程如下:

对于\upsilon _{1},\upsilon _{2},\upsilon _{3},......,\upsilon _{10},得\overline{\upsilon _{10}}=\frac{\upsilon _{1}+\upsilon _{2}+......+\upsilon _{10}}{10},接着往后滚动一格。

对于\upsilon _{2},\upsilon _{3},\upsilon _{4},......,\upsilon _{11},得\overline{\upsilon _{11}}=\frac{\upsilon _{2}+\upsilon _{3}+......+\upsilon _{11}}{10},接着往后滚动一格。

.......

对于\upsilon _{91},\upsilon _{92},\upsilon _{93},......,\upsilon _{100},得\overline{\upsilon _{100}}=\frac{\upsilon _{91}+\upsilon _{92}+......+\upsilon _{100}}{10}

在以上过程中,窗口10即为rolling()函数的参数window。

特点:

  • Series前9个元素无法填充滚动平均值,
  • 算术平均值赋予每一个元素相同的权重,而指数权重移动平均整合填补了这两点

指数权重移动平均

ewma_mean=reindexed['ppg'].ewm(span=30).mean()

指数加权平均本质上就是一种近似求平均的方法。

我们现在直接给出公式: \overline{\upsilon _{t}}=\beta *\overline{\upsilon _{t-1}}+(1-\beta )\theta _{t}

其中 \overline{\upsilon _{t}}为算得的第t个指数加权平均的结果,\theta _{t}为第t个元素的值,\beta代表可调节的超参数(类似ewm()函数的参数span,控制指数下降的速度)。

同样,如现在有一个Series,包含100个数(\upsilon _{1},\upsilon _{2},\upsilon _{3},......,\upsilon _{100}),我们取\beta =0.9,可得:

\overline{\upsilon _{100}}=0.9*\overline{\upsilon _{99}}+0.1\theta _{100}

\overline{\upsilon _{99}}=0.9*\overline{\upsilon _{98}}+0.1\theta _{99}

\overline{\upsilon _{98}}=0.9*\overline{\upsilon _{97}}+0.1\theta _{98}

......

化简开得到如下表达式:

\overline{\upsilon _{100}}=0.9*(0.9*(0.9*\overline{\upsilon _{97}}+0.1\theta _{98})+0.1\theta _{99})+0.1\theta _{100}

以此类推,进而展开:

\overline{\upsilon _{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^{99}*\theta _{1}

\overline{\upsilon _{99}}=0.1\theta _{99}+0.1*0.9*\theta _{98}+0.1*0.9^{2}*\theta _{97}+0.1*0.9^{3}*\theta _{96}+......+0.1*0.9^{98}*\theta _{1}

......

\overline{\upsilon _{2}}=0.1\theta _{2}+0.1*0.9*\theta _{1}

\overline{\upsilon _{1}}=0.1\theta _{1}

本质就是以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减,越近期的数据加权越重,但较旧的数据也给予一定的加权。

特点:

  • 我们可以看到指数加权平均的求解过程实际上是一个递推的过程,那么这样就会有一个非常大的好处,每当我要求从0到某一时刻(n)的平均值的时候,我并不需要像普通求解平均值的作为,保留所有的时刻值,类和然后除以n。
  • 而是只需要保留0-(n-1)时刻的平均值和n时刻的温度值即可。也就是每次只需要保留常数值,然后进行运算即可,这对于深度学习中的海量数据来说,是一个很好的减少内存和空间的做法。

 

 

 

 

 

 

你可能感兴趣的:(pyhton,pandas)