tło
Pracuję w Network Operations Center, monitorujemy systemy komputerowe i ich wydajność. Jednym z kluczowych wskaźników do monitorowania jest liczba odwiedzających \ klientów aktualnie podłączonych do naszych serwerów. Aby to pokazać, zbieramy takie dane, jak dane szeregów czasowych i rysujemy wykresy. Grafit pozwala nam to zrobić, ma dość bogaty interfejs API, którego używam do budowania systemu ostrzegania, aby powiadomić nasz zespół, jeśli nastąpi nagły spadek (głównie) i inne zmiany. Na razie ustawiłem próg statyczny na podstawie wartości średniej, ale nie działa on zbyt dobrze (istnieje wiele wyników fałszywie dodatnich) z powodu różnych obciążeń w ciągu dnia i tygodnia (współczynnik sezonowości).
Wygląda to mniej więcej tak:
Rzeczywiste dane (przykład dla jednej metryki, zakres czasu 15 min; pierwsza liczba to liczba użytkowników, druga sygnatura czasowa):
[{"target": "metric_name", "datapoints": [[175562.0, 1431803460], [176125.0, 1431803520], [176125.0, 1431803580], [175710.0, 1431803640], [175710.0, 1431803700], [175733.0, 1431803760], [175733.0, 1431803820], [175839.0, 1431803880], [175839.0, 1431803940], [175245.0, 1431804000], [175217.0, 1431804060], [175629.0, 1431804120], [175104.0, 1431804180], [175104.0, 1431804240], [175505.0, 1431804300]]}]
Co próbuję osiągnąć
Stworzyłem skrypt Pythona, który odbiera ostatnie punkty danych, porównuje je ze średnią historyczną i ostrzega o nagłej zmianie lub spadku. Z powodu sezonowości próg „statyczny” nie działa dobrze, a skrypt generuje fałszywe alarmy. Chcę ulepszyć algorytm ostrzegania, aby był bardziej precyzyjny i działał bez ciągłego dostrajania progu ostrzegania.
Czego potrzebuję i co odkryłem
Korzystając z googlingu, pomyślałem, że szukam algorytmów uczenia maszynowego do wykrywania anomalii (te nienadzorowane). Dalsze dochodzenie wykazało, że jest ich mnóstwo i bardzo trudno jest zrozumieć, który z nich ma zastosowanie w moim przypadku. Z powodu mojej ograniczonej wiedzy matematycznej nie potrafię czytać wyrafinowanych prac naukowych i szukam czegoś prostego dla początkującego w tej dziedzinie.
Lubię Pythona i trochę znam R, dlatego chętnie zobaczę przykłady dla tych języków. Proszę polecić dobrą książkę lub artykuł, który pomoże mi rozwiązać mój problem. Dziękuję za poświęcony czas i przepraszam za tak długi opis
Przydatne linki
Podobne pytania:
- Wykrywanie szeregów czasowych i anomalii
- Wykrywanie anomalii szeregów czasowych za pomocą Pythona
- Anomalie szeregów czasowych
- Algorytmy wykrywania anomalii szeregów czasowych
- Zastosowanie falek do algorytmów wykrywania anomalii opartych na szeregach czasowych
- Którego algorytmu powinienem użyć?
Zasoby zewnętrzne:
auto.arima
funkcji z doskonałego forecast
pakietu R. (patrz jstatsoft.org/v27/i03/paper ). Możesz dostroić poziomy ufności, dostosowując level
parametr, np data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
.