Tło problemu: Pracuję nad projektem, który obejmuje pliki dziennika podobne do plików znalezionych w przestrzeni monitorowania IT (według mojego najlepszego zrozumienia przestrzeni IT). Te pliki dziennika są danymi szeregów czasowych, uporządkowanymi w setki / tysiące wierszy o różnych parametrach. Każdy parametr ma wartość liczbową (zmiennoprzecinkową) i dla każdego punktu czasowego istnieje wartość nietrywialna / bezbłędna. Moim zadaniem jest monitorowanie wspomnianych plików dziennika w celu wykrycia anomalii (skoki, upadki, nietypowe wzorce z niektórymi parametrami niezsynchronizowanymi, dziwne zachowanie 1/2 / itd. Pochodnej itp.).
Przy podobnym zadaniu wypróbowałem Splunk z Prelertem, ale obecnie badam opcje open source.
Ograniczenia: Ograniczam się do Pythona, ponieważ dobrze go znam i chciałbym opóźnić przejście na R i powiązaną krzywą uczenia się. O ile nie wydaje się, aby istniało przytłaczające wsparcie dla R (lub innych języków / oprogramowania), chciałbym trzymać się Pythona w tym zadaniu.
Ponadto na razie pracuję w środowisku Windows. Chciałbym kontynuować piaskownicę w systemie Windows na małych plikach dziennika, ale w razie potrzeby mogę przejść do środowiska Linux.
Zasoby: Sprawdziłem następujące z ślepymi zaułkami jako wyniki:
Python lub R do implementacji algorytmów uczenia maszynowego do wykrywania oszustw . Niektóre informacje tutaj są pomocne, ale niestety staram się znaleźć odpowiedni pakiet, ponieważ:
„AnomalyDetection” na Twitterze jest w R i chcę trzymać się Pythona. Co więcej, osobliwość portu Python wydaje mi się powodować problemy z implementacją w środowisku Windows.
Wydaje się, że Skyline, moja kolejna próba, została w zasadzie przerwana (z powodu problemów z githubem ). Nie zagłębiłem się głęboko w to, biorąc pod uwagę, jak mało wsparcia wydaje się być dostępne online.
scikit-learn Nadal badam, ale wydaje się, że jest to znacznie bardziej ręczne. Podejście do chwastów jest dla mnie OK, ale moje doświadczenie w narzędziach do nauki jest słabe, więc chciałbym coś w rodzaju czarnej skrzynki dla aspektów technicznych, takich jak algorytmy, podobne do Splunk + Prelert.
Definicja problemu i pytania: Szukam oprogramowania typu open source, które może mi pomóc w automatyzacji procesu wykrywania anomalii na podstawie plików dziennika szeregów czasowych w Pythonie za pomocą pakietów lub bibliotek.
- Czy istnieją takie rzeczy, które pomagają w moim bezpośrednim zadaniu, czy też są w mojej wyobraźni?
- Czy ktoś może pomóc w konkretnych krokach, które pomogą mi osiągnąć mój cel, w tym podstawowych podstaw lub koncepcji?
- Czy jest to najlepsza społeczność StackExchange, do której można się zwrócić, czy statystyki, matematyka, a nawet bezpieczeństwo lub Stackoverflow są lepszymi opcjami?
EDYCJA [2015-07-23] Należy pamiętać, że najnowsza aktualizacja osobliwości wydaje się być naprawiona w środowisku Windows! Muszę jeszcze potwierdzić, ale powinno być kolejnym przydatnym narzędziem dla społeczności.
EDYCJA [2016-01-19] Drobna aktualizacja. Nie miałem czasu na pracę nad tym i na badania, ale cofam się, aby zrozumieć podstawy tego problemu, zanim kontynuuję badania w konkretnych szczegółach. Na przykład dwa konkretne kroki, które podejmuję:
Począwszy od artykułów z Wikipedii dotyczących wykrywania anomalii [ https://en.wikipedia.org/wiki/Anomaly_detection ], pełne zrozumienie, a następnie przejście w górę lub w dół w hierarchii koncepcji innych powiązanych artykułów z Wikipedii, takich jak [ https: // en.wikipedia.org/wiki/K-nearest_neighbors_alameterm ], a następnie do [ https://en.wikipedia.org/wiki/Machine_learning ].
Badanie technik we wspaniałych ankietach przeprowadzonych przez Chandola i in. 2009 „Anomaly Detection: A Survey” [ http://www-users.cs.umn.edu/~banerjee/papers/09/anomaly.pdf ] oraz Hodge i in. 2004 „Badanie metod wykrywania wartości odstających” [ http://eprints.whiterose.ac.uk/767/1/hodgevj4.pdf ].
Po tym, jak pojęcia zostaną lepiej zrozumiane (mam nadzieję, że pobawię się przykładami zabawek, idę rozwinąć praktyczną stronę), mam nadzieję zrozumieć, które narzędzia Python open source są bardziej odpowiednie dla moich problemów.
Odpowiedzi:
Wykrywanie anomalii lub wykrywanie zdarzeń można wykonać na różne sposoby:
Podstawowy sposób
Pochodna! Jeśli odchylenie sygnału od jego przeszłości i przyszłości jest duże, najprawdopodobniej masz zdarzenie. Można to uzyskać, znajdując duże przejścia przez zero w pochodnej sygnału.
Sposób statystyczny
Cokolwiek znaczy to jego zwykłe, podstawowe zachowanie. jeśli coś odbiega od średniej, oznacza to, że jest to wydarzenie. Należy pamiętać, że średnia w szeregach czasowych nie jest aż tak trywialna i nie jest stała, ale zmienia się zgodnie ze zmianami w szeregach czasowych, dlatego zamiast średniej należy zobaczyć „średnią ruchomą” . To wygląda tak:
Kod średniej ruchomej można znaleźć tutaj . W terminologii przetwarzania sygnałów stosuje się filtr „ dolnoprzepustowy ” , stosując średnią ruchomą.
Możesz postępować zgodnie z poniższym kodem:
Sposób probabilistyczny
Są bardziej wyrafinowane, szczególnie dla osób, które dopiero zaczynają uczenie maszynowe. Filtr Kalmana to świetny pomysł na znalezienie anomalii . Prostsze podejścia probabilistyczne wykorzystujące „oszacowanie największej wiarygodności” również działają dobrze, ale proponuję pozostać przy idei średniej ruchomej. Działa bardzo dobrze w praktyce.
Mam nadzieję, że mógłbym pomóc :) Powodzenia!
źródło
h2o ma moduł wykrywania anomalii i tradycyjnie kod jest dostępny w R.Jednak poza wersją 3 ma również podobny moduł dostępny w pythonie, a ponieważ h2o jest open source, może pasować do twojego rachunku.
Można zobaczyć przykład pracuje nad tutaj
źródło
Niedawno opracowałem zestaw narzędzi: Py thon O utlier D etection toolbox ( PyOD ). Zobacz GitHub .
Jest przeznaczony do identyfikowania odległych obiektów w danych za pomocą podejść zarówno bez nadzoru, jak i nadzorowanych. PyOD jest opisywany dla:
Oto kilka ważnych linków:
Github : https://github.com/yzhao062/Pyod
PyPI : https://pypi.org/project/pyod/
Dokumentacja : https://pyod.readthedocs.io
Interaktywne notesy Jupyter : https://mybinder.org/v2/gh/yzhao062/Pyod/master
Jeśli użyjesz PyOD w publikacji naukowej, będziemy wdzięczni za cytowanie poniższej pracy
Obecnie jest poddawany przeglądowi w JMLR ( ścieżka do uczenia maszynowego typu open source). Zobacz przedruk .
Szybkie wprowadzenie
Zestaw narzędzi PyOD składa się z trzech głównych grup funkcji: (i) algorytmy wykrywania wartości odstających; (ii) struktury zbiorów odstających i (iii) funkcje narzędzia do wykrywania wartości odstających.
Indywidualne algorytmy wykrywania :
Schematy kombinacji detektora / wyników Outlier :
Funkcje narzędzia do wykrywania wartości odstających :
Porównanie wszystkich zaimplementowanych modeli jest dostępne poniżej: ( rysunek , kod , notebooki Jupyter ):
Jeśli jesteś zainteresowany, sprawdź Github ( https://github.com/yzhao062/Pyod ), aby uzyskać więcej informacji.
źródło
Jestem obecnie na tej samej scenie jak ty. Znajduję najlepszą opcję wykrywania anomalii, przeprowadzając badania.
To, co znalazłem, wydaje mi się, że najlepiej pasuje do twoich potrzeb i lepiej jest porównać to, co widziałeś. tj. TwitterAnomalyDetection, SkyLine.
Znalazłem lepszy jest NAB Numenta (Numenta Anomaly Benchmark). Ma również bardzo dobre wsparcie społeczności, a dla ciebie plus jest otwarte oprogramowanie i opracowane w Pythonie. Możesz dodać do niego swój algorytm.
W przypadku algorytmu, LOF lub CBLOF są dobrą opcją.
więc sprawdź to raz. To może ci pomóc. https://github.com/numenta/nab
Jeśli znajdziesz lepszą opcję. Powiedz mi, Proszę. Jestem też na tej samej ścieżce.
Powodzenia !!
źródło
Może to pomaga, ponieważ wspomniałeś o stanach stałych: https://github.com/twitter/AnomalyDetection
https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series
źródło
Zakładam, że funkcją używaną do wykrywania nieprawidłowości jest jeden wiersz danych w pliku dziennika. Jeśli tak, Sklearn jest twoim dobrym przyjacielem i możesz go używać jako czarnej skrzynki. Zapoznaj się z samouczkiem wykrywania SVM jednej klasy i wykrywania nowości .
Jeśli jednak twoja funkcja jest całym plikiem dziennika, musisz najpierw podsumować ją dla jakiejś funkcji o tym samym wymiarze, a następnie zastosować wykrywanie Novealty.
źródło
Nadal istnieje aktywna i rozwinięta wersja Skyline, na wypadek, gdyby ktoś tu wylądował i był zainteresowany.
https://github.com/earthgecko/skyline
https://earthgecko-skyline.readthedocs.io/en/latest
Jestem bieżącym opiekunem projektu i jest on teraz znacznie bardziej zaawansowany niż oryginalna wersja Etsy, pod względem wydajności, interfejsu użytkownika, lepszej obsługi sezonowości i ma dodatkowe funkcje bazy danych anomalii, obliczania korelacji i możliwości odcisków palców i uczyć się nietypowych wzorów.
źródło
Ponieważ masz wielowymiarowe szeregi czasowe, wybrałbym implementację LSTM-RNN, która modeluje dynamikę twojego systemu na podstawie danych treningowych, które zwykle są częściowo nadzorowane (tylko normalna klasa). Oznacza to, że trenujesz swój model, aby dowiedzieć się, co jest „normalne”. Podczas testowania testowane są zarówno warunki normalne, jak i anomalne, aby zobaczyć, jak dobrze model je rozróżnia.
Zaletą sieci neuronowych jest to, że same „uczą się” korelacji krzyżowych między sygnałami wejściowymi; nie musisz ich odkrywać ręcznie. W szczególności LSTM-RNN są idealnym wyborem, jeśli chodzi o modelowanie szeregów czasowych, po prostu ze względu na ich zdolność do zachowania pamięci poprzednich danych wejściowych, podobnie jak model przestrzeni stanów w teorii sterowania (jeśli widzisz analogię).
W Pythonie implementacja LSTM-RNN przy użyciu Keras API jest prawie banalna (na bazie backendu Tensorflow). Ta sieć uczy się szacować interesujący sygnał na podstawie dowolnej liczby sygnałów wejściowych, które następnie porównuje się z rzeczywistą zmierzoną wartością. Jeśli występuje „duże” odchylenie, masz anomalię (biorąc pod uwagę, że model jest wystarczająco dokładny)!
źródło