Руководство по обнаружению выбросов с использованием стандартного отклонения, межквартильного диапазона, изолирующего леса, DBSCAN и локального фактора выбросов.

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

В этой статье мы рассмотрим одномерные и многомерные выбросы, чем они отличаются и как их можно идентифицировать с помощью статистических методов и методов автоматического обнаружения аномалий. Мы увидим методы межквартильного диапазона и стандартного отклонения для обнаружения одномерных выбросов и изолированного леса, DBSCAN — пространственную кластеризацию приложений с шумом на основе плотности и LOF — фактор локального выброса для обнаружения многомерных выбросов.

Следя за статьей, я рекомендую вам проверить Jupyter Notebook на моем GitHub для полного анализа и кода.

Нам есть что рассказать, давайте начнем! 🚀

Данные

В статье мы будем использовать Набор данных идентификации стекла от UCI, который имеет 8 атрибутов (например, Na), связанных с содержанием стекла, а также с типом стекла.

import pandas as pd
glass = pd.read_csv('glass.csv')

Одномерные и многомерные выбросы

Используя seaborn’s pairplot, мы можем построить парные отношения между содержимым стакана, и с помощью этого визуального элемента мы можем увидеть, как выглядит распределение наших базовых данных.

import seaborn as sns
sns.pairplot(glass, diag_kws={'color':'red'})

Если мы внимательно посмотрим на графики выше, мы увидим, что атрибуты стекла расположены по осям x и y. Наряду с диагональю красного цвета мы можем видеть графики гистограммы, показывающие распределения.

Как видите, не все атрибуты имеют нормальное распределение, которое соответствует колоколообразной кривой, но на самом деле большинство атрибутов смещены в сторону более низких значений (например, Ba, Fe) или более высоких значений (например, Mg). Чтобы обнаружить одномерные выбросы, мы должны сосредоточиться на распределении одного атрибута и найти точки данных, которые сильно отличаются от большинства данных этого атрибута. Например, если мы выберем «Na» и построим блочную диаграмму, мы сможем найти, какие точки данных находятся за пределами усов и могут быть помечены как выбросы.

Напротив, чтобы обнаружить многомерные выбросы, мы должны сосредоточиться на сочетании по крайней мере двух переменных в n-мерном пространстве. Например, в наборе данных о стекле мы можем использовать все восемь атрибутов стекла и отображать их в n-мерном пространстве и находить многомерные выбросы, определяя, какие точки данных находятся далеко.

Поскольку построение более трех измерений невозможно, мы должны найти способ преобразовать восемь измерений в пространство с меньшими измерениями. PCA — анализ основных компонентов — это метод уменьшения размерности, который выполняет линейное отображение многомерного пространства в низкоразмерное пространство путем максимизации дисперсии в низкоразмерном представлении. Мы можем преобразовать восемь измерений в трехмерное пространство, выполнив PCA с n_components=3.

На графике видно, что некоторые точки данных расположены близко друг к другу (составляя плотные области), а некоторые — далеко, что может быть многомерным выбросом.

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

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

1. Метод стандартного отклонения

Предположим, что переменная (почти) нормально распределена. В этом случае его гистограмма должна следовать колоколообразной кривой, и 68,3% значений данных лежат в пределах одного стандартного отклонения от среднего, 95,4% значений данных лежат в пределах двух стандартных отклонений от среднего и 99,7% значений данных. значения данных лежат в пределах трех стандартных отклонений от среднего значения.

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

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

Shape of original dataset: (213, 9) 
Shape of dataset after removing outliers in Na column: (211, 9)

2. Метод межквартильного диапазона

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

Квартиль 1 (Q1) соответствует 25-му процентилю
Квартиль 2 (Q2) соответствует 50-му процентилю
Квартиль 3 (Q3) соответствует 75-му процентилю

Прямоугольник на диаграмме представляет диапазон IQR, который определяется как диапазон между Q1 и Q3; IQR = Q3 — Q1 и точки данных, находящиеся ниже Q1 - 1.5*IQR или выше Q3 + 1.5*IQR, определяются как выбросы.

На диаграмме Q1 - 1.5*IQR и Q3 + 1.5*IQR представлены усами, а выбросы представлены точками сверху или снизу.

Shape of original dataset: (213, 9) 
Shape of dataset after removing outliers in Na column: (206, 9)

Используя метод IQR, мы удалили семь записей на основе распределения переменной «Na». Как вы можете заметить, метод стандартного отклонения смог найти только 2 выброса, которые были действительно экстремальными точками, но с помощью метода IQR мы смогли обнаружить больше (еще 5 записей, которые не были такими экстремальными). Вам и вашему варианту использования решать, какой метод лучше для набора данных и есть ли у вас место для добавления дополнительных точек данных.

Давайте продолжим с многомерными выбросами и узнаем об изолированном лесу, DBSCAN — пространственной кластеризации приложений на основе плотности с шумом и LOF — факторе локального выброса.

Многомерное обнаружение выбросов

1. Метод изолированного леса

Изолирующий лес — алгоритм машинного обучения без учителя, основанный на случайном лесу. Возможно, вы знаете, что случайный лес — это модель обучения по ансамблю, в которой используется ансамбль базовых моделей (скажем, 100 деревьев решений) и моделей, которые превосходят результаты с учетом более высокого веса в окончательном решении.

Если вам нужно освежить знания об ансамблевом обучении, вы можете ознакомиться с этой статьей.



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

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

Давайте посмотрим на реализацию с использованием класса IsolationForest из scikit-learn.

from sklearn.ensemble import IsolationForest
IsolationForest(n_estimators=100, max_samples='auto', contamination='auto', max_features=1.0, bootstrap=False, n_jobs=None, random_state=None, verbose=0, warm_start=False)

Алгоритм Isolation Forest имеет несколько гиперпараметров, таких как n_estimators для количества базовых оценок для ансамбля, max_samples для количества выборок для обучения модели, загрязнение для определения доли выбросов в данных, max_features для количества функций, извлеченных из данных для обучения. Остальное можете посмотреть в документе.

Мы инициируем изолированный лес, установив количество базовых моделей равным 100, максимальные функции равным общему количеству функций, а загрязнение — 'auto', в котором используются пороги смещения и загрязнения, определенные в исходной статье. Если загрязнение равно 0,1, то 10% набора данных будут определены как выбросы.

Вызвав glass['outlier'].value_counts(), мы видим, что 19 записей помечены как -1 — выбросы, а остальные 195 записей помечены как 1 — не выбросы.

Мы можем визуализировать выбросы, сократив количество функций до трех компонентов с помощью PCA, как мы рассмотрели ранее.

Чтобы содержание было сфокусированным, я не буду показывать, как настраивать гиперпараметры, но если вам интересно, вы можете проверить эту статью.

2. Метод пространственной кластеризации приложений с шумом на основе плотности (DBSCAN)

DBSCAN — популярный алгоритм кластеризации, который часто используется в качестве альтернативы алгоритму K-средних. Он основан на плотности, что означает, что он фокусируется на областях с высокой плотностью, где расположено много точек данных. Он выполняет пространственную кластеризацию, измеряя пространственное расстояние объектов (т. е. евклидово расстояние) между данными, чтобы определить, какие из них можно сгруппировать вместе. Это позволяет приложениям с шумом, что означает, что мы можем использовать DBSCAN для зашумленных данных. Но это еще не все, одно из самых больших преимуществ DBSCAN заключается в том, что нам не нужно предварительно определять количество кластеров.

Давайте посмотрим на реализацию с использованием класса DBSCAN из scikit-learn.

from sklearn.cluster import DBSCAN
DBSCAN(eps=0.5, min_samples=5, metric=’euclidean’, metric_params=None, algorithm=’auto’, leaf_size=30, p=None, n_jobs=None)

DBSCAN имеет несколько гиперпараметров, таких как eps (epsilon) для максимального расстояния между двумя точками данных, рассматриваемых в одном кластере, min_samples для количества близких точек данных для точка, которая считается основной точкой, показатель для расчета расстояния между точками. Остальное можете посмотреть в документе.

При запуске DBSCAN очень важно тщательно выбирать гиперпараметры. Например, если значение eps выбрано слишком маленьким, то большая часть данных может быть классифицирована как выбросы, поскольку область соседства определяется как меньшая. Напротив, если значение eps выбрано слишком большим, то большинство точек могут быть сгруппированы вместе, поскольку они, вероятно, будут расположены в одном и том же районе. Здесь мы выбрали eps как 0,4, используя график k-расстояний.

Кроме того, min_samples — важный гиперпараметр, который обычно равен или превышает 3, и в большинстве случаев выбирается как D+1, где D — размерность набора данных. В нашем примере мы устанавливаем min_samples равным 10.

Поскольку DBSCAN идентифицирует кластеры по плотности, в областях с высокой плотностью возникают кластеры, а в областях с низкой плотностью - выбросы. Вызвав glass['outlier'].value_counts(), мы видим, что 22 записи помечены как -1 — выбросы, а остальные 192 записи помечены как 1 — не выбросы.

Мы можем визуализировать выбросы с помощью PCA.

3. Фактор локальных выбросов (LOF)

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

Давайте посмотрим на реализацию с использованием класса LOF из scikit-learn.

from sklearn.neighbors import LocalOutlierFactor
LocalOutlierFactor(n_neighbors=20, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, contamination='auto', novelty=False, n_jobs=None)

LOF имеет несколько гиперпараметров, таких как n_neighbors для выбора количества соседей по умолчанию, равного 20, и загрязнение для определения доли выбросов, которая может быть равна 'float'то есть в диапазоне (0, 0,5] или 'auto', в котором используются пороги смещения и загрязнения, определенные в оригинальной статье.

Вызвав glass['outlier'].value_counts(), мы видим, что 34 записи помечены как -1 — выбросы, а остальные 180 записей помечены как 1 — не выбросы.

Наконец, мы можем визуализировать эти выбросы с помощью PCA.

Заключение

В этой статье мы рассмотрели различные методы обнаружения выбросов в нашем наборе данных. Мы начали с одномерных методов обнаружения выбросов и рассмотрели методы стандартного отклонения и межквартильного диапазона. Мы применили эти методы к столбцу «Na» в наборе данных идентификации стекла. Затем мы перешли к многомерным методам обнаружения выбросов и рассмотрели изолированный лес, DBSCAN и локальный фактор выбросов. С помощью этих методов мы научились обнаруживать выбросы, используя все измерения в пространстве признаков. В дополнение к обнаружению выбросов мы также научились использовать PCA — метод уменьшения размерности для визуализации n-мерных данных.

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



Надеюсь, вам понравилось читать об обнаружении выбросов, и вы найдете статью полезной для своей работы!

Если вам понравилась эта статья, вы можете прочитать другие мои статьи здесь и подписаться на меня на Medium. Дайте мне знать, если у вас есть какие-либо вопросы или предложения.✨

Понравилась эта статья? Стань участником, чтобы получить больше!

Рекомендации

  1. Изолированный лес от Scikit-Learn
  2. DBSCAN от Scikit-Learn
  3. Фактор локальных выбросов от Scikit-Learn
  4. Фотография заголовка Benjamin Voros на Unsplash
  5. Все остальные изображения принадлежат Автору
  6. Набор данных для идентификации стекла от Kaggle Дуа, Д. и Графф, К. (2019). Репозиторий машинного обучения UCI [http://archive.ics.uci.edu/ml]. Ирвин, Калифорния: Калифорнийский университет, Школа информационных и компьютерных наук.