Короткий ответ
Считаем Q1 и Q3, IQR = Q3 − Q1, и помечаем выбросами значения ниже Q1 − 1.5×IQR или выше Q3 + 1.5×IQR; коэффициент 1.5 — распространённое, но не обязательное значение.
Как это работает подробнее
метод опирается только на порядок значений (квартили), а не на среднее и стандартное отклонение, поэтому устойчив к искажению самими выбросами. Коэффициент 1.5 условно задаёт границу «умеренного» выброса; для более строгого отбора иногда используют коэффициент 3.
Пример кода
Пример на Python
import pandas as pd
s = pd.Series([12,14,13,15,14,13,90,12,14])
q1, q3 = s.quantile(0.25), s.quantile(0.75)
iqr = q3 - q1
lower, upper = q1 - 1.5*iqr, q3 + 1.5*iqr
outliers = s[(s < lower) | (s > upper)]
print(outliers) # найдёт значение 90Что использовать на практике
- На практике: метод хорошо подходит для умеренно скошенных распределений и как первый, быстрый скрининг. Для сильно скошенных данных (например, выручка с «длинным хвостом») даже обычные крупные, но легитимные значения могут попасть под правило — тогда стоит смотреть на данные в лог-шкале или использовать доменные знания, а не слепо удалять такие строки. Для продуктовых метрик с естественными нижними границами (например, время — не может быть отрицательным) стоит дополнительно проверять логичность самих значений до применения формального правила.
- Проверка: вручную посмотреть исходную запись со значением 90 — опечатка в единицах измерения или реально крупный заказ.
Подводные камни
- Частые ошибки: автоматически удалять все помеченные значения без проверки их природы (ошибка ввода vs реальное крупное значение); использовать фиксированный коэффициент 1.5 как универсальную истину для любых данных; применять метод к категориальным или сильно дискретным данным, где квартили малоинформативны. Также ошибочно применять единый порог IQR по всей базе без учёта разных сегментов, где нормальный разброс значений существенно различается.