Эти пакеты дадут вам преимущество в анализе

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



Выброс — почему это важно?
Рассказ об экстремальных данныхtowardsdatascience.com



Существует множество методов обнаружения выбросов. Однако полезность метода зависит от данных и классификации выбросов. Иногда мы даже не знаем, как выбрать правильный метод или интерпретировать выброс. Вот почему многие пакеты Python были разработаны специально для обнаружения выбросов.

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

1. ПйОД

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

  • Обнаружение выбросов на основе угла
  • Кластерный фактор локального выброса
  • Анализ основных компонентов Обнаружение выбросов
  • Вариационный автоматический кодировщик

и многое другое. Если вам интересно ознакомиться со всеми доступными методами, вам следует посетить следующую страницу.

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

pip install pyod

После установки пакета попробуем загрузить образец набора данных. Я бы использовал данные о подсказках из пакета seaborn.

import seaborn as sns
import pandas as pd
df = sns.load_dataset('tips')
df.head()

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

sns.scatterplot(data = df, x = 'total_bill', y = 'tip')

Если мы посмотрим на график выше, мы заметим, что некоторые данные расположены в верхнем правом углу, что указывает на выброс. Но каков предел, если мы хотим классифицировать данные как выбросы и выбросы? Мы могли бы использовать PyOD, чтобы помочь нам выполнить работу в этом случае.

В нашем примере я бы использовал только два метода — обнаружение выбросов на основе угла (ABOD) и фактор локального выброса на основе кластера (CBLOF).

from pyod.models.abod import ABOD
from pyod.models.cblof import CBLOF

Начнем с модели ABOD; нам нужно установить параметр загрязнения или количество выбросов, обнаруженных в наших данных. Если я установлю загрязнение на 0,05, я хочу обнаружить 5% выбросов в наших данных. Давайте попробуем это с нашим кодом.

abod_clf = ABOD(contamination=outliers_fraction)
abod_clf.fit(df[['total_bill', 'tip']]))

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

#Return the classified inlier/outlier
abod_clf.labels_

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

cblof_clf = CBLOF(contamination=0.05,check_estimator=False, random_state=random_state)
cblof_clf.fit(df[['total_bill', 'tip']])
df['ABOD_Clf'] = abod_clf.labels_
df['CBLOF_Clf'] = cblof_clf.labels_

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

sns.scatterplot(data = df, x = 'total_bill', y = 'tip', hue = 'ABOD_Clf')

Из результата обнаружения выбросов ABOD мы могли видеть, что крайняя часть данных из центра считается выбросом. Посмотрим на модели CBLOF.

sns.scatterplot(data = df, x = 'total_bill', y = 'tip', hue = 'CBLOF_Clf')

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

2. алиби-обнаружение

Пакет python alibi-detect — это пакет с открытым исходным кодом, который фокусируется на обнаружении выбросов, состязательных действий и дрейфа. Этот пакет можно использовать для табличных и неструктурированных данных, таких как изображения или текст. Если вас интересует обнаружение выбросов в данных изображения, вы можете посетить пример здесь. Однако в этой статье я бы сосредоточился на табличных данных.

Пакет alibi-detect предлагает 10 методов обнаружения выбросов, о которых вы можете прочитать все здесь. Давайте попробуем один из методов на примере набора данных. Я бы использовал те же данные, что и предыдущий пакет.

В этом примере я бы использовал метод изолированного леса.

from alibi_detect.od import IForest
od = IForest(
    threshold=0.,
    n_estimators=100
)

Устанавливаем порог; если вы хотите установить порог автоматически, существует метод вывода порога. Затем мы обучаем модель нашему набору данных.

od.fit(df[['total_bill', 'tip']])

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

preds = od.predict(
    df[['total_bill', 'tip']],
    return_instance_score=True
)

Результатом будет словарь с оценкой экземпляра, если мы установим для него значение True и метку выброса.

preds['data'].keys()

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

df['IF_alibi'] = preds['data']['is_outlier']
sns.scatterplot(data = df, x = 'total_bill', y = 'tip', hue = 'IF_alibi')

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

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

3. Пиномали

PyNomaly — это пакет Python для обнаружения выбросов на основе LoOP (локальные вероятности выбросов). LoOP основан на факторе локального выброса (LOF), но оценки нормированы в диапазоне [0–1]. Если вы не уверены, что такое LOF, вы можете прочитать это в другой моей статье.



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

from PyNomaly import loop
m = loop.LocalOutlierProbability(df[['total_bill', 'tip']], use_numba=True, progress_bar=True).fit()
scores = m.local_outlier_probabilities

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

Каждые данные содержат вероятность как выброс. Мы могли бы попытаться сделать вывод, исходя из нашего суждения, какой набор данных является выбросом, например, точка данных с вероятностью выше 0,5.

df['loop_score'] = scores
df['loop_label'] = df['loop_score'].apply(lambda x: 1 if x >0.5 else 0)
sns.scatterplot(data = df, x = 'total_bill', y = 'tip', hue = 'loop_label')

Как видно из изображения выше, выброс находится в самой крайней точке данных, если вероятность выше 0,5.

Заключение

Обнаружение выбросов является основным видом деятельности специалистов по обработке и анализу данных. Выброс может повлиять на наш анализ и моделирование разными способами; Вот почему мы хотим обнаруживать выбросы при исследовании данных.

Чтобы помочь в обнаружении выбросов, я обрисовываю в общих чертах мой 3 лучших пакета Python для обнаружения выбросов; они есть:

  1. PyOD
  2. алиби-обнаружить
  3. Пиномали

Я надеюсь, что это помогает!

Посетите меня в моем LinkedIn или Twitter.

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

Если вы не подписаны как участник Medium, рассмотрите возможность подписки через моего реферала.