Проблема: я работаю над проектом, в котором используются файлы журналов, аналогичные тем, которые находятся в пространстве мониторинга ИТ (насколько я понимаю, пространство ИТ). Эти файлы журнала представляют собой данные временных рядов, организованные в сотни / тысячи строк с различными параметрами. Каждый параметр является числовым (с плавающей запятой), и для каждого момента времени существует нетривиальное значение / значение без ошибок. Моя задача состоит в том, чтобы отслеживать указанные файлы журналов на предмет обнаружения аномалий (скачков, падений, необычных шаблонов с некоторыми несогласованными параметрами, странного 1/2 / и т. Д. Производного поведения и т. Д.).
В аналогичном задании я пробовал Splunk с Prelert, но сейчас я изучаю варианты с открытым исходным кодом.
Ограничения: я ограничиваю себя Python, потому что я хорошо его знаю и хотел бы отложить переход на R и связанную с этим кривую обучения. Если, кажется, не существует подавляющей поддержки R (или других языков / программного обеспечения), я бы хотел использовать Python для этой задачи.
Кроме того, я работаю в среде Windows на данный момент. Я хотел бы продолжить изолированную программную среду в Windows для небольших файлов журнала, но при необходимости могу перейти в среду Linux.
Ресурсы: я проверил следующее с тупиками в качестве результатов:
Python или R для реализации алгоритмов машинного обучения для обнаружения мошенничества . Некоторая информация здесь полезна, но, к сожалению, я изо всех сил пытаюсь найти правильный пакет, потому что:
Твиттер "AnomalyDetection" находится в R, и я хочу придерживаться Python. Кроме того, особенность порта Python, кажется, вызывает проблемы при реализации в среде Windows для меня.
Skyline, моя следующая попытка, похоже, в значительной степени прекращена (из-за проблем с github ). Я не углубился в это, учитывая, как мало поддержки, кажется, онлайн.
scikit-learn, я все еще изучаю, но это, кажется, намного больше руководства. Подход "подавление сорняков" - это нормально для меня, но мой опыт работы с инструментами обучения слаб, поэтому я хотел бы что-то вроде черного ящика для технических аспектов, таких как алгоритмы, подобные Splunk + Prelert.
Определение проблемы и вопросы: я ищу программное обеспечение с открытым исходным кодом, которое может помочь мне в автоматизации процесса обнаружения аномалий из файлов журналов временных рядов в Python с помощью пакетов или библиотек.
- Существуют ли такие вещи, чтобы помочь с моей непосредственной задачей, или они воображаемы в моем уме?
- Может ли кто-нибудь помочь с конкретными шагами, чтобы помочь мне в достижении моей цели, в том числе базовых основ или концепций?
- Является ли это лучшим сообществом StackExchange, или Stats, Math или даже Security или Stackoverflow - лучшие варианты?
РЕДАКТИРОВАТЬ [2015-07-23] Обратите внимание, что последнее обновление для Py ОС, похоже, исправлено для среды Windows! Я еще не подтвердил, но должен стать еще одним полезным инструментом для сообщества.
РЕДАКТИРОВАТЬ [2016-01-19] Небольшое обновление. У меня не было времени поработать над этим и исследовать, но я делаю шаг назад, чтобы понять основы этой проблемы, прежде чем продолжать исследовать конкретные детали. Например, я предпринимаю два конкретных шага:
Начиная со статей в Википедии для обнаружения аномалий [ https://en.wikipedia.org/wiki/Anomaly_detection ], полностью понимая, а затем перемещаясь вверх или вниз в иерархии концепций других связанных статей Википедии, таких как [ https: // en.wikipedia.org/wiki/K-nearest_neighbors_algorithm ], а затем на [ https://en.wikipedia.org/wiki/Machine_learning ].
Изучение методов в великих обзорах, проведенных Чандолой и др. 2009 «Обнаружение аномалий: опрос» [ http://www-users.cs.umn.edu/~banerjee/papers/09/anomaly.pdf ] и Ходж и др. 2004 «Обзор методологий обнаружения выбросов» [ http://eprints.whiterose.ac.uk/767/1/hodgevj4.pdf ].
Как только концепции будут лучше поняты (я надеюсь поэкспериментировать с игрушечными примерами по мере развития практической стороны), я надеюсь понять, какие инструменты Python с открытым исходным кодом лучше подходят для моих задач.
Ответы:
Обнаружение аномалий или обнаружение событий может быть выполнено различными способами:
Основной способ
Производная! Если отклонение вашего сигнала от его прошлого и будущего велико, скорее всего, у вас есть событие. Это можно извлечь путем нахождения больших пересечений нуля в производной сигнала.
Статистический путь
Смысл чего-либо - это его обычное, основное поведение. если что-то отклоняется от значения, это означает, что это событие. Обратите внимание, что среднее значение во временных рядах не так тривиально и не является константой, а меняется в зависимости от изменений во временных рядах, поэтому вам нужно видеть «скользящее среднее» вместо среднего. Это выглядит так:
Код скользящей средней можно найти здесь . В терминологии обработки сигналов вы применяете фильтр низких частот, применяя скользящее среднее.
Вы можете следовать приведенному ниже коду:
Вероятностный путь
Они более сложны специально для людей, плохо знакомых с машинным обучением. Фильтр Калмана - отличная идея для поиска аномалий . Более простые вероятностные подходы, использующие «Оценку максимального правдоподобия», также работают хорошо, но я предлагаю придерживаться идеи скользящего среднего. На практике это работает очень хорошо.
Я надеюсь, что смогу помочь :) Удачи!
источник
В h2o есть модуль обнаружения аномалий, и традиционно код доступен в R. Однако, помимо версии 3, он имеет аналогичный модуль, доступный и в python, и, поскольку h2o является открытым исходным кодом, он может соответствовать вашим требованиям.
Вы можете увидеть рабочий пример здесь
источник
Недавно я разработал набор инструментов: Py thon O utlier D etection toolbox ( PyOD ). Смотрите GitHub .
Он предназначен для идентификации удаленных объектов в данных как с неконтролируемым, так и с контролируемым подходом. PyOD предназначен для:
Вот несколько важных ссылок:
Github : https://github.com/yzhao062/Pyod
PyPI : https://pypi.org/project/pyod/
Документация : https://pyod.readthedocs.io
Интерактивные ноутбуки Jupyter : https://mybinder.org/v2/gh/yzhao062/Pyod/master
Если вы используете PyOD в научной публикации, мы будем благодарны за ссылки на следующую статью
В настоящее время он находится на рассмотрении в JMLR (трек программного обеспечения с открытым исходным кодом для машинного обучения). Смотрите препринт .
Краткое введение
Набор инструментов PyOD состоит из трех основных групп функций: (i) алгоритмы обнаружения выбросов; (ii) ансамблевые структуры выбросов и (iii) функции утилизации обнаружения выбросов.
Индивидуальные алгоритмы обнаружения :
Комбинации детекторов / счетчиков выбросов :
Функции утилит для обнаружения выбросов :
Сравнение всех реализованных моделей доступно ниже: ( Рисунок , Код , Jupyter Notebooks ):
Если вы заинтересованы, пожалуйста, проверьте Github ( https://github.com/yzhao062/Pyod ) для получения дополнительной информации.
источник
В настоящее время я нахожусь на той же сцене, что и вы. Я нахожу лучший вариант для обнаружения аномалий, проводя некоторые исследования.
То, что я нашел, я думаю, что лучше всего соответствует вашим потребностям и лучше по сравнению с тем, что вы видели. т.е. TwitterAnomalyDetection, SkyLine.
Я обнаружил, что лучше NAB Numenta (Numenta Anomaly Benchmark). Он также имеет очень хорошую поддержку сообщества, и для вас плюс - его открытый исходный код, разработанный на python. Вы можете добавить свой алгоритм в нем.
В случае алгоритма я обнаружил, что LOF или CBLOF - хороший вариант.
Итак, проверьте это один раз. Это может помочь вам. https://github.com/numenta/nab
Если вы найдете лучший вариант. пожалуйста, скажите мне. Я тоже на том же пути.
Удачи!
источник
Может быть, это поможет вам упомянуть о стационарных состояниях: https://github.com/twitter/AnomalyDetection
https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series
источник
Я предполагаю, что функция, которую вы используете для обнаружения аномалий, - это одна строка данных в лог-файле. Если это так, Sklearn ваш хороший друг, и вы можете использовать его в качестве черного ящика. Посмотрите учебник по одноклассному обнаружению SVM и новизне .
Однако в случае, если ваша функция представляет собой целый файл журнала, вам необходимо сначала обобщить его до некоторой функции того же измерения, а затем применить обнаружение новизны.
источник
Есть все еще активная и развитая версия Skyline, на случай, если кто-то приземлится здесь и будет заинтересован.
https://github.com/earthgecko/skyline
https://earthgecko-skyline.readthedocs.io/en/latest
Я являюсь текущим сопровождающим проекта, и теперь он намного более продвинут, чем оригинальная версия Etsy, с точки зрения производительности, пользовательского интерфейса, лучшей обработки сезонности и имеет дополнительные функциональные возможности базы данных аномалий, вычисления корреляций и возможности снятия отпечатков пальцев. и учить не аномальные закономерности.
источник
Поскольку у вас есть многовариантные временные ряды, я бы выбрал реализацию LSTM-RNN, которая моделирует динамику вашей системы на основе обучающих данных, которые обычно находятся под полудонтролем (включая только нормальный класс). Это означает, что вы тренируете свою модель, чтобы узнать, что является «нормальным». Во время тестирования вы проверяете как нормальные, так и аномальные условия, чтобы увидеть, насколько хорошо модель отличает их друг от друга.
Преимущество нейронных сетей состоит в том, что они «изучают» взаимные корреляции между входными сигналами самостоятельно; вам не нужно исследовать их вручную. В частности, LSTM-RNN являются идеальным выбором, когда речь заходит о моделировании временных рядов просто потому, что они способны сохранять память о предыдущих входных данных, аналогично модели пространства состояний в теории управления (если вы видите аналогию).
В Python почти тривиально реализовать LSTM-RNN с использованием Keras API (поверх серверной части Tensorflow). Эта сеть учится оценивать интересующий сигнал (сигналы) по произвольному количеству входов, которые вы затем сравниваете с фактическим измеренным значением. Если есть «большое» отклонение, вы получите аномалию (учитывая, что модель достаточно точна)!
источник