← Назад к вопросам

Какие знаешь методы обработки выбросов в данных?

1.3 Junior🔥 201 комментариев
#Pandas и обработка данных#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы обработки выбросов в данных

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

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

Z-score метод — один из самых популярных. Выбросом считается значение, где |z| > 3:

from scipy import stats

z_scores = np.abs(stats.zscore(data))
outliers_mask = z_scores > 3
data_clean = data[~outliers_mask]

Метод межквартильного размаха (IQR) — очень надёжный и часто используется в индустрии:

Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers_mask = (data < lower_bound) | (data > upper_bound)

2. Методы на основе расстояний

Isolation Forest — алгоритм, специально разработанный для обнаружения аномалий:

from sklearn.ensemble import IsolationForest

iso_forest = IsolationForest(contamination=0.05, random_state=42)
outliers = iso_forest.fit_predict(data)
data_clean = data[outliers != -1]

Local Outlier Factor (LOF) — учитывает локальную плотность точек:

from sklearn.neighbors import LocalOutlierFactor

lof = LocalOutlierFactor(n_neighbors=20)
outliers = lof.fit_predict(data)
data_clean = data[outliers != -1]

3. Методы, специфичные для временных рядов

Seasonal Decomposition — разложение на тренд, сезонность и остаток. Выбросы выявляются как аномалии в остатке.

Prophet — библиотека Facebook, автоматически обнаруживает аномалии:

from prophet import Prophet

model = Prophet()
model.fit(df)
forecast = model.predict(df)
model.plot(forecast)  # видны аномалии

4. Стратегии обработки

Удаление — удалить выбросы полностью. Используется, если их мало (< 5%) и они — ошибки ввода.

Замена — заменить на медиану, среднее или другой репрезентативный квантиль:

median = data.median()
data[outliers_mask] = median

Трансформация — применить логарифм, квадратный корень или Box-Cox для сжатия диапазона:

from scipy.stats import boxcox

data_transformed, lambda_param = boxcox(data + 1)

Winsorization — ограничить экстремальные значения перцентилями (например, 5-й и 95-й):

from scipy.stats import mstats

data_winsorized = mstats.winsorize(data, limits=[0.05, 0.05])

5. Контекст и домен

Выбор метода зависит от:

  • Природы данных: финансовые, медицинские, IoT сенсоры требуют разных подходов
  • Размера выборки: на маленьких выборках удаление опасно
  • Бизнес-логики: в некоторых случаях выбросы — важные аномалии, а не ошибки
  • Типа задачи: для регрессии выбросы критичнее, чем для классификации

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

Какие знаешь методы обработки выбросов в данных? | PrepBro