Фон
Я працюю в Центрі мережевих операцій, ми відстежуємо комп'ютерні системи та їх роботу. Однією з ключових показників для моніторингу є кількість відвідувачів / клієнтів, які зараз підключені до наших серверів. Щоб зробити його видимим, ми (команда Ops) збираємо такі показники, як дані часових рядів та малюємо графіки. Графіт дозволяє нам це робити, він має досить багатий API, який я використовую для побудови системи оповіщення для сповіщення нашої команди, якщо трапляються раптові падіння (в основному) та інші зміни. Наразі я встановив статичний поріг на основі середнього значення, але він працює не дуже добре (є багато хибнопозитивних) через різне навантаження вдень та тижні (коефіцієнт сезонності).
Це виглядає приблизно так:
Фактичні дані (приклад для однієї метрики, часовий діапазон 15 хв; перший номер - кількість користувачів, другий - штамп часу):
[{"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]]}]
Що я намагаюся досягти
Я створив скрипт Python, який отримує останні точкові дані, порівнює їх із середніми історичними показниками та попереджає, якщо є різка зміна чи падіння. Через сезонність "статичний" поріг не працює добре, і сценарій генерує помилкові сповіщення. Я хочу вдосконалити алгоритм оповіщення, щоб бути більш точним і змусити його працювати без постійної настройки порогу оповіщення.
Що мені потрібно порадити і речі, які я виявив
За допомогою googling я зрозумів, що шукаю алгоритми машинного навчання для виявлення аномалій (без нагляду). Подальше дослідження показало, що їх є багато, і дуже важко зрозуміти, який із них застосовний у моєму випадку. Через свої обмежені знання з математики я не можу читати складних наукових робіт і шукаю для початківців чогось простого.
Мені подобається Python і трохи знайомий з R, тому я буду радий побачити приклади цих мов. Будь ласка, рекомендуйте гарну книгу чи статтю, яка допоможе мені вирішити свою проблему. Дякую за ваш час і вибачте мене за такий довгий опис
Корисні посилання
Подібні запитання:
- Виявлення часових рядів та аномалії
- Виявлення аномалії часового ряду з Python
- Аномалії часових рядів
- Алгоритми виявлення аномалії часових рядів
- Застосування вейвлетів до алгоритмів виявлення аномалій на основі часових рядів
- Який алгоритм я повинен використовувати?
Зовнішні ресурси:
auto.arima
функцію з відмінного forecast
пакету R (див. Jstatsoft.org/v27/i03/paper ). Ви можете настроїти рівні довіри, відрегулювавши level
параметр, наприклад data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
.