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

«Какие методы обработки выбросов в данных вы знаете?» — вопрос из категории Предобработка данных, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Обработка выбросов — критический этап предобработки. Я выбираю метод, анализируя природу выброса (ошибка измерения vs редкое, но валидное событие) и задачу.

Основные методы:

1. Удаление (Trimming/Capping) Прямое удаление записей, выходящих за заданные границы. Риск — потеря информации.

# Удаление по IQR
Q1, Q3 = df['feature'].quantile([0.25, 0.75])
IQR = Q3 - Q1
lower_bound, upper_bound = Q1 - 1.5*IQR, Q3 + 1.5*IQR
df_clean = df[(df['feature'] >= lower_bound) & (df['feature'] <= upper_bound)]

2. Винзоризация (Winsorizing) Замена выбросов на значения определенных перцентилей (например, 1-го и 99-го). Сохраняет объем данных.

lower_limit = df['feature'].quantile(0.01)
upper_limit = df['feature'].quantile(0.99)
df['feature_winsorized'] = df['feature'].clip(lower_limit, upper_limit)

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

  • Логарифмирование: np.log1p(x) для правосторонних выбросов.
  • Квадратный корень: np.sqrt(x).
  • Обратное преобразование: 1/x.

4. Биннинг (Binning) Группировка значений в интервалы (бинны). Выброс попадает в крайний бинн.

df['feature_binned'] = pd.cut(df['feature'], bins=5, labels=False)

5. Импутация Замена выброса на более репрезентативное значение: медиану, среднее по кластеру или предсказанное значение модели.

6. Алгоритмическое обнаружение и обработка Использование моделей (Isolation Forest, DBSCAN) для автоматического выделения выбросов с последующей их изоляцией или маркировкой.

Важное правило: Перед обработкой всегда нужно визуализировать распределение (гистограмма, boxplot) и попытаться понять причину появления выброса. В задачах обнаружения мошенничества или неисправностей выбросы часто являются целевым объектом поиска, и удалять их нельзя.