Работая с набором данных реального мира, мы можем столкнуться с очень беспорядочными данными, которые содержат много повторяющихся значений. Такие записи не добавляют никакой ценности или информации при использовании их в модели и скорее замедляют обработку. Таким образом, лучше удалить дубликаты перед передачей данных в модель. Следующий метод можно использовать для проверки повторяющихся значений в pandas —
Чтобы проверить наличие дубликатов, мы используем функцию «дублировать» в Pandas.
Если df является DataFrame, то df.duplicated() проверит, повторялась ли вся строка где-либо в кадре данных.
# to check for duplicate values in a particular column df.duplicated('column1') # to check for duplicate values in some specific columns df.duplicated(['column1', 'column2', 'column3')] # To check the number of duplicate values df.duplicated.sum()
Как только мы определили дубликаты в наборе данных, пришло время их удалить. Чтобы удалить дубликаты, мы используем функцию drop_duplicates в Pandas.
# Dropping duplicates df.drop_duplicates() # to delete duplicates from a particular column df.drop_duplicates('column1') # to delete duplicates from some specific columns df.drop_duplicates(['column1', 'column2', 'column3')]
Аргумент «сохранить» также можно использовать с drop_duplicates. keep = ‘first’ сохраняет первую запись и удаляет остальные дубликаты, keep = ‘last’ сохраняет последнюю запись и удаляет остальные, а keep = False удаляет все записи.
Примечание. Кроме того, не забудьте добавить аргумент inplace со значением True, чтобы сохранить изменения, внесенные в фрейм данных.
Теперь мы знаем, как обрабатывать дубликаты в нашем наборе данных. Но борьба за получение чистого набора данных для работы на этом не заканчивается :( Нам также нужно искать выбросы.
Обработка выбросов
Выбросы — это значения в наборе данных, которые нетипичны и отличаются от большинства точек данных, но могут быть или не быть ложными. Выбросы могут возникать из-за изменчивости данных или, возможно, из-за машинных или человеческих ошибок.
Обнаружение и обработка выбросов очень важны в любом проекте машинного обучения. Однако не всегда требуется удалять или удалять выбросы. Это зависит от постановки задачи и того, чего мы пытаемся достичь с помощью этой модели. Например, в задачах, связанных с обнаружением аномалий, обнаружением мошенничества и т. д., большую роль играют выбросы. В таких сценариях необходимо отслеживать выбросы. Кроме того, тип используемых алгоритмов также определяет, в какой степени выбросы повлияют на модель. Алгоритмы на основе веса, такие как линейная регрессия, логистическая регрессия, ADABoost и другие методы глубокого обучения, сильно зависят от выбросов. В то время как алгоритмы на основе дерева, такие как дерево решений, случайный лес и т. д., не так сильно подвержены выбросам.
Обнаружение выбросов
Выбросы могут быть обнаружены с помощью следующих методов:
1 – Блочные диаграммы. Создание блочной диаграммы — это разумный способ определить, есть ли в наборе данных выбросы. На следующем рисунке показан коробочный график -
Здесь ясно видно, что точки данных, лежащие за пределами усов, являются выбросами. Нижний уровень соответствует Q1–1,5*IQR, а верхний уровень соответствует Q3 + 1,5*IQR, где Q1, Q3 и IQR – 1-й квартиль (25-й процентиль). , 3-й квартиль (75-й процентиль) и межквартильный диапазон (Q3-Q1) соответственно. Это также известно как правило близости IQR.
2. Использование Z-показателей. Согласно правилу 66–95–99,7, для нормально распределенных данных 99,7 % данных находятся в пределах 3 стандартных отклонений от среднего значения. Таким образом, если точка находится за пределами 3 стандартных отклонений от среднего значения, она считается выбросом. Для этого мы можем рассчитать z-показатели точек данных и оставить порог равным 3. Если z-показатель любой точки больше 3 или меньше -3, это выброс. Но это правило справедливо только для нормальных распределений. Прочтите мою статью о статистике машинного обучения, чтобы узнать больше о z-значениях.
Работа с выбросами
Как только мы обнаружили выбросы, также важно обработать их, чтобы наша модель давала точные результаты. Вот некоторые из методов, которые используются для работы с выбросами:
1 – Обрезка – это, по сути, удаление или удаление выбросов. Это хорошо работает для больших наборов данных. Но если есть много выбросов или если набор данных не такой большой, это уменьшит количество точек данных, что, в свою очередь, может повлиять на результаты и точность модели. Этот тип метода хорош, если выбросы вызваны ошибками измерения или ошибками ввода данных.
# Calculate the upper and lower limits Q1 = df['A'].quantile(0.25) Q3 = df['A'].quantile(0.75) IQR = Q3 - Q1 lower = Q1 – 1.5*IQR upper = Q3 + 1.5*IQR # Create arrays of Boolean values indicating the outlier rows upper_array = np.where(df['A']>=upper)[0] lower_array = np.where(df['A']<=lower)[0] # Removing the outliers df.drop(index=upper_array, inplace=True) df.drop(index=lower_array, inplace=True)
2- Ограничение. Это еще один метод, обычно используемый для небольших наборов данных, из которых невозможно удалить выбросы. Здесь мы определяем верхнее пороговое значение и нижнее пороговое значение и присваиваем эти же значения всем точкам данных выше или ниже этого порога соответственно. Например, если мы решим, что верхнее пороговое значение будет равно 95-му процентилю, а нижнее пороговое значение будет равно 5-му процентилю, то точкам выше 95-го процентиля будет присвоено значение 95-го процентиля, а точкам ниже 5-го процентиля будет присвоено значение 5-го процентиля. Этот метод также называется Winsorization.
# Calculate the upper and lower limit Q1 = df['A'].quantile(0.25) Q3 = df['A'].quantile(0.75) IQR = Q3 - Q1 lower = Q1 – 1.5*IQR upper = Q3 + 1.5*IQR df['A'] = np.where( df['A'] > upper, upper, np.where( df['A'] < lower, lower, df['A']) )
3 — Импутация. Этот метод используется реже. Опять же, это для относительно небольших наборов данных. Здесь выбросы рассматриваются как отсутствующие значения и обрабатываются так же, как мы обрабатываем отсутствующие значения, т. е. вменение среднего или медианы в зависимости от типа данных. Но этот метод не очень распространен, так как он может изменить распределение данных.
4- Дискретизация. Дискретизация — это метод, при котором значения числовых признаков преобразуются в интервалы. Например, для столбца «Возраст» в наборе данных могут быть созданы такие ячейки, как 45–55, 55–65, 65–75, ›75 и т. д. В этом случае значения выше 75 попадут в >75, и все возрасты старше 75 будут рассматриваться одинаково.
Примечание. Иногда выбросы могут на самом деле не быть выбросами, если мы углубимся в детализацию данных. Таким образом, просмотр данных с разной степенью детализации следует рассматривать для еще лучшей обработки выбросов. Это более сложный метод, который, однако, будет работать только тогда, когда существует огромная разница в распределении при просмотре данных с разной степенью детализации. Например, в наборе данных о ценах на автомобили, в котором большинство автомобилей находится в пределах 50 000 долларов США, роскошные автомобили, такие как Aston Martin, Bentley и т. д., будут выбросами. Но неразумно удалять эти автомобили, так как они могут понадобиться нам в нашем анализе. Если мы разделим данные по производителям, данные об этих роскошных автомобилях не будут выпадающими в своей собственной категории.
Итак, в заключение, также важно иметь некоторое представление о данных и быть осторожным при работе с выбросами, потому что любые изменения в наборе данных могут исказить результаты и общую точность модели.
Следите за новыми статьями о науке о данных и аналитике!