【问题标题】:Anomaly detection using exponential weighted moving average使用指数加权移动平均进行异常检测
【发布时间】:2014-07-10 15:27:30
【问题描述】:

我想使用指数加权移动平均检测异常。

对于时间 t 的实例,我将获得数据点 (DP) 值。
EWMA 常数将为 0.85(假设)。
例如,

Time(t) DataPoint(t)    EMA(t-1)    EMA(t)  
1       120               0          102    
.        .                .           . 
.        .                .           . 
.        .                .           . 
.        .                .           . 
.        .                .           .     
10      300              150        277.5   

我不想将一系列数据点用于计算。

在任何时候例如 10,我想知道数据点 300(在这种情况下)是否异常。我还有 EMA(9)=150 和 EMA(10)=277.5 用于计算(如果需要)

有什么逻辑可以计算吗?

提前致谢!


更新:

我想到了下面的逻辑,但不确定它是否确实有效

ABS(DP-EMA(新))> 3 *SD {EMA(旧),EMA(新)}

(或)

ABS(DP-EMA(新))> 3 *EMWSD {EMA(旧),EMA(新)}

DP - 数据点
EMA - 指数加权移动平均线

【问题讨论】:

  • 你能告诉我你是怎么决定这3个系数的吗?你有更好的公式吗?

标签: algorithm math discrete-mathematics


【解决方案1】:

很难说 DP 是不是异常,因为你不知道你的 EMA(t-1) 有多发达。即,如果有很多数据点,那么它将是一个比只有一个其他数据点更好的标记。

您可以采取的一种方法是设置更改阈值。基本上,如果EMA 的变化超过一个百分比,您就会认为这是异常情况。但是,如果您的数字都非常高并且差异非常小,那么这会受到影响。

您真正需要的是检测异常的标准差。您也可以研究潜在的跟踪,并使用它来更好地确定您是否有异常。

如果您对您将使用的数据有任何了解,请更新您的问题以获得更有针对性的帮助。

更新:

针对您添加的数据,我假设您希望 300 成为异常值(您的其他值是 120 和 150)。我上面建议的方法将起作用,但是如果 300 之后的数字更正常,比如 170,它也可能被标记为异常。

恕我直言,您对新价值观的重视程度过高。我会反其道而行之:

新 = .85 * 旧 + .15 * 新DP

而不是你拥有的

新 = .15 * 旧 + .85 * 新DP

如果你改变我的建议,你会得到公平的结果。根据您的总体目标是什么,公平的结果可能就足够了。

【讨论】:

  • 感谢您的回复,我已经用一些示例数据更新了问题。现在有什么建议吗?
  • OK 更新了我的答案。之前应该问过这个问题,但有什么理由不能保留记录吗?
  • 我没有记录的原因 1.我必须考虑从时间序列开始时的旧值,2.我不想要基于窗口的模型。 3.此外,我不想为每个时间实例获取整个数据系列进行计算我想知道以下逻辑是否真的有效,但如果:ABS(DP-EMA(new))> 3 则不确定 Anomaly 是否正确*SD {EMA(old),EMA(new)} (or) ABS(DP-EMA(new))> 3 *EMWSD {EMA(old),EMA(new)} DP - 数据点 EMA - 指数加权移动平均线
  • 对于您尝试执行的操作,这是我将使用的逻辑。我会选择第二个等式。这种方式有缺点,但它应该是一种检测异常的下降方式。
  • @wckd 你好,我实现了第一个公式,但是 ABS(DP-EMA(new)) 总是等于 3 *SD {EMA(old),EMA(new)} 的一半。有这种情况吗?这是为什么?谢谢,
猜你喜欢
  • 2021-10-11
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 2019-02-13
相关资源
最近更新 更多