在时间序列分析当中,我们经常会遇到时间轴上数据缺失值的补充,常用的方法使用移动平均值。Series的方法fillna()实现了该功能。常用的移动平均值方法有以下两种:
一、移动平均值
roll_mean=reindexed['ppg'].rolling(window=30).mean()
移动平均值的理解较为简单:
如现在有一个Series,包含100个数(),现在我们要以10为窗口,计算滚动平均值,过程如下:
对于,得
,接着往后滚动一格。
对于,得
,接着往后滚动一格。
.......
对于,得
。
在以上过程中,窗口10即为rolling()函数的参数window。
特点:
- Series前9个元素无法填充滚动平均值,
- 算术平均值赋予每一个元素相同的权重,而指数权重移动平均整合填补了这两点。
二、加权移动平均
ewma_mean=reindexed['ppg'].ewm(span=30).mean()
加权移动平均本质上就是一种近似求平均的方法。
我们现在直接给出公式:
其中 为算得的第t个加权移动平均的结果,
为第t个元素的值,
代表可调节的超参数(类似ewm()函数的参数span,控制指数下降的速度)。
同样,如现在有一个Series,包含100个数(),我们取
,可得:
......
化简开得到如下表达式:
以此类推,进而展开:
......
本质就是以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减,越近期的数据加权越重,但较旧的数据也给予一定的加权。
特点:
- 我们可以看到指数加权平均的求解过程实际上是一个递推的过程,那么这样就会有一个非常大的好处,每当我要求从0到某一时刻(n)的平均值的时候,我并不需要像普通求解平均值的作为,保留所有的时刻值,类和然后除以n。
- 而是只需要保留0-(n-1)时刻的平均值和n时刻的温度值即可。也就是每次只需要保留常数值,然后进行运算即可,这对于深度学习中的海量数据来说,是一个很好的减少内存和空间的做法。