Что такое outliers (выбросы) и как их находить?

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

Причины появления выбросов

  1. Ошибки сбора данных:

    • Неправильный ввод (ввод 10000 вместо 1000)

    • Повреждённые датчики, ошибки в оборудовании

  2. Редкие события:

    • Всплески продаж в “чёрную пятницу”

    • Аномальные погодные условия

  3. Смешанные распределения:

    • Два разных типа популяций в одном датасете (например, доходы студентов и топ-менеджеров)
  4. Влияние человеческого фактора:

    • Нарушение инструкций, ручные корректировки

Влияние выбросов

  • На среднее значение: выбросы значительно смещают среднее.

  • На дисперсию и стандартное отклонение: увеличивают их, что может повлиять на доверительные интервалы и гипотезы.

  • На модели машинного обучения: выбросы могут исказить обучение регрессий и кластеризаций.

  • На визуализацию: графики становятся "сплюснутыми", маскируя важные закономерности.

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

1. Метод межквартильного размаха (IQR - Interquartile Range)

Один из самых популярных и надёжных методов.

  • Шаги:

    1. Найти первый квартиль (Q1) и третий квартиль (Q3)

    2. Вычислить межквартильный размах:
      IQR=Q3−Q1IQR = Q3 - Q1

    3. Определить границы выбросов:

      • Нижняя граница: 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)

  • Оценивает "локальную плотность" точки по сравнению с соседями.

  • Если плотность существенно ниже, чем у соседей — это выброс.

Как работать с выбросами

  1. Оставить без изменений — если выбросы отражают реальные события (например, всплеск продаж).

  2. Удалить — если выброс вызван ошибкой или он искажает статистику.

  3. Заменить:

    • На медиану

    • На ближайшее допустимое значение

  4. Обработать отдельно — использовать специальную модель для выбросов.

  5. Использовать робастные модели — менее чувствительные к выбросам (например, медианная регрессия).

Советы

  • Всегда понимай контекст: выброс может быть важным сигналом, а не ошибкой.

  • Применяй несколько методов обнаружения: они могут дать разные результаты.

  • Используй визуализацию для подтверждения выводов.

  • При работе с большими данными автоматизируй процесс поиска и анализа выбросов.

Выбросы — не всегда враги, иногда это сигналы! Правильная диагностика и обработка выбросов позволяет улучшить точность анализа и повысить качество моделей.