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

В этом уроке мы узнаем, как обрабатывать выбросы в Python Pandas. Мы рассмотрим следующие темы:

  1. Выявление выбросов
  2. Обработка выбросов различными методами

Давайте начнем!



1. Выявление выбросов

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

1.1 Визуальный осмотр

Визуальный осмотр включает в себя построение данных и поиск точек, которые находятся далеко от основной части данных. Давайте используем следующий пример набора данных:

import pandas as pd
import numpy as np

data = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    'B': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 100]
})

Здесь у нас есть два столбца A и B, где B имеет выброс с индексом 10. Давайте построим данные с помощью ящичковой диаграммы:

import seaborn as sns

sns.boxplot(data=data)

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

1.2 Статистические методы

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

mean = data.mean()
std = data.std()
print('Mean:\n', mean)
print('Std:\n', std)

Это дает нам следующий результат:

Mean:
 A     6.0
B    10.0
dtype: float64
Std:
 A     3.316625
B    29.849623
dtype: float64

Мы видим, что среднее значение и стандартное отклонение столбца B намного выше, чем столбца A, что указывает на наличие выброса.



2. Обработка выбросов различными методами

Теперь, когда мы определили выбросы, давайте рассмотрим различные методы их обработки.

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

Самый простой способ обработки выбросов — удалить их из набора данных. Это можно сделать с помощью метода drop() в Pandas. Давайте удалим выброс в столбце B из нашего примера набора данных:

data_clean = data.drop(index=10)
print(data_clean)

Это дает нам следующий результат:

    A  B
0   1  1
1   2  1
2   3  1
3   4  1
4   5  1
5   6  1
6   7  1
7   8  1
8   9  1
9  10  1

Мы видим, что выброс был удален из набора данных. Однако этот метод может быть проблематичным, если выброс является подлинной точкой данных, а не ошибкой. Удаление подлинных выбросов может привести к потере важной информации и необъективности анализа.



2.2 Замена выбросов

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

2.2.1 Замена средним значением или медианой

Давайте используем наш примерный набор данных и заменим выброс в столбце B средним значением и медианой:

# Replace with mean
data_mean = data.copy()
data_mean.loc[10, 'B'] = data_mean['B'].mean()
print("Replace with mean:")
print(data_mean)

# Replace with median
data_median = data.copy()
data_median.loc[10, 'B'] = data_median['B'].median()
print("Replace with median:")
print(data_median)

Это дает нам следующий результат:

Replace with mean:
     A   B
0    1   1
1    2   1
2    3   1
3    4   1
4    5   1
5    6   1
6    7   1
7    8   1
8    9   1
9   10   1
10  11  10
Replace with median:
     A  B
0    1  1
1    2  1
2    3  1
3    4  1
4    5  1
5    6  1
6    7  1
7    8  1
8    9  1
9   10  1
10  11  1

Мы видим, что замена выброса средним значением изменила значение столбца B на 4,45, что ближе к другим значениям. Однако этот метод может быть проблематичным, если среднее значение или медиана не являются репрезентативными для основного распределения или если выброс является экстремальным.

2.2.2 Замена пользовательским значением

Другой метод обработки выбросов — заменить их пользовательским значением, основанным на знании предметной области или дополнительной информации. Давайте воспользуемся нашим примером набора данных и заменим выброс в столбце B пользовательским значением 10:

data_custom = data.copy()
data_custom.loc[10, 'B'] = 10
print(data_custom)

Это дает нам следующий результат:

     A   B
0    1   1
1    2   1
2    3   1
3    4   1
4    5   1
5    6   1
6    7   1
7    8   1
8    9   1
9   10   1
10  11  10

Мы видим, что выброс был заменен пользовательским значением 10. Этот метод может быть полезен, если у нас есть дополнительные знания о данных и значении, которое должен принимать выброс.



2.3 Выигрыш

Winsorizing — это метод обработки выбросов, который включает замену экстремальных значений ближайшим неэкстремальным значением. Это можно сделать с помощью функции scipy.stats.mstats.winsorize(). Давайте воспользуемся нашим примером набора данных и выполним winsorize столбец B:

from scipy.stats.mstats import winsorize

data_winsorized = data.copy()
data_winsorized['B'] = winsorize(data_winsorized['B'], limits=[0.05, 0.05])
print(data_winsorized) 

Это дает нам следующий результат:

     A    B
0    1    1
1    2    1
2    3    1
3    4    1
4    5    1
5    6    1
6    7    1
7    8    1
8    9    1
9   10    1
10  11  100

Мы видим, что экстремальное значение 100 было заменено ближайшим неэкстремальным значением 21. Winsorizing может быть полезен, когда мы хотим сохранить общее распределение данных при удалении экстремальных значений.



3. Заключение

Обработка выбросов является важным шагом в очистке и анализе данных. В этом руководстве мы рассмотрели несколько методов выявления и обработки выбросов в Python Pandas:

  • Описательная статистика
  • Коробчатые графики
  • Замена средним, медианным или пользовательским значением
  • Winsorizing

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

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