Что такое outliers (выбросы) и как их находить?
Outliers (выбросы) — это значения, которые значительно отличаются от остальных наблюдений в наборе данных. Они могут быть как результатом ошибок измерения или ввода, так и свидетельством редких, но важных событий. Обнаружение выбросов критично в анализе данных, статистике, машинном обучении и при построении отчётности, поскольку выбросы могут искажать результаты анализа и статистические выводы.
Причины появления выбросов
-
Ошибки сбора данных:
-
Неправильный ввод (ввод 10000 вместо 1000)
-
Повреждённые датчики, ошибки в оборудовании
-
-
Редкие события:
-
Всплески продаж в “чёрную пятницу”
-
Аномальные погодные условия
-
-
Смешанные распределения:
- Два разных типа популяций в одном датасете (например, доходы студентов и топ-менеджеров)
-
Влияние человеческого фактора:
- Нарушение инструкций, ручные корректировки
Влияние выбросов
-
На среднее значение: выбросы значительно смещают среднее.
-
На дисперсию и стандартное отклонение: увеличивают их, что может повлиять на доверительные интервалы и гипотезы.
-
На модели машинного обучения: выбросы могут исказить обучение регрессий и кластеризаций.
-
На визуализацию: графики становятся "сплюснутыми", маскируя важные закономерности.
Методы нахождения выбросов
1. Метод межквартильного размаха (IQR - Interquartile Range)
Один из самых популярных и надёжных методов.
-
Шаги:
-
Найти первый квартиль (Q1) и третий квартиль (Q3)
-
Вычислить межквартильный размах:
IQR=Q3−Q1IQR = Q3 - Q1 -
Определить границы выбросов:
-
Нижняя граница: Q1−1.5⋅IQRQ1 - 1.5 \cdot IQR
-
Верхняя граница: Q3+1.5⋅IQRQ3 + 1.5 \cdot IQR
-
-
-
Выбросы — значения за пределами этих границ.
Пример (Python):
```python
import pandas as pd
import numpy as np
data = pd.Series([10, 12, 14, 15, 16, 19, 21, 90])
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = data[(data < lower) | (data > upper)]
### **2\. Метод Z-оценки (z-score method)**
Используется для нормального распределения.
- **Формула Z-оценки**:
z=(x−μ)σz = \\frac{(x - \\mu)}{\\sigma}
где μ\\mu — среднее, σ\\sigma — стандартное отклонение.
- Если ∣z∣>3|z| > 3 (иногда >2.5), то значение считается выбросом.
**Пример (Python)**:
<br/>```python
from scipy import stats
import numpy as np
data = np.array(\[10, 12, 14, 15, 16, 19, 21, 90\])
z_scores = np.abs(stats.zscore(data))
outliers = data\[z_scores > 3\]
3. Визуальные методы
-
Boxplot (ящик с усами) — классический инструмент:
-
Центральная линия — медиана
-
"Усы" — границы без выбросов
-
Точки вне "усов" — выбросы
-
import matplotlib.pyplot as plt
plt.boxplot(data)
plt.show()
-
Scatter plot — позволяет видеть отклоняющиеся точки на плоскости.
-
Histogram — может показать редкие пики.
4. Методы кластеризации
-
DBSCAN (Density-Based Spatial Clustering):
- Идентифицирует плотные кластеры и метит изолированные точки как выбросы.
-
k-Means:
- Точки, находящиеся далеко от всех центров кластеров, могут считаться выбросами.
5. Методы машинного обучения
-
Isolation Forest:
-
Работает путём случайного "разрезания" данных и оценки, насколько быстро объект можно изолировать.
-
Чем быстрее изолируется — тем вероятнее выброс.
-
-
One-Class SVM:
- Модель обучается на "нормальных" данных и оценивает, насколько новый объект принадлежит к ним.
6. LOF (Local Outlier Factor)
-
Оценивает "локальную плотность" точки по сравнению с соседями.
-
Если плотность существенно ниже, чем у соседей — это выброс.
Как работать с выбросами
-
Оставить без изменений — если выбросы отражают реальные события (например, всплеск продаж).
-
Удалить — если выброс вызван ошибкой или он искажает статистику.
-
Заменить:
-
На медиану
-
На ближайшее допустимое значение
-
-
Обработать отдельно — использовать специальную модель для выбросов.
-
Использовать робастные модели — менее чувствительные к выбросам (например, медианная регрессия).
Советы
-
Всегда понимай контекст: выброс может быть важным сигналом, а не ошибкой.
-
Применяй несколько методов обнаружения: они могут дать разные результаты.
-
Используй визуализацию для подтверждения выводов.
-
При работе с большими данными автоматизируй процесс поиска и анализа выбросов.
Выбросы — не всегда враги, иногда это сигналы! Правильная диагностика и обработка выбросов позволяет улучшить точность анализа и повысить качество моделей.