指数加权移动平均(EWMA, Exponential Weighted Moving Average) 是一种常用于时间序列平滑、异常检测、过程控制等领域的统计方法。相比普通移动平均,它对最近的数据赋予更高权重,对旧数据逐渐“淡化”。
✅ 一、通俗理解
想象你在追踪一个传感器的温度信号:
- 如果今天的温度变化剧烈,你可能更关注今天的数据;
- 昨天、前天的数据也重要,但权重要低一些;
- EWMA 就是一个“记忆逐渐衰退”的平均方法。
✅ 二、公式讲解
假设:
- 当前时间点为 t t t
- 当前观测值为 x t x_t xt
- 当前 EWMA 为 s t s_t st
- 平滑系数为 α \alpha α,范围在 ( 0 , 1 ] (0, 1] (0,1]
EWMA 计算公式:
s t = α ⋅ x t + ( 1 − α ) ⋅ s t − 1 s_t = \alpha \cdot x_t + (1 - \alpha) \cdot s_{t-1} st=α⋅xt+(1−α)⋅st−1
其中:
- s t s_t st:当前的平滑值
- s t − 1 s_{t-1} st−1:上一个时刻的平滑值
- x t x_t xt:当前观测值
- α \alpha α:控制“记忆力”的程度
✅ 三、平滑系数 ( \alpha ) 的意义
α \alpha α | 解释 | 适用场景 |
---|---|---|
趋近于 1 | 强调最新值,反应更灵敏 | 快速检测突变、异常检测 |
趋近于 0 | 更平滑,强调长期趋势 | 长期趋势分析、去除波动噪声 |
✅ 四、初始值设定
- 一般 s 0 = x 0 s_0 = x_0 s0=x0,即用第一个观测值作为初始均值;
- 或者可以使用简单平均的结果作为初始值,增强稳定性。
✅ 五、特点总结
特点 | 描述 |
---|---|
权重指数衰减 | 越旧的数据权重越小 |
实时更新 | 只依赖当前值和上一个 EWMA,适合在线计算 |
响应迅速可控 | 通过 α \alpha α 控制对突变的响应程度 |
常用于过程监控 | 比如在质量控制图(如 EWMA控制图)中监测变量是否偏离控制线 |
✅ 六、图示(如果可视化)
如果画出数据曲线和 EWMA 曲线,会看到:
- 原始数据波动较大
- EWMA 曲线更平滑,且在数据趋势变动时会“有延迟地”跟着变
✅ 七、简单 Python 示例
import numpy as np
import matplotlib.pyplot as plt
# 模拟数据
np.random.seed(0)
x = np.random.randn(100).cumsum()
# 计算 EWMA
alpha = 0.2
s = np.zeros_like(x)
s[0] = x[0]
for t in range(1, len(x)):
s[t] = alpha * x[t] + (1 - alpha) * s[t - 1]
# 画图
plt.plot(x, label="原始数据")
plt.plot(s, label="EWMA (α=0.2)", linewidth=2)
plt.legend()
plt.title("指数加权移动平均(EWMA)示意图")
plt.show()