Мне нужно реализовать обнаружение аномалий в нескольких наборах данных временных рядов. Я никогда не делал этого раньше и надеялся на некоторые советы. Я очень хорошо разбираюсь в python, поэтому я бы предпочел, чтобы в нем было реализовано решение (большая часть моего кода - это python для других частей моей работы).
Описание данных: это месячные данные временных рядов, которые только начали собираться за последние 2 года или около того (т.е. только 24-36 временных периодов). По сути, существует несколько показателей, которые отслеживаются ежемесячно для нескольких клиентов.
time_period client metric score
01-2013 client1 metric1 100
02-2013 client1 metric1 119
01-2013 client2 metric1 50
02-2013 client2 metric2 500
...
Вот что я думаю: вытащить данные в фрейм данных (панды), а затем рассчитать скользящее среднее значение за 6 месяцев для каждой пары клиент / метрика. Если значение текущего периода времени превышает некоторое пороговое значение, основанное на среднем значении за 6 месяцев, то поднимите флаг. Проблема кажется довольно простой. Я просто хочу убедиться, что я придерживаюсь твердого подхода.
Любой совет, чтобы конкретизировать эту идею, будет принята с благодарностью. Я знаю, что вопрос немного абстрактный, и я прошу прощения за это.
Ответы:
Я думаю, что подход, подобный статистическому управлению процессом , с контрольными диаграммами и т. Д., Может быть полезен здесь.
источник
Существует множество вариантов обнаружения аномалий, от стандартного отклонения с использованием функции отклонения Pandas std, до байесовского метода и множества методов машинного обучения, таких как: кластеризация, SVM, гауссовский процесс, нейронные сети.
Взгляните на этот учебник: https://www.datascience.com/blog/python-anomaly-detection
С байесовской точки зрения я рекомендую Facebook Prophet. Это дает очень продвинутые результаты без необходимости быть экспертом временного ряда. У него есть опции для работы с месяцами, днями и т. Д., И «интервалы неопределенности» помогают при аномалиях.
Наконец, я рекомендую этот блог Uber об использовании нейронных сетей (LSTM) для обнаружения аномалий, он содержит очень полезную информацию: https://eng.uber.com/neural-networks/
источник
Если вы хотите предположить, что ваш набор данных нормально распределен, то вы можете оценить квантили этого распределения и посмотреть, выходит ли он за пределы, например, 95%, 80% и т. Д. Квантиль. Я не слишком знаком с библиотеками Python, но уверен, что для этого уже есть встроенные функции.
источник