Выбросы и правило 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].
- Правило само подстраивается под масштаб данных, порог вручную не нужен.
- Выбросы нельзя удалять молча — нужно понять их причину и зафиксировать решение.