Время прочтения: 4 мин.
С каждым годом data driven подход становится все более популярным. Объем данных увеличивается вместе с потребностью извлечения полезной информации из бесконечного потока данных. Передовые компании мира все чаще используют машинное обучение для обнаружения инсайтов и аномалий в больших данных.
Хочу поделиться опытом использования алгоритма COPOD в рамках аудита интеллектуального управления электропитанием устройств предприятия. Целью поставленной задачи был поиск возможностей по оптимизации потребления электроэнергии и сокращения расходов в рамках ESG-стратегии.
Основные достоинства алгоритма:
- Скорость работы
- Легкость интерпретации
- Возможность использовать алгоритм без обучающих данных
- Возможность обучение алгоритма на поиск аномалий по шаблонам
COPOD находится внутри пакета PyOD (https://github.com/yzhao062/pyod).
Данные:
200 тысяч единиц техники. В рамках политик управления электропитанием устройств к различным типам техники (ПК, ЖК-панели и т.п.) применяется свой уникальный план электропитания. В каждом плане свои особенности и настройки, где регулируется перевод в спящий режим, гибернация, отключения экранов, временные интервалы переходов из одного режима в другой.
В столбце «тип_устройства_подр» под каждой цифрой имеется в виду один тип устройств (Например, 0 — ПК, 1 — ЖК-панель, 3 — Кондиционер и т.п.). Столбец «ночные _режимы» — содержит ночной план электропитания для каждого типа устройств (Например, 8 — ПК, 1 — ЖК-панель, и т.п.). «Срок_непрерывной_работы» содержит класс периода бесперебойной работы (Например, 0 – неделя, 1 – месяц, и т.п.).
Применение:
# Импортируем библиотеку
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')
Как видим на изображении, в данных имеется большой набор аномалий по всем признакам. Черные точки – это нормальное (типичное) состояние. Например, для устройств класса 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, данный факт является основанием пометить данное устройство как аномальное. На других изображениях схожие ситуации, но с другими устройствами и по другим признакам.
Для построения гипотез требуется более глубокое исследование аномалий в конкретных признаках. Выгрузим срез данных по двум признакам:
#Смотрим срез по данным
data_times_anom[data_times_anom['anomalies']==1][['тип_устройства_подр', 'ночные_режимы']].value_counts().head(60)
Из среза следует подтверждение аномалий: устройства типа 0 имеют режимы работы 8 (31 280 единиц техники), 0 (7007 единиц техники), 4 (4171 единица техники), 1 (1939 единиц техники). ПК работают в режимах: ПК, Сервера, Устройства видеонаблюдения, ЖК-дисплей. Так же дела обстоят с устройствами типа 8. Уточнять допустимость работы устройства в «чужом» режиме необходимо у ответственных подразделений. В рамках данного исследования мы решали задачу детекции аномалий в режимах работы и устройствах.
Правильная настройка и эффективное управление электропитанием позволяет снизить расходы на электроэнергию, что в свою очередь может сэкономить до 20% бюджета, затрачиваемого на электричество.
COPOD является быстрым, мощным, со сложной математикой под капотом и простым в использовании на практике алгоритмом, с возможностью адаптировать его под большое количество признаков и различные типы задач детекции аномалий и выбросов.
Источники:
- pyod/copod_example.py в ветке master · yzhao062/pyod · GitHub
- [2009.09463] COPOD: Copula-Based Outlier Detection (arxiv.org)