定义
来自维基百科
指数移动平均(exponential moving average,EMA或EWMA)是以指数式递减加权的移动平均。各数值的加权影响力随时间而指数式递减,越近期的数据加权影响力越重,但较旧的数据也给予一定的加权值
设时刻 t {t} t的实际数值为 θ t \theta_{t} θt, 时刻 t t t的EMA为 v t v_{t} vt,时刻 t − 1 {t-1} t−1的EMA为 v t − 1 v_{t-1} vt−1,计算时刻 t ≥ 2 {t≥2} t≥2的指数加权平均公式为:
v t = β v t − 1 + ( 1 − β ) θ t v_{t}=\beta v_{t-1}+(1-\beta) \theta_{t} vt=βvt−1+(1−β)θt
β \beta β 是可调节的参数,处于0-1之间,一般大于0.5
推导
一般情况下计算截至时刻 t t t的平均值:
s t = θ 1 + θ 2 + … + θ t t \mathrm{s}_{\mathrm{t}}=\frac{\theta_{1}+\theta_{2}+\ldots+\theta_{\mathrm{t}}}{\mathrm{t}} st=tθ1+θ2+…+θt
v t v_{t} vt是如何表示指数加权移动平均值的呢?
假设 β = 0.9 \beta=0.9 β=0.9 , v 0 = 0 v_{0}=0 v0=0
v t = 0.9 v t − 1 + 0.1 θ t v_{t}=0.9v_{t-1}+0.1\theta_{t} vt=0.9vt−1+0.1θt
v t − 1 = 0.9 v t − 2 + 0.1 θ t − 1 v_{t-1}=0.9v_{t-2}+0.1\theta_{t-1} vt−1=0.9vt−2+0.1θt−1
v
t
−
2
=
0.9
v
t
−
3
+
0.1
θ
t
−
1
v_{t-2}=0.9v_{t-3}+0.1\theta_{t-1}
vt−2=0.9vt−3+0.1θt−1
.
.
.
...
...
v
1
=
0.9
v
0
+
0.1
θ
1
v_{1}=0.9v_{0}+0.1\theta_{1}
v1=0.9v0+0.1θ1
逐层向上代入:
v t = 0.1 ∗ ( θ t + 0.9 ∗ θ t − 1 + 0. 9 2 θ t − 2 + . . . + 0. 9 t − 1 θ 1 ) v_{t}=0.1*(\theta_{t} + 0.9*\theta_{t-1}+0.9^2\theta_{t-2}+{...}+0.9^{t-1}\theta_{1}) vt=0.1∗(θt+0.9∗θt−1+0.92θt−2+...+0.9t−1θ1)
这里 v t v_{t} vt实际上是对时刻 t {t} t之前(包括 t {t} t)实际数值的加权平均,时间越近,权重越大,而且是指数式的,所以叫做指数加权平均。
意义
与一般的加权平均相比,使用指数加权平均的好处在于:
- 不需要保存前面所有时刻的实际数值,并且在计算 v t v_{t} vt的过程中是逐步覆盖的,因此可以减少内存的占用
- 在有些场景下,其实更符合实际情况的,例如股票价格,天气等,上一个时间步对当前时间步影响最大
偏差修正
当假设 v 0 = 0 v_{0}=0 v0=0时,刚开始的几个时间步的 v t v_{t} vt的数值是非常小的,因为缺乏足够多的前面时刻的数据。
v
1
=
0.1
θ
1
v_{1}=0.1\theta_{1}
v1=0.1θ1
v
2
=
0.1
∗
0.9
∗
θ
1
+
0.1
θ
2
v_{2}=0.1*0.9*\theta_{1} + 0.1\theta_{2}
v2=0.1∗0.9∗θ1+0.1θ2
与 t = 1 {t=1} t=1, t = 2 {t=2} t=2的平均值 s 1 s_{1} s1, s 2 s_{2} s2相差非常大,因此需要加入偏差修正项,使得:
v t = v t 1 − β t v_{t} = \frac{v_{t}}{1-\beta^t} vt=1−βtvt
随着时间步 t {t} t增大,修正项 1 − β t {1-\beta^t} 1−βt趋近于0