Модуль 4. Карта выбора статкритерия

1. Зачем нужна карта

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

Эта карта — decision tree. Она не заменяет понимание, но позволяет быстро сузить выбор до 1–2 подходов и сразу увидеть, какие допущения нужно проверить.

2. Четыре группы метрик

1. Доля (Proportion)

Каждая единица анализа — бинарный исход: 0 или 1. Числитель — подсчёт событий, знаменатель — количество экспозиций.

Примеры: CR (покупки / пользователи), CTR (клики / показы), retention Day 7, refund rate (возвраты / заказы).

Ключевое свойство: распределение биномиальное. CLT работает быстро при достаточном n.

2. Поюзерная метрика (Per-user)

Одно числовое значение на пользователя. Агрегируется как среднее.

Примеры: число заказов, число сессий, GMV per user, время в приложении.

Ключевое свойство: распределение может быть любым — от нормального до тяжёлых хвостов с zero inflation.

3. Ratio-метрика

Отношение двух величин разной природы. Числитель — не подсчёт бинарных событий знаменателя.

Примеры: AOV = GMV / заказы, RPM = выручка / показы, стоимость доставки на заказ.

Ключевое свойство: дисперсия зависит от ковариации числителя и знаменателя. Наивный t-test на средних отношениях некорректен.

4. Условная метрика (Conditional)

Метрика считается по подмножеству, определённому post-treatment поведением.

Примеры: ARPPU (среди покупателей), средний рейтинг (среди оставивших отзыв), конверсия среди увидевших фичу.

Ключевое свойство: treatment влияет на состав подвыборки → selection bias.

3. Decision tree: какой тест и почему

Proportion + большая выборка + нет кластеров

→ z-test для долей / chi-square

Стандартный случай. Биномиальная интуиция, CLT обеспечивает нормальность. Пример: CR (покупки/пользователи), 50K на группу → z-test.

Proportion + малая выборка

→ Точный тест Фишера / permutation-bootstrap

Нормальная аппроксимация ненадёжна при малых n или доле, близкой к 0/1. Пример: CR среди B2B-клиентов, 200 на группу → точный тест.

Per-user + нет heavy tail

→ t-test / Welch t-test

Welch — дефолт (не требует равенства дисперсий). Пример: число сессий, 30K на группу → Welch t-test.

Per-user + heavy tail

→ Bootstrap / trimmed mean / winsorization

Одиночный выброс может перевернуть результат t-test. Пример: revenue per user, 100K на группу, 0.1% пользователей = 40% выручки → bootstrap.

Ratio + большая выборка + нет heavy tail

→ Delta-method / линеаризация

Delta-method аппроксимирует дисперсию через Taylor-ряд. Корректно учитывает ковариацию числителя и знаменателя. Пример: AOV, 80K на группу, умеренные чеки → delta-method.

Ratio + heavy tail или малая выборка

→ Bootstrap отношения

Delta-method чувствителен к выбросам. Пример: RPM, 5K на группу, heavy tail в рекламной выручке → bootstrap.

Conditional

→ Двухэтапная процедура / регрессия с коррекцией

Наивное сравнение средних смещено. Нужна коррекция на то, что состав подвыборки зависит от treatment. Пример: ARPPU, treatment увеличил конверсию → состав «платящих» изменился → двухэтапная процедура.

4. Чеклист допущений

Перед применением любого теста проверьте:

  1. Независимость наблюдений. Рандомизация по пользователям? Или по кластерам (гео, команда)?
    • Если кластерная → обычный t-test/z-test занижает дисперсию → нужна поправка.
  2. SUTVA (Stable Unit Treatment Value Assumption). Нет interference между пользователями?
    • Network effects, marketplace (один продавец — много покупателей), shared resources могут нарушать SUTVA.
  3. Стабильная экспозиция. Treatment не влияет на количество показов / визитов / заказов?
    • Если влияет → знаменатель метрики-доли зависит от treatment → treatment-affected exposure.
  4. Распределение. Есть ли heavy tail, zero inflation, сильная асимметрия?
    • Heavy tail → t-test нестабилен.
    • Zero inflation → среднее неинформативно, дисперсия завышена.

5. Heavy tail и zero inflation: что ломается

Heavy tail

Проблема: несколько выбросов определяют среднее всей группы. t-test формально работает (CLT), но при конечных выборках среднее нестабильно.

Что делать:

  • Bootstrap (percentile, ≥10K итераций) — не зависит от параметрических допущений
  • Trimmed mean — отсечение крайних 5–10% стабилизирует оценку
  • Winsorization — замена выбросов на пороговое значение (например, 99-й перцентиль)
  • Log-трансформация — при log-нормальном распределении; но интерпретация меняется

Пример: Revenue per user. 0.1% пользователей с чеками в 100× среднего. t-test показывает p = 0.03, повторный запуск — p = 0.45. → Bootstrap + winsorization.

Zero inflation

Проблема: большинство пользователей = 0 (не купили, не кликнули). Среднее близко к нулю, дисперсия завышена, мощность падает.

Что делать:

  • Разделить метрику: конверсия (0/1) + среднее среди конвертировавших
  • Zero-inflated модель (если нужна одна метрика)
  • CUPED с pre-period (снижает дисперсию на 30–50%)

Пример: Purchases per user. 85% = 0, 14% = 1, 1% ≥ 2. Обычный t-test требует огромную выборку. Разделение на CR (proportion, z-test) + AOV (ratio, delta-method) — проще и мощнее.

6. Кластерные эксперименты

Что меняется

При рандомизации по кластерам (города, регионы, команды) наблюдения внутри кластера скоррелированы. Эффективный размер выборки ≈ N кластеров, а не N пользователей.

ICC (Intra-Cluster Correlation): доля дисперсии, объяснённая кластером. Чем выше ICC, тем сильнее inflation дисперсии.

Что делать

Пример: Гео-эксперимент, 20 городов, CTR. Обычный z-test показывает p = 0.001 (N = 2M пользователей). Cluster-robust SE → p = 0.14 (N_eff ≈ 20 кластеров).

Частая ошибка

Аналитик использует N пользователей как размер выборки при кластерной рандомизации. Получает p < 0.01, уверенно запускает. Эффект не воспроизводится — потому что реальная мощность была ~15%, а не 80%.

7. CUPED: когда помогает, когда нет

Принцип

CUPED (Controlled-experiment Using Pre-Experiment Data) использует pre-period ковариату для снижения дисперсии:

Yadj = Y − θ · Xpre, где θ = Cov(Y, Xpre) / Var(Xpre)

Типичный выигрыш: снижение дисперсии на 30–50%.

Когда помогает

Пример: Revenue per user. Pre-period revenue за 2 недели до эксперимента. Корреляция 0.6. CUPED снижает дисперсию на 45%, что эквивалентно удвоению выборки.

Когда не работает или опасен

Пример: ARPPU + CUPED. Treatment увеличил конверсию → новые «платящие» не имели pre-period покупок → ковариата = 0 для них → CUPED не снижает дисперсию для этой подгруппы.

8. Шесть примеров: метрика + контекст → подход

# Метрика Контекст Подход Почему
1 CR (покупки/пользователи) 80K на группу, user-level рандомизация z-test Доля, большая выборка, стандартный случай
2 Revenue per user Heavy tail, zero inflation, 100K на группу Bootstrap + winsorization t-test нестабилен из-за выбросов
3 AOV (GMV/заказы) 50K на группу, умеренные чеки Delta-method Ratio, знаменатель случаен, но хвосты умеренные
4 CTR (клики/показы) Гео-рандомизация, 15 городов z-test + cluster-robust SE Доля, но кластерная рандомизация
5 ARPPU 200K на группу, pre-period есть Двухэтапная процедура Conditional: состав платящих зависит от treatment
6 Число сессий + pre-period 40K на группу, корреляция pre-post 0.55 Welch t-test + CUPED Поюзерная, CUPED снижает дисперсию ~40%

Резюме

Карта выбора статкритерия связывает тип метрики, свойства распределения и дизайн эксперимента с конкретным тестом и его допущениями.

Proportion, per-user, ratio и conditional-метрики требуют разных подходов: где-то достаточно z-test, где-то нужен bootstrap, delta-method или двухэтапная процедура.

Перед запуском теста убедитесь, что допущения про независимость, SUTVA, экспозицию и распределение выполнены, а при heavy tail, zero inflation и кластерной рандомизации используйте робастные методы и поправки.

Практика

Открыть практику

Симуляторы

Открыть симуляторы