使用指数加权移动平均值进行异常检测

时间:2014-07-10 15:27:30

标签: algorithm math discrete-mathematics

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

对于时间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(新))GT; 3 * SD {EMA(旧),EMA(新)}

(或)

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

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

1 个答案:

答案 0 :(得分:1)

很难说DP是或者不是异常,因为你不知道你的EMA(t-1)是如何发展的。即,如果存在许多数据点,那么它将是比仅存在一个其他数据点更好的标记。

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

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

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

更新:

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

恕我直言,你对新价值的重视是过分的。我会做相反的事情:

  

new = .85 * old + .15 * newDP

而不是你拥有的

  

new = .15 * old + .85 * newDP

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