一个序列的算术平均值和指数滑动平均值之间可以用一套公式来表述。
统一表示
设有一个序列 \(\{x_t\}\),以及一个系数的序列 \(\{\alpha_t\}\),定义一个递归公式:
\[\label{eq:average_recursive} S_t = S_{t-1} + \alpha_t (x_t - S_{t-1}), \quad t \geq 1\]其中 \(S_0\) 是初始值。那么我们通过取不同的 \(\alpha_t\) 就可以得到不同的平均值。
算术平均值 (Mean)
定义 \(\alpha_t = 1/t\),初始值 \(S_0=0\),那么代入式 \eqref{eq:average_recursive} 中,我们得到:
\[\begin{aligned} S_t &= S_{t-1} + \alpha_t (x_t - S_{t-1}) \\ &= S_{t-1} + \frac{1}{t} (x_t - S_{t-1}) \\ &= \frac{t S_{t-1} + x_t - S_{t-1}}{t} \\ &= \frac{(t-1) S_{t-1} + x_t}{t} \\ &= \frac{(t - 2) S_{t-2} + x_{t-1} + x_t}{t} \\ &= \cdots \\ &= \frac{1}{t} \sum_{i=1}^{t} x_i \end{aligned}\]指数滑动平均值 (EMA)
定义 \(\alpha_t = \alpha\),其中 \(0 < \alpha < 1\) 是一个常数,初始值 \(S_0 = x_0\),代入式 \eqref{eq:average_recursive} 中,我们得到:
\[\begin{aligned} S_t &= S_{t-1} + \alpha (x_t - S_{t-1}) \\ &= (1 - \alpha) S_{t-1} + \alpha x_t \\ &= (1 - \alpha)^2 S_{t-2} + \alpha (1 - \alpha) x_{t-1} + \alpha x_t \\ &= \cdots \\ &= (1 - \alpha)^t S_0 + \alpha \sum_{i=1}^{t} (1 - \alpha)^{t - i} x_i \end{aligned}\]特别地,\((1-\alpha)^t + \alpha \sum_{i=1}^{t} (1 - \alpha)^{t - i} = 1\),因此 \(S_t\) 是 \(\{x_i\}\) 的加权平均值,且越近的 \(x_i\) 权重越大。
总结一下
- 选择 \(\alpha_t = 1/t\) 时,递归公式 \eqref{eq:average_recursive} 给出的是平权的序列和,即算术平均值;
- 选择 \(\alpha_t = \alpha\) 时,递归公式 \eqref{eq:average_recursive} 给出的是加权的序列和,越近的值权重越大,即指数滑动平均值。