Automatyczne określanie progu dla wykrywania anomalii

9

Pracuję z szeregiem czasowym wyników anomalii (tłem jest wykrywanie anomalii w sieciach komputerowych). Co minutę otrzymuję wynik anomalii który mówi mi, jak „nieoczekiwany” lub nienormalny jest obecny stan sieci. Im wyższy wynik, tym bardziej nienormalny jest obecny stan. Wyniki bliskie 5 są teoretycznie możliwe, ale prawie nigdy nie występują.xt[0,5]

Teraz chcę wymyślić algorytm lub formułę, która automatycznie określa próg dla tego szeregu czasowego anomalii. Gdy tylko wynik anomalii przekroczy ten próg, uruchamiany jest alarm.

Poniższy rozkład częstotliwości jest przykładem szeregu czasowego anomalii w ciągu 1 dnia. Nie można jednak zakładać, że każda anomalia szeregów czasowych będzie tak wyglądać. W tym szczególnym przykładzie sensowny byłby próg anomalii, taki jak kwantyla .99, ponieważ kilka wyników po prawej stronie można uznać za anomalie.

wprowadź opis zdjęcia tutaj

I taki sam rozkład częstotliwości jak szeregi czasowe (waha się tylko od 0 do 1, ponieważ w szeregach czasowych nie ma wyższych wyników anomalii):

szereg czasowy

Niestety rozkład częstotliwości może mieć kształty, w których kwantyl .99 nie jest użyteczny . Przykład jest poniżej. Prawy ogon jest bardzo niski, więc jeśli jako próg zostanie użyty kwantyl .99, może to spowodować wiele fałszywych trafień. Ten rozkład częstotliwości nie wydaje się zawierać anomalii, dlatego próg powinien znajdować się poza rozkładem na poziomie około 0,25.

wprowadź opis zdjęcia tutaj

Podsumowując, różnica między tymi dwoma przykładami polega na tym, że pierwszy wydaje się wykazywać anomalie, podczas gdy drugi nie.

Z mojego naiwnego punktu widzenia algorytm powinien rozważyć te dwa przypadki:

  • Jeśli rozkład częstotliwości ma duży prawy ogon (tj. Kilka nieprawidłowych wyników), kwantyla .99 może być dobrym progiem.
  • Jeśli rozkład częstotliwości ma bardzo krótki prawy ogon (tj. Brak nienormalnych wyników), wówczas próg powinien znajdować się poza rozkładem.

/ edit: Nie ma też żadnej podstawowej prawdy, tj. dostępne zestawy danych oznaczone. Algorytm jest więc „ślepy” na naturę wyników anomalii.

Teraz nie jestem pewien, jak te obserwacje można wyrazić za pomocą algorytmu lub formuły. Czy ktoś ma sugestię, jak rozwiązać ten problem? Mam nadzieję, że moje wyjaśnienia są wystarczające, ponieważ moje zaplecze statystyczne jest bardzo ograniczone.

Dzięki za pomoc!

kryptron
źródło
Tylko uwaga, pierwszy wykres nie wygląda dla mnie normalnie.
mpiktas
1
@cryptron, kluczowym pytaniem jest, jaki jest próg dźwięku . Na przykład, jeśli każdy podniesiony alarm i niewniesiony alarm pociąga za sobą określone koszty, próg można wybrać w taki sposób, aby zminimalizować całkowite koszty. Do tego potrzebujemy danych o kosztach. Bez dokładnej definicji dźwięku nie można zmierzyć, jak ocenić metodę wybraną do wyboru progu.
mpiktas
@mpiktas: Muszę przyznać, że słowo „dźwięk” było w tym kontekście niefortunne, ponieważ nie mam możliwości rygorystycznej oceny progu (stąd go edytowałem). Zasadniczo próg ma zminimalizować liczbę fałszywych alarmów, ponieważ są one znacznie droższe niż fałszywe negatywy w wykrywaniu anomalii sieciowych.
cryptron
@cryptron, czy masz jakieś dane na temat tego, co jest fałszywie pozytywne?
mpiktas
1
Jestem zmieszany twoimi działkami. To jest jednoznaczny szereg czasowy przyjmujący wartości w ? A może powinno być ? (od spojrzenia na oś x na pierwszym wykresie). Przydałaby się również traceplot. Na przykład, czy otrzymujesz wysokie wyniki za długi okres czasu lub w krótkich seriach (lub obu)? Jeśli jedno i drugie jest bardziej niepokojące? Jeśli potrafisz opracować rozsądny model danych, możesz użyć kwantyli teoretycznych z dopasowanego rozkładu, co rozwiązałoby problem, który zidentyfikowałeś z kwantylami próbek. {xt}0<xt50<xt0.5
JMS

Odpowiedzi:

2

Można znaleźć ten papier interesów. Zobacz także bardziej szczegółową prezentację podobnych modeli w West & Harrison . Są też inne przykłady tego rodzaju monitorowania, wiele z nich jest nowszych, ale to nie jest dokładnie moja sterówka :). Niewątpliwie istnieją odpowiednie implementacje tych modeli, ale nie wiem, co mogą być od razu ...

Podstawową ideą jest to, że masz model przełączający, w którym niektóre obserwacje / sekwencje obserwacji są przypisywane nieprawidłowym stanom sieci, podczas gdy pozostałe są uważane za normalne. Taka mieszanka może stanowić długi prawy ogon na pierwszym poletku. Model dynamiczny może również ostrzegać o nietypowych skokach, takich jak o 8:00 i 4:00 w czasie rzeczywistym, przypisując duże prawdopodobieństwo nowym obserwacjom należącym do stanu problemowego. Można go również łatwo rozszerzyć o takie elementy, jak predyktory, komponenty okresowe (być może twój wynik rośnie / spada wraz z aktywnością) i tego rodzaju rzeczy.

Edycja: Powinienem również dodać, że tego rodzaju model jest „bez nadzoru” w tym sensie, że anomalie są wychwytywane przez pokazywanie dużej średniej zmiany lub wzrostu wariancji. Podczas zbierania danych możesz ulepszyć model dzięki bardziej informacyjnym wcześniejszym dystrybucjom. Być może jednak, gdy będziesz mieć wystarczającą ilość danych (i ciężko zdobytych przykładów szkolenia, radząc sobie z problemami z siecią!), Możesz opracować proste reguły monitorowania (progi itp.)

JMS
źródło
1

Czy masz jakieś „oznaczone” przykłady tego, co stanowi anomalię? tzn. wartości związane z awarią sieci, czy coś takiego?

Jednym z pomysłów, który możesz rozważyć zastosowanie, jest krzywa ROC, która jest przydatna do wybierania progów, które spełniają określone kryteria, takie jak maksymalizacja prawdziwych wyników dodatnich lub minimalizacja fałszywych wyników ujemnych.

Oczywiście, aby użyć krzywej ROC, musisz w jakiś sposób oznaczyć swoje dane.

Zach
źródło
1
Niestety nie mam oznaczonych zestawów danych. Istnieje tylko założenie, że długie ogony lub wartości odstające wskazują na anomalie w zbiorze danych.
cryptron
@cryptron Widzę. Potrzebny jest więc sposób dynamicznej identyfikacji wartości odstających.
Zach
To rozwiązałoby część problemu, tak.
cryptron
1

Wykres „oryginalnej serii” nie musi wykazywać żadnej z góry określonej struktury. Najważniejsze jest to, że wykres „reszt z odpowiedniej serii modeli” musi wykazywać strukturę gaussowską. Tę „strukturę gaussowską” zwykle można uzyskać przez włączenie jednej lub więcej z następujących „transformacji” 1. model ARIMA 2. Korekty lokalnych zmian poziomu lub lokalnych trendów czasowych lub pulsów sezonowych lub zwykłych 3. ważona analiza wykorzystująca udowodnioną niejednorodność wariancji 4. możliwa transformacja mocy (logi itp.) W celu uporania się z heterogenicznością określonej wariancji 5. wykrycie punktów w czasie, w których model / parametry mogły ulec zmianie.

Wykrywanie interwencji dostarczy oświadczenie o statystycznym znaczeniu ostatniego zdarzenia sugerującego normalność lub anomalię

IrishStat
źródło
0

W odpowiedzi PO na moją poprzednią odpowiedź opublikował swoje dane w Internecie. 60 odczytów na godzinę przez 24 godziny przez 6 dni . Ponieważ są to narzędzia przekrojowe szeregów czasowych, takie jak DBSCAN, mają ograniczone znaczenie, ponieważ dane są zależne czasowo. Przy takich danych zwykle szuka się struktury w ciągu godziny i w ciągu dnia. Oprócz tego rodzaju struktur można dążyć do wykrycia anomalii, które mogą mieć charakter jednorazowy (puls) lub systematyczny (przesunięcie poziomu) za pomocą dobrze udokumentowanych metod (patrz literatura Tsay, Tiao, Chen i in. al.) Procedury te doprowadziły do ​​następujących „anomalii”. Należy zauważyć, że przesunięcie poziomu zasadniczo sugeruje oddzielne „klastry”. najczęściej zidentyfikowane anomalie

                                HOUR/MINUTE     TIME
IrishStat
źródło
-1

Po tym, jak mój przyjaciel skierował mnie w stronę algorytmów klastrowania , natknąłem się na DBSCAN, który buduje klastry w przestrzeni n-wymiarowej zgodnie z dwoma predefiniowanymi parametrami. Podstawową ideą jest klastrowanie oparte na gęstości, tj. Gęste regiony tworzą klastry. Wartości odstające są zwracane osobno przez algorytm. Tak więc po zastosowaniu do mojego 1-wymiarowego histogramu DBSCAN jest w stanie powiedzieć mi, czy moje wyniki anomalii zawierają jakieś wartości odstające. Uwaga: W DBSCAN wartość odstająca jest tylko punktem, który nie należy do żadnego klastra. Podczas normalnych operacji oczekuję, że algorytm da tylko jeden klaster (i żadnych wartości odstających).

Po kilku eksperymentach odkryłem, że parametry działają dobrze. Oznacza to, że punkty muszą wykazywać odległość co najmniej 0,1 do „normalnej” gromady, aby mogły być postrzegane jako odstające.ϵ0.1

Po zidentyfikowaniu wartości odstających znalezienie progu sprowadza się do prostych zasad, takich jak:

  • Jeśli zestaw wykazuje wartości odstające, ustaw próg między klastrem „normalnym” i „odstającym”, aby zmaksymalizować margines dla obu.
  • Jeśli zestaw nie wykazuje żadnych wartości odstających, ustaw wartość progową o jedno odchylenie standardowe od skrajnego właściwego punktu.

W każdym razie dziękuję za wszystkie pomocne odpowiedzi!

kryptron
źródło
@crypton Jak DBSCAN radzi sobie z seriami autokorelowanymi. Na przykład szeregi czasowe 1,9,1,9,1,9,5 miałyby wartość wewnętrzną / nietypową. Czy dotyczy to przesunięć poziomów w serii lub szeregu możliwych trendów? W jaki sposób radzi sobie z sezonowymi danymi autoregresyjnymi, gdzie poza powiedzmy czerwcem każdego miesiąca seria jest „regularna”, a każda czerwiec jest „duża”. Czy „duże wartości czerwcowe” są wykrywane jako wartości odstające? Po prostu ciekawy!
IrishStat
2
@IrishStat Zasadniczo klastry DBSCAN wskazują w przestrzeni n-wymiarowej. Dlatego jego przydatność do analizy szeregów czasowych jest bardzo ograniczona. Działa w moim specjalnym przypadku, ponieważ oczekuję tylko jednego skupienia na moim (1-wymiarowym) histogramie. Aby odpowiedzieć na twoje pytania: Gdy użyjesz odpowiednich parametrów, wartość 5 twojego przykładu zostanie wykryta jako odstająca. Przypuszczam, że może poradzić sobie z trendami, ale w szeregach czasowych „1, 2, 3, 4, 5, 6, 7, 2” wartość 2 nie byłaby uważana za wartość odstającą! Mam nadzieję, że daje to przybliżony obraz możliwości i ograniczeń DBSCAN.
cryptron
1
@crypton Dzięki za informację. Wydaje mi się, że odnosząc się do 1 klastra, masz na myśli 1 i tylko 1 średnią. Nawet jeśli nie ma przesunięcia w średniej autokorelacji w twoich danych, renderuje to „szeregi czasowe”, co sugeruje, że DBSCAN może nie być tak użyteczny, jak myślisz, aby oddzielić sygnał od szumu, co prowadzi do skutecznej identyfikacji anamolicznych danych.
IrishStat
1
@crypton Wydaje mi się, że jeden klaster implikuje 1 średnią w porównaniu z szeregiem czasowym, który powiedział 1,1,1,1,2,2,2,2 z niewielkimi odchyleniami wokół tych wartości.
IrishStat
2
@crpton Myślę, że używasz narzędzia przekrojowego dla problemu szeregów czasowych. Opublikuj rzeczywiste dane, a ja postaram się wykazać wykrywanie anomalii za pomocą analizy szeregów czasowych
IrishStat