Cluster randomization в A/B-тестах

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Что такое cluster randomization

Cluster randomization — дизайн A/B, где рандомизация происходит на уровне группы юзеров (кластера), а не отдельного юзера. Все юзеры внутри кластера попадают в одну и ту же ветку (treatment или control).

Кластер может быть: город, район, dark store, школа, компания, домохозяйство, friend-group.

В отличие от обычного A/B (где каждый юзер независимо случайно попадает в T или C), здесь кластеры — это единица рандомизации, и юзеры внутри кластера получают одинаковое treatment.

Когда нужна

1. Сетевые эффекты (network effects)

Юзеры влияют друг на друга — соцсети, мессенджеры, маркетплейсы. Если в одной семье/группе одни в T, другие в C — они «загрязняют» эксперимент.

Решение: рандомизировать friend-clusters, household-cluster, school-cluster.

2. Общие ресурсы (shared resources)

Несколько юзеров делят один ресурс. В Самокате — все юзеры района делят один dark store. В Uber — все юзеры зоны делят один pool водителей.

Решение: рандомизировать на уровне района / города / dark store.

3. Geo-experiments

Тестировать новый продукт сначала в одном городе. Города — кластеры.

4. Organizational decisions

Изменение интерфейса для всей компании-клиента. Кластер = компания (если B2B SaaS).

Дизайн cluster A/B

Базовый дизайн

  1. Определи кластер (район, dark store, школа)
  2. Случайно (50/50) назначь кластеры в T или C
  3. Внутри кластера — все юзеры получают одну версию
Москва — T (все юзеры Москвы в treatment)
Питер — C (все юзеры Питера в control)
Казань — T
Екатеринбург — C
...

Stratified cluster randomization

Балансировка по характеристикам кластера. Если есть «большие» (Москва, Питер) и «маленькие» (регионы) — балансируем так, чтобы treatment и control имели похожее распределение размеров.

Switchback within cluster

Комбинация. В одном кластере фича включается-выключается во времени.

Формулы и размер выборки

Intraclass Correlation Coefficient (ICC)

Главная характеристика кластера — насколько юзеры внутри похожи друг на друга.

ICC = variance_between_clusters / (variance_between + variance_within)
  • ICC = 0 — юзеры в кластере независимы. Cluster randomization = обычный A/B.
  • ICC = 1 — юзеры в кластере идентичны. Эффективная выборка = количество кластеров.
  • Реально: ICC = 0.05-0.3.

Design Effect (DE)

Множитель к размеру выборки. Cluster randomization требует больше юзеров, чем обычный A/B.

DE = 1 + (m - 1) × ICC

где m — средний размер кластера.

Пример: ICC = 0.1, средний размер кластера 100 → DE = 1 + 99 × 0.1 = 10.9. То есть нужно в 11 раз больше юзеров, чем для A/B на индивидуальном уровне.

Эффективный размер выборки

n_effective = n_total / DE

С Design Effect 11, если у тебя 1M юзеров — эффективно как 90K в обычном A/B. Это огромная потеря power.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Примеры на практике

Uber / Yandex Go

Зоны — кластеры. В одной зоне новый алгоритм dispatch, в другой — старый. Сравнить заказы / ETA / driver utilization.

Lavka / Самокат

Dark store или район как кластер. Тестировать новый алгоритм рекомендаций, не загрязняя соседние районы.

Reddit / Twitter

Cluster по subreddit / community. Не идеально из-за cross-community юзеров, но снижает spillover.

B2B SaaS (Wrike, Notion)

Кластер = компания-клиент. Тестировать новый UI для всех юзеров одной компании сразу.

Образование

Класс / школа = кластер. Тестировать новую методику для всех учеников одного класса.

Типичные ошибки

  • Анализ как обычного A/B. Нужно учитывать correlation внутри кластера. Иначе p-value занижены, false positives растут.
  • Слишком мало кластеров. 2 города (T и C) — нельзя считать статистически. Нужно ≥ 30-40 кластеров.
  • Игнорировать heterogeneity кластеров. Москва и Усть-Кут — разные. Без stratification — bias.
  • Слишком долгий период. Cluster A/B чаще требуют 4+ недели для устранения noise.
  • Mixing treatment. Если юзер из T-кластера видит контент из C-кластера (cross-cluster contamination) — эффект size понижается.

Связанные темы

FAQ

Когда выбирать cluster randomization?

Когда есть сетевые эффекты или общие ресурсы. Если юзеры внутри кластера независимы — обычный A/B эффективнее.

Сколько кластеров минимум?

30-40 для базового статистического вывода. На меньшем числе нет достаточной power.

Можно ли cluster + switchback?

Да, и часто используется. Кластеры (геозоны) переключаются во времени.

Как анализировать cluster A/B?

Не как обычный t-test. Используй mixed-effects models, GEE, или агрегацию до кластера перед t-test.

Какие компании используют?

Yandex Go, Uber, Lavka, Самокат — везде где есть geo-зависимость. B2B SaaS на уровне организаций.