Работая с набором данных реального мира, мы можем столкнуться с очень беспорядочными данными, которые содержат много повторяющихся значений. Такие записи не добавляют никакой ценности или информации при использовании их в модели и скорее замедляют обработку. Таким образом, лучше удалить дубликаты перед передачей данных в модель. Следующий метод можно использовать для проверки повторяющихся значений в 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 и т. д., будут выбросами. Но неразумно удалять эти автомобили, так как они могут понадобиться нам в нашем анализе. Если мы разделим данные по производителям, данные об этих роскошных автомобилях не будут выпадающими в своей собственной категории.

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

Следите за новыми статьями о науке о данных и аналитике!