Прежде чем проверять гипотезы, данные нужно описать: где центр, какой разброс, есть ли длинный хвост и выбросы. На собесе аналитика с этого начинается почти любой кейс: «средний чек вырос, что вы посмотрите первым?».
Меры центра
- Среднее (mean): сумма, делённая на число наблюдений. Чувствительно к выбросам: один заказ на миллион поднимает средний чек всего магазина.
- Медиана: значение посередине отсортированного ряда. При чётном числе наблюдений это среднее двух центральных. Устойчива к выбросам.
- Мода: самое частое значение. Полезна для категорий и дискретных величин.
import statistics as st
checks = [500, 700, 800, 900, 50_000]
st.mean(checks) # 10580
st.median(checks) # 800
Если среднее сильно больше медианы, у распределения длинный правый хвост. Так выглядят почти все денежные метрики: чек, выручка на пользователя, LTV.
Меры разброса
- Размах: максимум минус минимум. Зависит только от двух крайних точек.
- Дисперсия: средний квадрат отклонения от среднего. Стандартное отклонение (std) это корень из дисперсии, оно в тех же единицах, что и данные.
- Межквартильный размах (IQR): Q3 - Q1, разброс средней половины данных. Устойчив к выбросам.
Выборочная дисперсия делится на n - 1, а не на n (поправка Бесселя). Причина: отклонения считаются от выборочного среднего, которое само подогнано под данные, и без поправки дисперсия генеральной совокупности систематически занижается.
st.pvariance([2, 4, 6]) # 2.667 делим на n
st.variance([2, 4, 6]) # 4.0 делим на n - 1
Осторожно: в numpy np.std по умолчанию делит на n (ddof=0), а в pandas Series.std() на n - 1 (ddof=1). Отсюда разные цифры на одних и тех же данных.
Квантили
Квантиль уровня p это значение, ниже которого лежит доля p данных. Медиана это квантиль 0.5, квартили это 0.25 и 0.75, перцентиль 95 это квантиль 0.95. Для времени ответа сервиса смотрят p95 и p99, а не среднее: среднее прячет медленный хвост.
Способов интерполяции между точками несколько, поэтому разные библиотеки могут дать немного разные квартили на маленьких выборках. Это нормально.
Выбросы
Классическое правило Тьюки: выбросы лежат ниже Q1 - 1.5·IQR или выше Q3 + 1.5·IQR. Это же правило рисует «усы» на boxplot. Правило «3 сигмы» работает для данных, близких к нормальным; на скошенных данных оно режет честный хвост.
Что делать с выбросами, решает не формула, а смысл:
- ошибка данных (возраст 300 лет) удаляется или исправляется;
- реальные «киты» (крупные покупатели) остаются, но для тестов метрику можно винзоризовать: обрезать значения выше, скажем, 99-го перцентиля до самого перцентиля.
Форма распределения
- Асимметрия (skewness): положительная, если хвост справа.
- Эксцесс (kurtosis): насколько тяжёлые хвосты по сравнению с нормальным распределением.
На практике форму проще увидеть гистограммой, чем читать коэффициенты.
Взвешенное среднее и средние по группам
Средняя конверсия по странам, усреднённая без весов, не равна общей конверсии: у стран разный трафик. Общая метрика это сумма успехов, делённая на сумму попыток, или взвешенное среднее с весами-размерами групп.
Корреляция
Коэффициент Пирсона измеряет линейную связь от -1 до 1. Он чувствителен к выбросам и не видит нелинейных зависимостей. Спирмен считает корреляцию рангов: устойчив к выбросам и ловит любую монотонную связь. И главное: корреляция не означает причинность.
Частые ошибки
- Отчитываться средним по денежной метрике без медианы и квантилей.
- Путать дисперсию выборки и генеральной совокупности,
ddofв numpy и pandas. - Удалять «выбросы» по формуле, не проверив, что это ошибка.
- Усреднять доли или средние групп без весов.
Что спросят на собесе
- Когда медиана лучше среднего и почему?
- Почему выборочная дисперсия делится на n - 1?
- Как найти выбросы и что с ними делать?
- Что такое p95 и зачем он нужен?
- Чем корреляция Пирсона отличается от Спирмена?