Простые способы обнаружения выбросов в вашем наборе данных, которые требуют не слишком много строк кода.
Если вы новичок в науке о данных, машинном обучении и т. д., вот 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. Если вы зарегистрируетесь по моей ссылке ниже, я получу небольшую комиссию без каких-либо дополнительных затрат для вас.
Я пишу статьи по программированию (раз в 1–3 дня), которые, вероятно, помогли бы мне, когда я был моложе, ускорить процесс обучения. Присоединяйтесь к моему списку адресов электронной почты, чтобы получать уведомления о каждой публикации.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.