2014-07-10 162 views
0

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

对于时间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 - 指数加权移动平均

回答

0

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

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

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

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

UPDATE:

在回答你加入我假设的数据你想300是一个异常(你的其他值分别为120和150)。但是,如果300以后的数字更加正常,那么我上面提出的方法将会奏效,170说可能也会被标记为异常。

恕我直言你把重量放在新的价值是过分的。我会做的其他方式:

新= .85 *老+ 0.15 * newDP

,而不是你有什么

新= 0.15 *旧+的.85 * newDP

如果您改变我的建议,您将获得公平的结果。取决于你的总体目标是否合理,结果可能就足够了。

+0

感谢您的回复,我更新了一些示例数据的问题。现在有什么建议? – Aravind

+0

确定更新了我的答案。以前应该问过这个问题,但是有什么理由不能保存记录吗? – wckd

+0

为什么我没有保持记录的原因 1.我必须考虑从时间序列开始的旧值, 2.我不想要基于窗口的模型。 3.Also我不想为每个计算时间的实例获取整个数据系列 我想知道下列逻辑是否会实际工作,但不确定 如果出现以下异常,请执行以下操作: ABS(DP-EMA(新的))> 3 * SD {EMA(旧),EMA(新)} (或) DP(DP-EMA(新))> 3 * EMWSD {EMA - 数据点 EMA - 指数加权移动平均线 – Aravind