Статистика·Средний·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
Что с ними делать
- Удалить — если это ошибка (вес 1500 кг)
- Cap (winsorize) — заменить на 95-й перцентиль (для дальнейшего анализа)
- Анализировать отдельно — VIP-клиенты с заказами 10М ₸ заслуживают своего сегмента
- Логарифмировать — если распределение скошенное
df['amount_log'] = np.log1p(df['amount'])
Подвох
Не удаляй автомат всё что за 3σ — теряешь информацию. Сначала посмотри что это: ошибка или реальный insight.