Обнаружение выбросов на основе машинного обучения

Основываясь на отзывах читателей после публикации Два метода обнаружения выбросов, которые вы должны знать в 2021 году, я решил сделать этот пост, который включает четыре различных метода (алгоритма) машинного обучения для обнаружения выбросов в Python. Здесь я буду использовать подход Я-Я (интуиция-реализация) для каждой техники. Это поможет вам понять, как каждый алгоритм работает за кулисами, не углубляясь в математику алгоритма (часть Интуиция), и реализовать каждый алгоритм с помощью библиотеки машинного обучения Scikit-learn (часть Реализация). Я также буду использовать некоторые графические приемы для описания каждого алгоритма и его результатов. В конце этой статьи я напишу раздел Ключевые выводы, который будет включать некоторые специальные стратегии использования и комбинирования четырех техник. Так что не забудьте прочитать его в конце.

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

Я расскажу о каждом алгоритме в следующем порядке.

  1. Алгоритм эллиптической огибающей
  2. Алгоритм изолированного леса
  3. Одноклассовый алгоритм SVM
  4. Алгоритм локального фактора выброса (LOF)

Предпосылки

Я рекомендую вам прочитать Два метода обнаружения выбросов, которые вы должны знать в 2021 году, прежде чем читать этот. Знание тем, обсуждаемых в этой статье, будет дополнительным преимуществом для понимания сегодняшнего содержания.

Ключевые определения

Вот список ключевых определений, которые будут использоваться в этой статье.

  • Выброс: необычная точка данных, которая значительно отличается от других точек данных.
  • Обнаружение выбросов. Найдите выбросы в наборе обучающих данных, если обучающие данные загрязнены выбросами.
  • Обнаружение новизны. Определите, является ли новое невидимое наблюдение выбросом. Здесь обучающие данные могут быть или не быть загрязнены выбросами, и мы заинтересованы в том, чтобы обнаружить, что новое невидимое наблюдение является выбросом или нет. Если это наблюдение является исключением, мы назвали его новинкой.
  • Обнаружение аномалий. Когда мы объединяем обнаружение выбросов и обнаружение новизны, это называется обнаружением аномалий.

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

Приступим к изучению каждого алгоритма.

1. Алгоритм эллиптической огибающей.

Об этом уже говорилось в Два метода обнаружения выбросов, которые вы должны знать в 2021 году. Здесь больше внимания будет уделено различению между обнаружением выбросов и обнаружением новизны с использованием этого алгоритма.

Чтобы применить алгоритм, должно быть выполнено предположение о нормальности данных.

Интуиция

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

Интуиция, лежащая в основе Elliptic Envelope, очень проста. Мы рисуем эллипс вокруг точек данных на основе некоторых критериев и классифицируем любую точку данных внутри эллипса как вставку (зеленые), а любые наблюдения за пределами эллипса как выброс (красные).

Реализация

Общая реализация алгоритма эллиптической огибающей уже обсуждалась в моем посте Два метода обнаружения выбросов, которые вы должны знать в 2021 году. Здесь я рассмотрю реализацию с другой стороны - с помощью этого алгоритма проведу различие между обнаружением выбросов и обнаружением новизны.

Обнаружение выбросов

Давайте напишем код Python для обнаружения выбросов с помощью алгоритма Elliptic Envelope.

Когда мы хотим обнаружить выбросы X (обучающий набор данных) с помощью функции Scikit-learn EllipticEnvelope (), мы можем вызвать либо fit_predict (X) метод один раз или методы fit (X) и прогноз (X) по отдельности. Оба способа дают одинаковые результаты.

Обнаружение новинок

Давайте напишем код Python, чтобы увидеть, является ли новое невидимое наблюдение выбросом или нет. Новая невидимая точка данных - (-4, 8.5).

pred

Поскольку pred возвращает -1, новая невидимая точка данных (-4, 8.5) является новинкой.

Когда мы хотим увидеть, является ли новое невидимое наблюдение выбросом или нет, используя функцию Scikit-learn EllipticEnvelope (), мы должны сначала вызвать fit (X), а затем вызовите прогнозировать (новые_данные).

В этом разница между обнаружением выбросов и обнаружением новизны. Когда мы объединяем их оба, мы называем это обнаружением аномалии.

2. Алгоритм изолированного леса

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

Интуиция

Вот что говорится в официальной документации Scikit-learn об интуиции алгоритма Isolation Forest.

IsolationForest «изолирует» наблюдения, случайным образом выбирая объект, а затем случайным образом выбирая значение разделения между максимальным и минимальным значениями выбранного объекта.

Реализация

Поскольку алгоритм изолированного леса может применяться к многомерным данным, здесь мы применяем его к 4-мерному «набору данных радужки». В целях визуализации мы применяем анализ главных компонентов, чтобы преобразовать 4-мерные данные в 2-мерные данные, которые могут быть построены на 2D-графике, сохраняя при этом 95,8% отклонения в исходных данных!

Вот код!

Самым важным гиперпараметром в алгоритме Isolation Forest является гиперпараметр загрязнение - значение, которое мы не знаем. Он представляет собой долю выбросов в наборе данных. Значения этого гиперпараметра находятся в диапазоне от 0 до 0,5. Если мы считаем, что в наших данных будет много выбросов, мы можем установить для загрязнения большее значение. Незнание точной доли выбросов в наборе данных является основным ограничением использования этого метода.

3. Одноклассовый алгоритм SVM.

One-class SVM (One-class Support Vector Machines) - это неконтролируемый алгоритм машинного обучения, который можно использовать для обнаружения новинок. Он очень чувствителен к выбросам. Следовательно, это не очень хорошо для обнаружения выбросов, но лучший вариант для обнаружения новизны, когда обучающие данные не сильно загрязнены выбросами. Этот алгоритм может быть применен к многомерным наборам данных, и при распределении данных нет никаких основополагающих предположений.

Интуиция

Одноклассовая SVM основана на SVM. SVM использует гиперплоскость для разделения двух классов, в то время как SVM с одним классом использует гиперсферу, чтобы охватить все наблюдения.

Реализация

Поскольку One-class SVM не очень хорош для обнаружения выбросов, здесь мы используем его для обнаружения новизны.

Вот код.

pred

Поскольку pred возвращает -1, новая невидимая точка данных (-4, 8.5) является новинкой.

4. Алгоритм локального фактора выброса (LOF)

Фактор локального выброса (LOF) - это алгоритм машинного обучения без учителя, который изначально был создан для обнаружения выбросов, но теперь его можно использовать и для обнаружения новинок. Он хорошо работает с наборами данных большой размерности.

Интуиция

Вот что официальная документация Scikit-learn говорит об интуиции алгоритма локального фактора выброса.

Алгоритм Local Outlier Factor (LOF) - это метод неконтролируемого обнаружения выбросов, который вычисляет локальное отклонение плотности данной точки данных по отношению к ее соседям. Он считает выбросами выборки, которые имеют значительно меньшую плотность, чем их соседи.

Реализация

Реализация этого метода существенно различается между обнаружением выбросов и обнаружением новизны. Давайте сначала обсудим эту разницу.

При обнаружении выбросов

При применении этого метода для обнаружения выбросов не используется метод predict (), а только метод fit_predict (), который следует использовать с обучающими данными (X).

При обнаружении новинок

Если вы хотите использовать фактор локального выброса для обнаружения новизны (т. Е. Определения того, является ли новое невидимое наблюдение выбросом или нет), вам следует установить гиперпараметр новизна на Истина (по умолчанию Ложь). При применении этого метода для обнаружения новизны доступны методы fit () и прогноз (). Метод fit () следует использовать с обучающими данными (X), а метод прогноз () следует использовать с новыми невидимыми данными, а не с обучающими данными (X ).

Сначала мы пишем код Python для обнаружения выбросов с помощью LOF. Вот код.

Теперь мы пишем код Python для обнаружения новизны с помощью LOF. Вот код.

pred

Поскольку pred возвращает -1, новая невидимая точка данных (-4, 8.5) является новинкой.

Основные выводы

Сегодня мы обсудили четыре метода машинного обучения для обнаружения выбросов. Реализация всех методов очень похожа, за исключением LOF, где в игру вступает разница между обнаружением выбросов и обнаружением новизны.

Isolation Forest и LOF хорошо работают с многомерными данными. В целях визуализации мы можем применить анализ главных компонентов, чтобы уменьшить размерность многомерных данных.

Elliptic Envelope следует использовать только с данными, которые удовлетворяют предположению о нормальности.

SVM одного класса не очень хороша для обнаружения выбросов, но это лучший вариант для обнаружения новизны, когда обучающие данные не сильно загрязнены выбросами.

Самый важный гиперпараметр в Elliptic Envelope, Isolation Forest и LOF - гиперпараметр загрязнения. Он представляет собой долю выбросов в наборе данных. В большинстве случаев нам неизвестно точное значение гиперпараметра загрязнение. Лучший способ угадать значение - сначала выполнить обнаружение на основе IQR и подсчитать количество выбросов в наборе данных (см. Два метода обнаружения выбросов, которые вы должны знать в 2021 году). Зная общее количество наблюдений, вы можете получить приблизительное значение доли выбросов. Это значение гиперпараметра загрязнение!

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

Ссылка для регистрации: https://rukshanpramoditha.medium.com/membership

Большое спасибо за вашу постоянную поддержку! Увидимся в следующей истории. Всем удачи!

Особая благодарность Полу Кэрроллу на Unsplash, который предоставил мне красивую обложку для этого сообщения.

Рукшан Прамодитха
2021–03–27