前言
最近在研究数据流量的异常检测时,看到了指数加权移动平均(EWMA)的概念,于是找了些相关的材料帮助自己理解。
移动平均(Moving Average,MA)作为一种分析时间序列的技术,可过滤高频噪声,提取低频趋势。
移动平均根据过滤函数的不同,可分为简单移动平均,加权移动平均,指数移动平均。
任何移动平均都有一定的滞后性。后文还会解释为什么会产生滞后性, 以及如何减少滞后性。
移动平均的本质
移动平均的本质是低通滤波。它可以过滤掉时间序列中的短期波动,保留长期发展趋势。
一般表达形式
假设有时间序列$y$, 如下图所示,同时假设有一个作用在时域的过滤函数$F$.

理论上,移动平均的通用形式可表示为时间序列和过滤函数在时域上的卷积。滤波结果$x$表示如下
\[x_t = \sum_\limits{i=-\infty}^\infty F_i y_{t-i}\]### 固定时间窗口后的表达形式
由于在实际中通常采用的时间窗口为有限值,因此可以给过滤加一个窗口限制,即过滤函数只在窗口长度$T$内有效,如下图

因此在时间窗口内的滤波:
\[x_t=\sum\limits_{i=t-(T-1)/2}^{t+(T-1)/2}F_iy_{t-i}\]限定固定时间窗口为过去的表达形式
从上文的表达式可以看出,采用了当前时刻t之后的时间序列来计算滤波$x$. 这对于实时数据而言是不可能的操作,因为我们没有未来的数据可以处理。
因此,在实际应用中,选择将时间窗口在时域上向左平移,如下如所示

经过这样的处理,对于实时数据,在当前时刻t的滤波为时间序列和过滤函数在$t-T+1$到$t$之间的卷积:
\[x_t = \sum\limits_{i=t-T+1}^tF_iy_{t-i}\]从中可以看出,**缺乏未来数据才是滞后性的根本原因。 **
简单移动平均
当过滤函数$F=1/T$时,即为简单移动平均。也就是说,对于t时刻的滤波值,我们对时间窗口内的每个点相加取平均。这样的结果大约是$t-(T-1)/2$的滞后。 同时我们可以看出,当时间窗口越大,滞后性越明显。
问题:滞后性能否减轻
直观的,减少时间窗口就可以减少滞后性,但是时间窗口不能太小,否则滤波的作用不明显,也即平滑性不够。
既然没有未来数据,滞后性是不可避免地。但是,减少滞后性是存在的。从简单移动平均的表达式可以看出,时间窗口内不同时刻的值对于滤波值的贡献是相同的,也就是说,对于近期数据不够敏感。因此,如果在计算移动平均时,给近期的数据更高的权重,那么就可以更快的捕捉近期的变化。也就是加权移动平均。
## 加权移动平均
加权移动平均(weighted moving average, WMA)是指过滤函数的取值从当前时刻到$T-1$时刻依次线性递减. 第$t-1$时刻的$F_{t-i}$为$2(T-i)/(T(T+1))$ . 下图是$T=15$时的过滤函数取值变化.

确定权重之后, t时刻的加权移动平均为:
\[WMA_t=\frac{Ty_t+(T-1)y_{t-1}+...+y_{t-T+1}}{T(T+1)/2}\]指数移动平均
指数移动平均(Exponential Moving Average, EMA) 和加权平均类似, 其过滤函数的取值按指数递减.
在t时刻的指数运动平均为:
\[EMA_t=\begin{cases} y_1,t=1\\ a*y_t+(1-a)*EMA_{t-1}, t>1\end{cases}\]$a$表示权重的衰减程度,取值在0到1之间. $a$越大,过去的观测值衰减的越快,说明过去的数值对现在的影响越小.