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

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

Наш тестовый набор данных

data = pd.DataFrame([
    [87, 82, 85],
    [81, 89, 75],
    [86, 87, 69],
    [91, 79, 86],
    [88, 89, 82],
    [0, 0, 0],  # this guy missed the exam
    [100, 100, 100],
], columns=["math", "science", "english"])

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

Изоляция Лес

from sklearn.ensemble import IsolationForest
predictions = IsolationForest().fit(data).predict(data)
# predictions = array([ 1,  1,  1,  1,  1, -1, -1])

Здесь predictions содержит 1 прогноз для каждой строки в данных — 1 означает, что строка НЕ ​​является выбросом, а -1 означает, что строка является выбросом. Здесь наш алгоритм изолированного леса предсказал, что последние 2 строки в data являются выбросами.

Эллиптическая оболочка

from sklearn.covariance import EllipticEnvelope
predictions = EllipticEnvelope().fit(data).predict(data)
# predictions = array([ 1,  1,  1,  1,  1, -1, 1])

Здесь мы просто используем другой алгоритм обнаружения выбросов вместо IsolationForest, но код остается прежним (за исключением имени алгоритма). Точно так же в predictions 1 означает отсутствие выброса, а -1 означает выброс. В этом случае наш алгоритм эллиптического конверта предсказал только предпоследнего ученика как выброс (парень с нулями).

Фактор локального выброса

from sklearn.neighbors import LocalOutlierFactor
predictions = LocalOutlierFactor(n_neighbors=5, novelty=True).fit(data).predict(data)
# array([ 1,  1,  1,  1,  1, -1,  1])

Local Outlier Factor — это еще один алгоритм обнаружения выбросов, доступный на sklearn, который мы можем просто подключить и использовать здесь. Точно так же он предсказывает только 2-ю последнюю строку данных как выброс.

Выбор алгоритма обнаружения выбросов

Так как же решить, какой алгоритм обнаружения выбросов лучше? Короткий ответ заключается в том, что не существует «лучшего» алгоритма обнаружения выбросов — мы можем просто думать о них как о разных способах делать одни и те же вещи (и получать немного разные результаты).

Удаление выбросов

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

# predictions = array([ 1,  1,  1,  1,  1, -1,  1])
data2 = data[predictions==1]

И здесь мы выполнили обработку выбросов в 3 строках кода.

Заключение

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

Зарегистрируйтесь, используя мою ссылку здесь, чтобы читать неограниченное количество статей на Medium.

Я пишу статьи по программированию (раз в 1–3 дня), которые, вероятно, помогли бы мне, когда я был моложе, ускорить процесс обучения. Присоединяйтесь к моему списку адресов электронной почты, чтобы получать уведомления о каждой публикации.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.