Несколько дней назад мы открыли исходный код нашей платформы для обнаружения аномалий в Python - вы можете прочитать об этом здесь.

Этот пост посвящен одной особенности нашего фреймворка: интеграции с scikit-learn. Sklearn - это флагманский набор инструментов машинного обучения для Python, который растет с каждым днем. Игнорировать их модели и шаблоны проектирования - значит изобретать велосипед.

Итак, мы добавили небольшой пример того, как вы можете использовать всю мощь scikit-learn для решения вашей проблемы обнаружения, продолжая использовать dsio. Рассмотрим следующий файл, который вы можете найти в папке с примерами:

datastream.io/examples/lof_anomaly_detector.py

«Lof» означает «фактор локального выброса», старый и хорошо проверенный метод обнаружения аномалий в евклидовом пространстве (хотя его можно обобщить на любое пространство, для которого вы чувствуете себя комфортно, определяя метрику расстояния). Основная идея LOF состоит в том, чтобы идентифицировать точки, ближайшие соседи которых не так близки, по сравнению с другими точками в наборе данных. Это позволяет нам обнаруживать аномалии, значения которых могут не выглядеть такими ненормальными, когда вы сравниваете их с максимальным и минимальным значениями, найденными в наборе данных, но на самом деле они занимают пустое место где-то посередине, где нет других данных. Для одномерных данных может быть нелогично представлять себе такие аномальные пробелы, но по мере увеличения размера данных становится все более вероятным, что ваши аномалии не будут содержать экстремальных значений во всех измерениях.

Scikit-learn содержит реализацию LOF, прекрасно объясненную здесь. Однако сам фреймворк Sklearn не содержит интерфейса для обнаружения аномалий: он поддерживает только классификацию / регрессию (контролируемое обучение) и кластеризацию (неконтролируемое обучение, основная цель которого - назначать точки данных кластерам, а не производить оценки аномалий). Это ни в коем случае не является серьезным недостатком: любой алгоритм кластеризации можно легко модифицировать для создания детектора аномалий с помощью идей, аналогичных LOF.

Однако предлагаемый нами интерфейс - это шаг вперед в признании обнаружения аномалий в качестве основной категории проблем науки о данных. Мы следовали шаблонам проектирования sklearn, представляя его как Mixin, а не как объект, что означает, что вы можете использовать практически любой класс, который хотите, при условии, что вы вводите (или переопределяете, если они уже существуют) следующие методы:

fit, update, score_anomaly, flag_anomaly

Наша fit функция скоро будет пересмотрена, чтобы полностью соответствовать соглашениям sklearn (в настоящее время она поддерживает только одномерный ввод, поэтому он расходится), так что вам не нужно об этом беспокоиться. Функция score_anomaly , вероятно, является наиболее важной, поскольку она производит окончательный выходной сигнал детекторов, а функция flag_anomaly служит для создания двоичного выхода, если он необходим.

Функция обновления

Метод update, представленный в AnomalyMixin , является еще одним ключевым нововведением dsio, посредством которого мы просим, ​​чтобы все поддерживаемые модели имели способ обновления своего состояния с учетом новых данных, вместо того, чтобы переоборудовать с нуля. Скоро мы напишем еще один пост, чтобы углубиться в мир обновлений моделей!