pyflink 时序异常检测——EWMA

EWMA 指数加权移动平均

EWMA 简介

EWMA(Exponentially Weighted Moving Average)是一种常用的统计方法,用于计算时间序列数据的平滑平均值。与简单移动平均(SMA)不同,EWMA 赋予较新的数据更高的权重,而较旧的数据权重逐渐减小。这种加权方式使得 EWMA 对数据的最新变化更加敏感,因此在金融、工程、质量控制等领域广泛应用。

EWMA 公式推导

假设我们有一系列时间序列数据x1,x2,…,xtx_1, x_2, \ldots, x_tx1,x2,,xt,我们希望计算到时间ttt为止的 EWMA 值StS_tSt

基本公式

EWMA 的基本公式为:

St=αxt+(1−α)St−1S_t = \alpha x_t + (1 - \alpha) S_{t-1}St=αxt+(1α)St1

其中:

  • StS_tSt是时间ttt的 EWMA 值。
  • xtx_txt是时间ttt的观测值。
  • St−1S_{t-1}St1是时间t−1t-1t1的 EWMA 值。
  • α\alphaα是平滑因子(smoothing factor),取值范围为0<α≤10 < \alpha \leq 10<α1
初始值

通常,初始值S0S_0S0可以设置为第一个观测值x1x_1x1,或者设置为一个合理的初始估计值。

递推公式

为了更好地理解 EWMA 的递推过程,我们可以将公式展开:

St=αxt+(1−α)St−1S_t = \alpha x_t + (1 - \alpha) S_{t-1}St=αxt+(1α)St1
St−1=αxt−1+(1−α)St−2S_{t-1} = \alpha x_{t-1} + (1 - \alpha) S_{t-2}St1=αxt1+(1α)St2
St−2=αxt−2+(1−α)St−3S_{t-2} = \alpha x_{t-2} + (1 - \alpha) S_{t-3}St2=αxt2+(1α)S

Exponential Weighted Moving Average (EWMA) 是一种基于时间序列数据的异常检测算法,它赋予新数据点一定的权重,随着历史数据的推移逐渐降低权重。这种方法特别适合于检测趋势变化中的异常值,因为它能够捕捉到数据集动态变化的影响。 下面是使用Matlab设计EWMA异常检测算法的基本步骤: 1. **初始化参数**: - `alpha`: 权重因子,通常设置为一个小于1的数(如0.95),表示对新数据的关注度。 - `mean_0` 和 `variance_0`:初始均值和方差,如果没有历史数据可用,可以选择0或根据第一点数据计算。 ```matlab alpha = 0.95; % 权重因子 mean_0 = mean(y); % 初始均值 variance_0 = std(y).^2; % 初始方差 ``` 2. **计算 EWMA 均值和方差**: - 对每个新的数据点 y(t),更新均值和方差。 - 使用指数加权公式,其中 `ewma_mean` 是均值估计,`ewma_variance` 是方差估计。 ```matlab for t = 2:length(y) ewma_mean_t = alpha * y(t) + (1 - alpha) * ewma_mean_{t-1}; ewma_variance_t = alpha * (y(t) - ewma_mean_t).^2 + (1 - alpha) * ewma_variance_{t-1}; end ``` 3. **确定阈值**: - 可以基于标准差的倍数(如3σ原则)设置异常阈值。如果当前的方差超过了某个阈值,认为该数据点是异常的。 - 或者使用Z-score(标准化得分),即 `(y(t) - ewma_mean_t) / sqrt(ewma_variance_t)`。 ```matlab threshold = 3 * sqrt(ewma_variance_t(end)); % 例如3个标准差 ``` 4. **异常检测**: - 如果 `abs(y(t) - ewma_mean_t) > threshold`,标记该数据点为异常。 ```matlab anomalies = abs(y - ewma_mean_t) > threshold; ``` 5. **结果可视化**(可选): - 绘制原始数据和EWMA线以及异常值标记。 ```matlab plot(y, 'o', 'MarkerSize', 8); hold on; plot(1:length(y), ewma_mean, '-r'); fill_between(1:length(y), [ewma_mean - threshold; ewma_mean + threshold], 'r', 'Alpha', 0.2); scatter(find(anomalies), y(find(anomalies)), 'g*'); xlabel('Time'); ylabel('Value'); title('EWMA Anomaly Detection'); hold off; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颹蕭蕭

白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值