← К списку уроков
Статистика·Средний·6 мин

Выбросы (аномалии): найти и обработать

Один кривой пуш испортил всю метрику. Что с этим делать.

Что такое выброс

Точка которая «не похожа» на остальные. Может быть:

  • Ошибка ввода (вес 1500 кг)
  • Реальная редкость (один VIP-клиент с заказом на 50М ₸)

Как найти

Метод IQR (стандарт)

q1, q3 = df['amount'].quantile([0.25, 0.75])
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
outliers = df[(df['amount'] < lower) | (df['amount'] > upper)]

Метод Z-score (для нормальных данных)

z = (df['amount'] - df['amount'].mean()) / df['amount'].std()
outliers = df[abs(z) > 3]  # значения за 3 sigma

Что с ними делать

  1. Удалить — если это ошибка (вес 1500 кг)
  2. Cap (winsorize) — заменить на 95-й перцентиль (для дальнейшего анализа)
  3. Анализировать отдельно — VIP-клиенты с заказами 10М ₸ заслуживают своего сегмента
  4. Логарифмировать — если распределение скошенное
    df['amount_log'] = np.log1p(df['amount'])
    

Подвох

Не удаляй автомат всё что за 3σ — теряешь информацию. Сначала посмотри что это: ошибка или реальный insight.