2011-08-31 72 views
5

在Web應用程序中,每次發生事件時都會觸發一次觸發器。我想檢測'暴力'頻率高峯,這可能會轉化爲異常行爲。實時檢測事件頻率峯值

我能想到的實現這兩個天真的方式:

  • 固定閾值 - 「如果在一分鐘內發生超過500個事件,某事可能是錯誤的」。除非應用程序可以定期調整閾值,否則此方法無法處理平滑閾值泄漏或穩步增加的流量。

  • 與窗口相關的啓發式方法 - 將窗口劃分爲N個相等(?)間隔。當N> 0時,計算在[now-(N * interval_length),現在]中發生的事件的頻率。將它保存在一個列表中。將N減少1.重複。檢測列表異常值。如果有一個離羣比[現已window_length,現]的平均頻率較大,某事可能是錯的。」

我想知道是否有作此問題或公共/標準溶液如果你能想到的任何東西更有效或優雅

預先感謝您

編輯 - 另一項建議

我的一個朋友建議的異常行爲檢測霍爾特 - 溫特斯預測。您可以在下面的鏈接找到有關此方法的詳細信息:

http://www.hpl.hp.com/news/events/csc/2005/jake_slides.pdf

http://www.usenix.org/events/lisa00/full_papers/brutlag/brutlag_html/

回答

1

我不是高手。我會做什麼:

比方說,你只保留最後的n結果和x_n是最後一個樣本(與上一個事件的時間差)。

α_n x_n + α_{n-1}/2 x_{n-1} + ... + α_{1} 2^{-n} x_1 = T 

如果差值T - T_{previous},其中T_{previous}T以前的值,超越極限,做一些事情。

如果您的x_i值是二進制的,可以很好的運用了shiftor操作,如果速度是一個問題。

+0

Tx for answering =)這裏有一些問題.. a)最近的事件,它得到的權重越多,對吧? b)'a'表示什麼?我不能只調整T以避免'n'乘法? – sawidis

+0

良好的觀察。我已經忘記'α_i'的索引了。如果你想要一個特殊的重量。對於每個'i',它可以是'a_i = 1'。如果你的意思是把T移到右邊並添加新的x_n值,那你是對的。 –

+1

是的,更近期==>更重要。 –

0

先手過去X分鐘的值的簡單平均值(保留值)

比較每個新進來的值與平均值:

  • 如果差於Y%以上則其異常值,警報。
  • 如果更少,將其添加到平均值並刪除第一個,fifo樣式。

如果您認爲可以通過「穩步增加的流量」來欺騙它,請將X設置得足夠大。

+1

我認爲我們更關心比前一個信號更頻繁的信號,而不是那些在「一段時間」之前發生的信號。窗戶的長度在哪裏。 –

0

您可以計算指數加權浮點均值估計量,並將其與之前的值進行比較。突然增加可能是你試圖檢測的結果,但結合了一定的最小閾值(例如0到1不顯着)。

但是說當前的浮動平均值從100跳到200,這可能是你想要檢測的事件。