2011-08-31 12 views
5

W aplikacji internetowej otrzymuję wyzwalacz za każdym razem, gdy wystąpi zdarzenie. Chcę wykryć "gwałtowne" szczyty częstotliwości, które prawdopodobnie przekładają się na nienormalne zachowanie.Wykrywanie w czasie rzeczywistym szczytów częstotliwości zdarzeń

mogę myśleć o dwóch naiwnych sposobów osiągnięcia tego:

  • Stały próg - „Jeśli więcej niż 500 zdarzeń w ciągu minuty, chyba czegoś złego”. Ta metoda nie może obsługiwać gładkich przekroczeń progów lub stale zwiększać ruchu, chyba że aplikacja może okresowo dostosowywać wartość progową.

  • Hierarchia powiązana z oknem - Podziel okno na N równych (?) Przedziałów. Podczas N> 0, oblicz częstotliwość zdarzeń w [teraz- (N * interval_length), teraz]. Zapisz go na liście. Zmniejsz N o 1. Powtórz. Wykryj listy odstające. Jeśli istnieje poboczna większa niż średnia częstotliwość [teraz-window_length, teraz], czegoś chyba nie tak.”

Chciałbym wiedzieć, czy jest raczej powszechne/standardowe rozwiązanie dla tego problemu lub . czy można myśleć o niczym bardziej efektywny lub eleganckim

góry dziękuję

EDIT -. Kolejna propozycja

mój przyjaciel zasugerował nieprawidłowej wykrywanie zachowanie z Holt-Winters prognozowanie. Możesz znaleźć więcej informacji na temat tej metody w poniższych linków:

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

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

Odpowiedz

1

nie jestem ekspertem. Co powinienem zrobić:

Załóżmy, że przechowujesz tylko ostatnie wyniki: n, a ostatnia próbka (różnica czasu w stosunku do poprzedniego zdarzenia) to x_n.

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

Jeżeli różnica T - T_{previous}, gdzie T_{previous} jest poprzednia wartość T, przekroczy limit, coś zrobić.

Jeśli twoje wartości x_i są binarne, możesz zrobić fajne sztuczki z operacjami shift i or, jeśli prędkość jest sprawą.

+0

Tx za udzielenie odpowiedzi =) Niektóre pytania tutaj. A) Im bardziej nowe wydarzenie, tym większa waga, prawda? b) Co oznacza "a"? Czy nie mógłbym po prostu dopasować T, aby uniknąć multiplikacji "n"? – sawidis

+0

Dobre spostrzeżenia. Zapomniałem o indeksie w 'α_i'. Jeśli chcesz mieć specjalną wagę. Może to być 'a_i = 1' dla każdego' i'. Jeśli chcesz przesunąć T w prawo i dodać nową wartość x_n, masz rację. –

+1

I tak, nowszy ==> ważniejszy. –

0

prostu średnia arytmetyczna nad wartościami ostatniego X minut (zachować wartości)

porównać każdą nową wartość przychodzącego ze średnią:

  • jeśli różnica ta wynosi więcej niż Y%, a następnie jego odstający, alarm.
  • Jeśli mniej, dodaj to do średniej i usuń pierwszy, styl fifo.

Jeśli uważasz, że można go oszukać przy "stale rosnącym natężeniu ruchu", upewnij się, że X jest wystarczająco duży.

+1

Myślę, że bardziej zależy nam na sygnałach, które są teraz częstsze niż poprzednie sygnały, niż te, które wydarzyły się przed "chwilą". Gdzie 'a while' jest długością okna. –

0

Można obliczyć estymator średniej ważonej o wykładniczo ważonej wartości i porównać go z poprzednią wartością. Nagły wzrost jest prawdopodobnie tym, co próbujesz wykryć, ale w połączeniu z pewnym minimalnym progiem (czyli np. 0 do 1 nie jest znaczący).

Powiedzmy, że aktualna zmienna średnia przeskakuje od 100 do 200, co prawdopodobnie jest typem zdarzeń, które chcesz wykryć.

Powiązane problemy