在时间序列分析当中,我们经常会遇到时间轴上数据缺失值的补充,常用的方法使用移动平均值。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时刻的温度值即可。也就是每次只需要保留常数值,然后进行运算即可,这对于深度学习中的海量数据来说,是一个很好的减少内存和空间的做法。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐