Виявлення аномалії часового ряду з Python


10

Мені потрібно реалізувати виявлення аномалії на кількох наборах даних часових рядів. Я ніколи цього не робив і сподівався на поради. Мені дуже зручно з 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-місячного серп., Тоді підніміть прапор. Проблема здається досить простою. Я просто хочу переконатися, що я прийняв твердий підхід.

Будемо дуже вдячні за будь-яку пораду, щоб трохи одержати цю ідею. Я знаю, що питання трохи абстрактне, і я вибачаюся за це.


Я не знаю способу python, але це питання сповнене ідей щодо загальних підходів: stats.stackexchange.com/questions/26688/…
rapaio

pypi.org/project/anomaly-detection Це вбудована в бібліотеку для виявлення аномалії в python, що подібне до виявлення аномалії щебетання. Оскільки код виявлення аномалії щебетання є мовою R. Ваша проблема - контекстуальна аномалія. Модель Auto.arima теж
saravanan saminathan

Відповіді:


1

Я думаю, що тут може бути корисний підхід, подібний до контролю статистичних процесів , з контрольними діаграмами тощо.


Я прочитаю це. Чи підходить цей метод для часових рядів з невеликою кількістю даних (тобто 24 місяці)?
Ерік Міллер

закінчив читати більшу частину цього. Відповідно до цього методу, я повинен обчислити 3-е стандартне відхилення для часового ряду і графікувати рядок на цих межах. Якщо значення коли-небудь перевищує ці межі, позначте його. Це метод, який я розглядав.
Ерік Міллер

1

Існує велика кількість варіантів виявлення аномалії, від стандартного відхилення за допомогою функції відхилення Pandas std, до методу Байєса і багатьох методів машинного навчання між ними: кластеризація, SVM, Гауссовий процес, Нейронні мережі.

Погляньте на цей підручник: https://www.datascience.com/blog/python-anomaly-detection

З байєсівської точки зору, я рекомендую Facebook Prophet. Це дає дуже просунуті результати без необхідності бути експертом часових рядів. У ньому є варіанти роботи по місяцях, днях тощо, і "інтервали невизначеності" допомагають проти аномалій.

Нарешті, я рекомендую цей блог Uber щодо використання нейронних сіток (LSTM) для виявлення аномалії, він має дуже точні відомості: https://eng.uber.com/neural-networks/


0

Якщо ви готові припустити, що ваш набір даних зазвичай розподілений, тоді ви можете оцінити квантили цього розподілу і побачити, чи не виходить він, наприклад, 95%, 80% тощо. Я не надто знайомий з бібліотеками Python, але впевнений, що для нього вже є вбудовані функції.


Для більшості клієнтів спостерігається тенденція до зростання. Я не впевнений, що ви могли б назвати дані випадковим чином.
Ерік Міллер

2
Тоді ні в цьому випадку. Я вважаю, що метод нижче мене та вашого добре би спрацював у цій ситуації. Я робив щось подібне до цього раніше: взяв ковзаючу середню періоду X, відніміть поточну метричну величину від ковзної середньої. Знайдіть межі стандартного відхилення (або використовуйте суб'єктивне введення, якщо ви випадково знаєте в цьому сценарії) цих залишків, і все, що вище або нижче цих меж, можна вважати аномалією. Цей метод буде добре працювати, якщо клієнт раптом побачить збільшення балів.
Кевін Пей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.