Использование алгоритма COPOD для поиска аномалий

С каждым годом data driven подход становится все более популярным. Объем данных увеличивается вместе с потребностью извлечения полезной информации из бесконечного потока данных. Передовые компании мира все чаще используют машинное обучение для обнаружения инсайтов и аномалий в больших данных.

Хочу поделиться опытом использования алгоритма COPOD в рамках аудита интеллектуального управления электропитанием устройств предприятия. Целью поставленной задачи был поиск возможностей по оптимизации потребления электроэнергии и сокращения расходов в рамках ESG-стратегии.

Основные достоинства алгоритма:

- Скорость работы

- Легкость интерпретации

- Возможность использовать алгоритм без обучающих данных

- Возможность обучения алгоритма на поиск аномалий по шаблонам

COPOD находится внутри пакета PyOD (https://github.com/yzhao062/pyod).

Данные:

200 тысяч единиц техники. В рамках политик управления электропитанием устройств к различным типам техники (ПК, ЖК-панели и т.п.) применяется свой уникальный план электропитания. В каждом плане свои особенности и настройки, где регулируется перевод в спящий режим, гибернация, отключения экранов, временные интервалы переходов из одного режима в другой.

В столбце «тип_устройства_подр» под каждой цифрой имеется в виду один тип устройств (например, 0 - ПК, 1 - ЖК-панель, 3 - Кондиционер и т.п.). Столбец «ночные _режимы» содержит ночной план электропитания для каждого типа устройств (например, 8 - ПК, 1 - ЖК-панель, и т.п.). «Срок_непрерывной_работы» содержит класс периода бесперебойной работы (например, 0 – неделя, 1 – месяц, и т.п.).

Использование алгоритма COPOD для поиска аномалий

Применение:

# Импортируем библиотеку from pyod.models.copod import COPOD searcher = COPOD()

В данном случае у нас нет шаблонов аномалий, следовательно, мы будем использовать функцию поиска decision_function:

data_times_anom['anomalies'] = searcher.decision_function(data_times_anom)

Визуально исследуем результат детекции аномалий (синий – норма, оранжевый – аномалия):

sns.pairplot(data_times_anom, hue='anomalies', diag_kind='hist')
Использование алгоритма COPOD для поиска аномалий

Как видим, на изображении в данных имеется большой набор аномалий по всем признакам. Черные точки – это нормальное (типичное) состояние. Например, для устройств класса 0 – нормальный режим работы – 8,6. На гистограмме справа видно, что самое большое количество устройств работают в режиме 8, однако, так же видно, что на диаграмме присутствуют и аномальные устройства в режиме 8 и не только. На графике слева видно, что в режиме 8 так же работают и другие типы устройств (так быть не должно согласно нормативным документам). Для более глубокого понимания так же можно рассмотреть каждый тип устройств в отдельности.

Алгоритм позволяет глубже разобраться в данных и выяснить, по какой причине то или иное устройство идентифицируется алгоритмом, как аномалия. Для этого используем функцию explain_outlier

#Разделим данные на выборки y = data_times_anom['anomalies'] X = data_times_anom.drop('anomalies', axis=1) #Создадим классификатор и обучим его clf = COPOD() clf.fit(X) #Будем использовать флаг аномальности outliers = np.where(y==1)[0] #Построим график for anomalies in outliers: clf.explain_outlier(anomalies, cutoffs=None, feature_names=X.columns)

Синим цветом обозначены оценки выбросов. По оси X отложены признаки, по Y – оценка аномалии. Оранжевым и зеленым – оценки аномалий в 90-м и 99-м процентилях. На изображении 1 видим, что устройство по признаку 3 (ночной режим) превышает 90-ый процентиль и граничит с 99, данный факт является основанием пометить данное устройство, как аномальное. На других изображениях схожие ситуации, но с другими устройствами и по другим признакам.

Использование алгоритма COPOD для поиска аномалий

Для построения гипотез требуется более глубокое исследование аномалий в конкретных признаках. Выгрузим срез данных по двум признакам:

#Смотрим срез по данным data_times_anom[data_times_anom['anomalies']==1][['тип_устройства_подр', 'ночные_режимы']].value_counts().head(60)
Использование алгоритма COPOD для поиска аномалий

Из среза следует подтверждение аномалий: устройства типа 0 имеют режимы работы 8 (31 280 единиц техники), 0 (7007 единиц техники), 4 (4171 единица техники), 1 (1939 единиц техники). ПК работают в режимах: ПК, Сервера, Устройства видеонаблюдения, ЖК-дисплей. Так же дела обстоят с устройствами типа 8. Уточнять допустимость работы устройства в «чужом» режиме необходимо у ответственных подразделений. В рамках данного исследования мы решали задачу детекции аномалий в режимах работы и устройствах.

Правильная настройка и эффективное управление электропитанием позволяет снизить расходы на электроэнергию, что в свою очередь может сэкономить до 20% бюджета, затрачиваемого на электричество.

COPOD является быстрым, мощным, со сложной математикой под капотом и простым в использовании на практике алгоритмом, с возможностью адаптировать его под большое количество признаков и различные типы задач детекции аномалий и выбросов.

Источники:

· pyod/copod_example.py в ветке master · yzhao062/pyod · GitHub (https://github.com/yzhao062/pyod/blob/master/examples/copod_example.py)

· [2009.09463] COPOD: Copula-Based Outlier Detection (arxiv.org) (https://arxiv.org/abs/2009.09463)

22
Начать дискуссию