Короткий ответ
Z-score (отклонение от среднего в единицах стандартного отклонения) хорошо работает для примерно нормально распределённых данных без сильных выбросов; IQR устойчивее к выбросам и скошенным распределениям, так как опирается на квантили, а не на среднее и SD, которые сами искажаются выбросами.
Как это работает подробнее
Z-score = (x − mean) / SD; и среднее, и SD вычисляются по всей выборке, включая потенциальные выбросы, поэтому при экстремальных значениях сам порог «сдвигается» вместе с ними — это называется эффектом маскировки выбросов. IQR опирается на квартили, которые гораздо устойчивее к отдельным экстремальным значениям.
Пример кода
Пример на Python
import numpy as np
data = np.array([10,12,11,13,12,11,10,200]) # последний элемент — явный выброс
z_scores = (data - data.mean()) / data.std()
print(z_scores) # выброс 200 может "растянуть" std и занизить собственный z-score
q1, q3 = np.percentile(data, [25, 75])
iqr = q3 - q1
print((data < q1 - 1.5*iqr) | (data > q3 + 1.5*iqr)) # IQR надёжнее находит выброс здесьЧто использовать на практике
- На практике. для метрик, близких к нормальному распределению (например, время отклика сервера в стабильной системе без сбоев), Z-score с порогом 2–3 — простой и интерпретируемый способ. Для метрик с тяжёлыми хвостами или сильной скошенностью (доход, время сессии, размер заказа) обычно лучше IQR или предварительное логарифмирование перед применением Z-score. При малых выборках оба метода менее надёжны, и стоит дополнительно смотреть на данные визуально. Полезно также комбинировать оба метода: использовать IQR для первичного скрининга на скошенных данных, а Z-score — уже после логарифмирования, когда распределение становится ближе к симметричному.
- Пример. Sanity check: сравнить, помечает ли метод Z-score значение 200 как выброс при пороге 3 — часто из-за эффекта маскировки оно может не превысить порог, в отличие от IQR-метода.
Подводные камни
- Частые ошибки. применять Z-score к сильно скошенным данным и неправильно выявлять «нормальные» крупные значения как выбросы или, наоборот, пропускать реальные аномалии из-за эффекта маскировки; использовать фиксированный порог (Z>3 или 1.5×IQR) как универсальное правило без учёта специфики метрики и бизнес-контекста; не документировать выбранный метод и порог, что мешает воспроизводимости анализа. Ещё одна ошибка — применять фиксированный порог (Z>3 или 1.5×IQR), не адаптируя его под специфику конкретной метрики и не проверяя, сколько процентов данных он реально отсекает в каждом случае.