Эллиптическая огибающая и обнаружение на основе IQR
Выброс - это необычная точка данных, которая значительно отличается от других точек данных. Обнаружение выбросов - это сложная задача, которую следует выполнять осторожно. Эллиптический конверт и IQR - часто используемые методы обнаружения выбросов. Elliptic Envelop - это подход, основанный на машинном обучении, а обнаружение на основе IQR - это статистический подход. У них есть свои достоинства и недостатки. Поэтому мы не можем сказать, какой из них лучший. Лучшая стратегия - объединить эти две техники и посмотреть на результат в целом.
В этой статье мы обсудим интуицию, лежащую в основе методов эллиптической огибающей и IQR, и объединим их вместе, чтобы получить гораздо лучшие результаты. Реализация этих методов также будет обсуждаться с использованием Python и Scikit-learn. Не забудьте прочитать раздел «Основные выводы» в конце этой статьи. Там вы познакомитесь с некоторыми особыми концепциями и стратегиями при использовании методов эллиптической огибающей и IQR.
[Эта статья включает в себя все: теория, коды, визуализации и идеи!]
Давайте начнем!
Эллиптический конверт
Основное предположение этого метода заключается в том, что данные должны быть нормально распределенными (набор данных Гауссово распределенное). Интуиция, лежащая в основе Elliptic Envelope, очень проста. Мы рисуем эллипс вокруг точек данных на основе некоторых критериев и классифицируем любую точку данных внутри эллипса как вставку (зеленые), а любое наблюдение за пределами эллипса как выброс (красные).
Метод Elliptic Envelope рассматривает все наблюдения в целом, а не отдельные объекты. Хотя интуиция, лежащая в основе этого метода, очень проста, реализация несколько сложна. В Scikit-learn метод Elliptic Envelope реализован функцией EllipticEnvelope (). Здесь нам нужно указать гиперпараметр загрязнение - значение, которое мы не знаем. Он представляет собой долю выбросов в наборе данных. Значения этого гиперпараметра находятся в диапазоне от 0 до 0,5 (по умолчанию 0,1). Если мы считаем, что в наших данных будет много выбросов, мы можем установить для загрязнения большее значение. Незнание точной доли выбросов в наборе данных является основным ограничением использования этого метода.
Реализация
Чтобы реализовать метод Elliptic Envelope, мы сначала создадим смоделированный набор данных с помощью функции Scikit-learn make_blobs (). Затем мы визуализируем данные и проверяем предположение о нормальности.
Напишем код!
Шаг 1. Создайте смоделированный набор данных
Здесь мы используем функцию Scikit-learn make_blobs () для создания смоделированного набора данных. Эта функция создает распределенный набор данных по Гауссу. Здесь мы выбираем только две функции для X с целью визуализации. Нет y.
Шаг 2. Визуализируйте данные
Похоже, что в данных есть несколько выбросов.
Шаг 3. Проверьте нормальность данных
Мы можем создать гистограммы для каждой функции, чтобы проверить предположение о нормальности.
Наши данные распространяются нормально. Таким образом, мы можем применить функцию EllipticEnvelope () для обнаружения выбросов.
Шаг 4. Примените эллиптическую огибающую для обнаружения выбросов
Кажется, что в нашем наборе данных очень небольшая доля выбросов. Итак, мы можем установить загрязнение на меньшее значение, например 0,025.
Метод fit_predict () объекта эллиптической оболочки (elpenv) возвращает единицы для выбросов и -1 для выбросов. Мы можем извлечь выбросы с помощью функции np.where (). Точки данных, выделенные красным цветом, являются выбросами. Наблюдения при следующих значениях индекса являются выбросами.
outlier_index
Шаг 5. Получите набор данных без выбросов
Теперь мы создаем фрейм данных Pandas, который не содержит выбросов. Мы можем использовать этот набор данных для дальнейшего анализа.
Обнаружение на основе IQR
Обнаружение на основе IQR - это статистический подход. Этот метод применяется к отдельным объектам, а не ко всем наблюдениям, как в Elliptic envelope. Интуиция, лежащая в основе обнаружения на основе IQR, также очень проста. Сначала мы вычисляем первый квартиль (Q1) и третий квартиль (Q3) данных. Затем мы получаем разницу между этими квартилями. Эта разница называется IQR (InterQuartile Range).
- IQR = Q3 – Q1
- Нижняя граница = Q1–1,5 (IQR)
- Верхняя граница = Q3 + 1,5 (IQR)
Любые значения меньше нижней или большей верхней границы являются выбросами.
Реализация
Индексы выбросов каждой функции очень полезны. Мы можем использовать объединение индексов выбросов всех функций для извлечения и удаления выбросов из набора данных. Мы можем получить объединение следующим образом.
Затем мы визуализируем данные на диаграмме рассеяния и сравниваем обнаружение на основе IQR с эллиптической огибающей.
Мы видим некоторые различия в обнаружении выбросов двумя методами.
Мы также можем использовать index_union для удаления выбросов из набора данных.
Мы также можем создавать коробчатые диаграммы для отображения данных с выбросами и без них.
Ключевые выводы
Сегодня мы проделали огромную работу по обнаружению выбросов. Мы обсудили два популярных метода: Эллиптическая огибающая и Обнаружение на основе IQR. У них есть свои достоинства и недостатки. Интуицию, лежащую в основе этих двух методов, легко понять. Elliptic Envelope основан на машинном обучении, а IQR основан на статистике. Elliptic Envelope легко реализовать с помощью функции EllipticEnvelope () из Scikit-learn, но при этом должно выполняться предположение о нормальности. Метод Elliptic Envelope рассматривает все наблюдения в целом, а не отдельные объекты. Основным недостатком эллиптической огибающей является то, что нам неизвестно точное значение гиперпараметра загрязнения. Лучший способ угадать значение - сначала выполнить обнаружение на основе IQR и подсчитать количество выбросов в наборе данных. Зная общее количество наблюдений, вы можете получить приблизительное значение доли выбросов. Это значение гиперпараметра загрязнение. Вот как мы объединяем две техники вместе!
Кстати, обнаружение на основе IQR реализовать непросто. Вам нужно написать продвинутый код Python. Но при обнаружении на основе IQR нам не нужно проверять предположение о нормальности и знать долю выбросов в наборе данных. Итак, это преимущества этой техники. Этот метод применяется к отдельным объектам, а не ко всем наблюдениям, как в Elliptic envelope. Мы можем использовать объединение возвращенных индексов выбросов для извлечения и удаления выбросов из набора данных.
Это история обнаружения выбросов. Но мы еще не закончили. А как насчет обработки выбросов? Это то же самое, что и обнаружение выбросов? Нет. Если мы обнаружим выброс, что нам делать дальше? Мы должны удалить это? Следует ли нам оставить его? или мы должны заменить его на соответствующее значение? Это зависит от знания предметной области конкретной проблемы анализа. За выбросом может быть интересная история. Итак, если вы это нашли, попробуйте рассказать историю. Некоторые выбросы могут возникать из-за человеческих ошибок. В этом случае вы можете просто удалить их из данных.
Несколько последних слов о выбросах - «Обращайтесь с выбросами с особой осторожностью, если вы не знаете, что за ними стоит! Всегда комбинируйте несколько методов вместе, чтобы обнаружить выбросы, поскольку не существует единого лучшего метода. Если возможно, всегда наносите данные на график, чтобы проверить предположения и окончательные результаты ».
Это конец сегодняшней публикации. Мои читатели могут подписаться на членство по следующей ссылке, чтобы получить полный доступ ко всем рассказам, которые я пишу, и я получу часть вашего членского взноса.
Ссылка для регистрации: https://rukshanpramoditha.medium.com/membership
Большое спасибо за вашу постоянную поддержку! Увидимся в следующей истории. Всем удачи!
Особая благодарность Александру Эндрюсу на Unsplash, который предоставил мне красивую обложку для этого сообщения.
Рукшан Прамодитха
2021–03–20