Выбросы и правило 1.5·IQR

Выброс — это значение, которое выбивается из общей картины. Найти его нужно прежде, чем оно испортит ваши выводы.

Выброс (outlier) — наблюдение, заметно отличающееся от остальных. Это может быть ошибка ввода, редкое событие или важный сигнал — но игнорировать его нельзя.

Почему выбросы опасны

Мы уже видели: один выброс взвинчивает среднее и раздувает стандартное отклонение. Он искажает корреляции, ломает прогнозы моделей, портит графики. Но выброс — не всегда «мусор»: иногда это самое интересное в данных (мошенническая транзакция, сбой оборудования, вирусный пост). Поэтому выбросы сначала находят, потом разбираются, и только потом решают, что с ними делать.

Правило 1.5·IQR

Самый популярный формальный критерий опирается на квартили из прошлого урока. Считаем IQR, отступаем от Q1 и Q3 на 1.5 IQR — всё, что вышло за эти «усы», считается выбросом.

Формула простыми словами:

  • нижняя граница = Q1 − 1.5 · IQR;
  • верхняя граница = Q3 + 1.5 · IQR;
  • значение вне границ — кандидат в выбросы.
from statistics import quantiles

data = [10, 12, 12, 13, 12, 11, 14, 13, 15, 102, 12, 11]

q1, q2, q3 = quantiles(data, n=4)
iqr = q3 - q1
low = q1 - 1.5 * iqr
high = q3 + 1.5 * iqr

print("Q1:", q1, "Q3:", q3, "IQR:", iqr)
print("Границы:", round(low, 2), "..", round(high, 2))

outliers = [x for x in data if x < low or x > high]
print("Выбросы:", outliers)

Вывод:

Q1: 11.25 Q3: 13.75 IQR: 2.5
Границы: 7.5 .. 17.5
Выбросы: [102]

Алгоритм безошибочно поймал значение 102 на фоне чисел около 12. Заметьте: мы нигде не задавали «порог 100» вручную — правило само адаптируется к масштабу данных через IQR. Для зарплат границы будут в тысячах, для температур — в градусах.

Почему именно 1.5

Коэффициент 1.5 — компромисс, предложенный Джоном Тьюки, автором «ящика с усами». При 1.5 за границу для типичных (примерно нормальных) данных выходит лишь малая доля значений — отсекаются действительно редкие. Иногда берут 3.0 для «крайних» выбросов. Это не закон природы, а удобное соглашение; на сильно скошенных данных к нему относятся осторожнее.

Что делать с найденным выбросом

Найти — половина дела. Дальше решение зависит от природы выброса:

ПричинаЧто делать
Ошибка ввода (рост 1750 см)исправить или удалить
Реальное редкое событиеоставить, изучить отдельно
Другая популяция попала в данныеразделить выборки

Главное правило: никогда не удаляйте выбросы молча. Удаление данных только потому, что они «портят красивый результат», — это подгонка, а не анализ. Всегда фиксируйте, что и почему вы убрали.

Сравним устойчивые и неустойчивые меры

from statistics import mean, median, stdev

clean = [10, 12, 12, 13, 12, 11, 14, 13, 15, 12, 11]
dirty = clean + [102]

print("Чистые -> среднее:", round(mean(clean), 1), "медиана:", median(clean))
print("С выбросом -> среднее:", round(mean(dirty), 1), "медиана:", median(dirty))
print("Стандартное отклонение: чистое", round(stdev(clean), 1),
      "/ грязное", round(stdev(dirty), 1))

Вывод:

Чистые -> среднее: 12.3 медиана: 12
С выбросом -> среднее: 19.8 медиана: 12.0
Стандартное отклонение: чистое 1.4 / грязное 25.9

Один выброс почти не тронул медиану (устойчивая мера), но среднее подскочило с 12.3 до 19.8, а стандартное отклонение — с 1.5 до 26.6. Это и есть аргумент в пользу устойчивых мер на грязных данных.

Итог

  • Выброс — значение, выбивающееся из общей массы; он искажает среднее и σ.
  • Правило 1.5·IQR: выброс — всё, что вне [Q1 − 1.5·IQR; Q3 + 1.5·IQR].
  • Правило само подстраивается под масштаб данных, порог вручную не нужен.
  • Выбросы нельзя удалять молча — нужно понять их причину и зафиксировать решение.
Проверьте себя
1. Как по правилу 1.5·IQR вычисляется верхняя граница для выбросов?
AQ3 + 1.5 · IQR
Bмаксимум − 1.5 · IQR
Cсреднее + 1.5 · стандартное отклонение
DQ1 + 1.5 · IQR
2. Почему правило 1.5·IQR удобно?
AОно всегда находит ровно один выброс
BОно само подстраивается под масштаб данных через IQR, без ручного порога
CОно работает только для зарплат
DОно удаляет выбросы автоматически
3. Что НЕ стоит делать с обнаруженным выбросом?
AПроверить, не ошибка ли это ввода
BИзучить его как возможное редкое событие
CМолча удалить, потому что он портит результат
DЗафиксировать решение о его обработке
Поддержать проект