Практика

Для каждой задачи определите, какая единица рандомизации и анализа корректна, как влияет ICC и design effect, и какой метод inference использовать.

Задача 1. Наивный t-test на гео-данных (16 городов)

Компания запускает гео-эксперимент: в 8 городах повышают цену доставки (тест), в 8 оставляют старую (контроль). В каждом городе по 200 000 пользователей, всего 3.2M пользователей.

Аналитик выгружает все заказы пользователей за период эксперимента и запускает обычный t-test по среднему чеку на уровне заказов (N > 5M). Получает p = 0.0001 и пишет в отчёте: «эффект значим, повышаем цены».

Ответ

Проблема: рандомизация проведена по городам, а анализ — по миллионам заказов/пользователей. Нарушено допущение независимости наблюдений, effective sample size определяется числом городов (16), а не числом заказов.

Последствия: стандартные ошибки сильно занижены, p-value искусственно мал. Реальная ошибка первого рода намного выше 5%, вывод о значимости может быть ложноположительным.

Правильный подход: агрегировать метрики до уровня города (16 наблюдений) и сравнивать средние по городам, либо использовать регрессию с cluster-robust SE по городам / randomization inference с перестановками treatment между 16 городами.

Задача 2. Рассчитать Design Effect

У вас эксперимент в розничной сети: 30 магазинов в тесте и 30 в контроле. Средний магазин обслуживает m = 2000 уникальных покупателей за период эксперимента.

Из pre-period оценили ICC по выручке на покупателя: ICC = 0.02. Нужно оценить design effect и понять, насколько «сжимается» эффективный размер выборки.

Ответ

Используем формулу:

DEFF = 1 + (m − 1) × ICC

Подставим числа:

DEFF = 1 + (2000 − 1) × 0.02 ≈ 1 + 1999 × 0.02 ≈ 1 + 39.98 ≈ 40.98

То есть дисперсия метрики примерно в 41 раз выше, чем при независимых наблюдениях.

Если всего покупателей n = 60 × 2000 = 120 000, то эффективный размер выборки:

neff = 120 000 / 40.98 ≈ 2930

Вывод: хотя в эксперименте участвуют 120k покупателей, по информативности он ближе к эксперименту с ~3k независимых наблюдений.

Задача 3. Effective sample size — сколько городов нужно?

Вы планируете гео-эксперимент по 20 городам (10 тест, 10 контроль). В каждом городе ~100 000 пользователей. Хотите детектировать uplift +3% по выручке на пользователя с мощностью 80%.

Из исторических данных оценили ICC по выручке: 0.01. При user-level предположении power-анализ показывает, что 2M пользователей более чем достаточно.

Ответ

Шаг 1. Оцените design effect. При m = 100k пользователей на город и ICC = 0.01:

DEFF ≈ 1 + (100 000 − 1) × 0.01 ≈ 1 + 99999 × 0.01 ≈ 1001

Шаг 2. Эффективный размер выборки по пользователям:

neff = 2 000 000 / 1001 ≈ 2000

Но ключевой ограничитель — число кластеров: всего 20 городов (10 vs 10). Многие методы анализа фактически работают с N = 20 (по одному наблюдению на город).

Вывод: реальная мощность определяется не количеством пользователей, а количеством городов. Для детектирования +3% uplift, скорее всего, 20 городов недостаточно, потребуется либо больше городов, либо более крупный эффект, либо более длинный период (для снижения шума на уровне городов).

Задача 4. ICC = 0 — можно ли игнорировать?

Вы оценили ICC по метрике GMV per user для кластеров «курьерская зона» и получили ICC ≈ 0.0002. Средний размер кластера m = 5000 пользователей.

Коллега говорит: «ICC почти ноль, давайте считать, что его нет, и использовать обычный user-level t-test без поправок».

Ответ

Посчитаем design effect:

DEFF = 1 + (m − 1) × ICC ≈ 1 + (5000 − 1) × 0.0002 ≈ 1 + 4999 × 0.0002 ≈ 1 + 1 ≈ 2

Даже при «почти нулевом» ICC = 0.0002, из-за большого размера кластера итоговый DEFF ≈ 2. То есть дисперсия вдвое выше, чем мы бы предполагали при независимых наблюдениях.

Вывод: игнорировать ICC нельзя: вы занижаете стандартные ошибки примерно в √2 раза и завышаете значимость. Нужно либо учитывать clustering (cluster-robust SE), либо агрегировать метрики до уровня кластера.

Задача 5. Курьерские зоны — выбор единицы рандомизации

Логистическая команда хочет протестировать новый алгоритм распределения заказов по курьерам. Обсуждаются три варианта эксперимента:

A. Рандомизация по заказам: каждый заказ независимо попадает в тест или контроль.

B. Рандомизация по курьерам: каждый курьер закреплён либо за тестом, либо за контролем, весь поток заказов делится между ними.

C. Рандомизация по курьерским зонам: все курьеры и заказы в зоне либо в тесте, либо в контроле.

Ответ

Вариант A (по заказам): сильное нарушение SUTVA. Нагрузка на курьеров зависит от mix тест/контроль, заказы конкурируют за одних и тех же курьеров. Эффект одних заказов влияет на время доставки других.

Вариант B (по курьерам): лучше, но всё ещё есть интерференция: заказы в одной зоне конкурируют между тестовыми и контрольными курьерами.

Вариант C (по зонам): наиболее чистый в терминах каузальности. Внутри зоны все живут в одном treatment, взаимодействия остаются внутри кластера, между зонами независимость куда более правдоподобна.

Рекомендация: выбирать единицу рандомизации на уровне курьерской зоны (C) и далее учитывать clustering в анализе (агрегация по зонам или cluster-robust SE).

Задача 6. Гетерогенные кластеры — взвешивание (24 магазина)

Эксперимент в офлайн-рознице: 12 магазинов в тесте, 12 в контроле. Магазины сильно различаются по размеру: топ-3 магазина дают 60% общей выручки, остальные 21 магазин — 40%.

Аналитик агрегирует метрику «выручка на магазин» и считает простой средний эффект по магазинам (невзвешенный t-test по 24 точкам).

Ответ

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

Возможные подходы:

  • Считать магазины с весами, пропорциональными их pre-period выручке (weighted analysis), если вас интересует эффект на общий GMV.
  • Либо отдельно рассматривать большие и маленькие магазины (стратификация), чтобы не смешивать заведомо разные популяции.

Вывод: при кластерной рандомизации важно не только количество кластеров, но и их размер. Взвешивание помогает приблизить оценку к бизнес-эффекту.

Задача 7. Spillover в социальной сети ⚠

Социальная сеть тестирует новый алгоритм показа Stories. Рандомизация по пользователям: 50% видят новый алгоритм (тест), 50% — старый (контроль). Метрика: среднее число просмотров Stories per user.

Пользователи из теста начинают чаще выкладывать Stories (новый алгоритм отдаёт им больше показов), их друзья (в том числе в контроле) видят больше контента и тоже становятся активнее.

Ответ

Проблема: network spillover. Treatment влияет не только на метрику самих treatment-пользователей, но и на их друзей в контроле. Нарушено допущение «отсутствия интерференции» на уровне пользователей.

Последствия: часть uplift в контроле на самом деле вызвана treatment у друзей. Наивная оценка эффекта при rollout может быть смещена: при 100% rollout структура взаимодействий изменится.

Что делать: рассматривать кластеры по социальному графу (компоненты, сообщества) как единицу рандомизации; измерять, как метрика в контроле зависит от доли друзей в тесте; использовать специальные дизайны для графовых экспериментов (clustered network experiments).

Задача 8. Рассчитать inflation factor (40 кластеров)

Эксперимент: 20 регионов в тесте, 20 в контроле. В каждом регионе примерно одинаковое число пользователей. ICC по CR оценили как 0.03.

Аналитик хочет понять, насколько наивный t-test по пользователям занижает стандартные ошибки по сравнению с корректным кластерным анализом.

Ответ

Design effect показывает, во сколько раз возрастает дисперсия. Соответственно, inflation factor для стандартной ошибки — это √DEFF.

Если средний размер кластера m, то:

DEFF = 1 + (m − 1) × 0.03

Например, если m = 10 000 пользователей на регион:

DEFF ≈ 1 + 9999 × 0.03 ≈ 1 + 300 ≈ 301
\(\text{SE}_{\text{cluster}}\) ≈ √301 × \(\text{SE}_{\text{naive}}\) ≈ 17.3 × \(\text{SE}_{\text{naive}}\)

Вывод: наивный t-test по пользователям может недооценивать стандартную ошибку более чем в 10–15 раз, а p-value — быть на порядки ниже реальных.

Задача 9. Pre-period estimation of ICC

Вы готовите гео-эксперимент по городам и хотите заранее оценить ICC по метрике GMV per user, чтобы правильно посчитать мощность. Есть исторические данные за 3 месяца по тем же городам.

Как практически оценить ICC до запуска эксперимента и какие подводные камни учесть?

Ответ

Как оценить:

  • Возьмите pre-period данные и для каждого пользователя посчитайте GMV за период.
  • Постройте двухуровневую модель или ANOVA: разложите дисперсию на междугороднюю и внутригородскую компоненты.
  • Оцените σ²between и σ²within, далее ICC = σ²between / (σ²between + σ²within).

Подводные камни:

  • Pre-period должен быть репрезентативен по сезону и внешним условиям относительно периода эксперимента.
  • Если метрика сильно нестабильна, оценка ICC может иметь большую погрешность — имеет смысл строить доверительный интервал и использовать консервативное (верхнее) значение ICC для power-анализа.
  • Нужно следить, чтобы расчёт ICC не был «замазан» редкими кластерами с очень малым числом пользователей (их лучше объединять или исключать).
Задача 10. Школьный эксперимент — неправильная агрегация ⚠

EdTech-платформа проводит эксперимент: новая методика преподавания математики. Рандомизация по классам: 25 классов в тесте, 25 в контроле (всего 50 классов, ~1500 учеников).

Аналитик считает t-test по оценкам учеников (N = 1500) и получает p = 0.01. При этом, если агрегировать оценки до уровня класса (N = 50), p ≈ 0.12.

Ответ

Проблема: рандомизация по классам, а анализ по ученикам. Внутри класса оценки скоррелированы (общий учитель, контекст), поэтому ученики не независимы. User-level t-test раздувает N и занижает SE.

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

Вывод: p = 0.01 на уровне учеников — ложное ощущение значимости; p ≈ 0.12 на уровне классов честно отражает неопределённость.

Задача 11. Мало кластеров — что делать? ⚠

Гео-эксперимент: всего 8 регионов (4 тест, 4 контроль). Каждый регион крупный, пользователей много, но число кластеров очень маленькое.

Как корректно анализировать такой эксперимент и чего точно не стоит делать?

Ответ

Чего нельзя делать:

  • Нельзя запускать обычный t-test по пользователям — это полностью игнорирует кластерную структуру.
  • Нельзя полагаться на асимптотические формулы cluster-robust SE с 8 кластерами — они дают сильно искажённые p-value.

Что можно делать:

  • Агрегировать метрику до уровня региона (8 точек) и использовать randomization inference: переставлять treatment-статусы между 8 регионами и считать эмпирическое распределение разницы средних.
  • Строить доверительные интервалы через бутстрап по кластерам (region-level bootstrap).
  • Фокусироваться на величине эффекта и бизнес-контексте, не переинтерпретируя p > 0.05 как «нет эффекта» при столь малом числе кластеров.
Задача 12. CUPED при кластерной рандомизации

Вы проводите кластерный эксперимент по магазинам (40 магазинов в тесте, 40 в контроле). Хотите использовать CUPED с pre-period выручкой на магазин, чтобы снизить дисперсию метрики.

Как правильно применять CUPED в этом случае и на каком уровне строить регрессию?

Ответ

Ключевая идея: CUPED должен уважать единицу рандомизации. Если treatment назначен магазинам, ковариаты и регрессия должны быть построены на уровне магазинов.

Правильный подход:

  • Сначала агрегируйте метрику и pre-period ковариату до уровня магазина (одна точка на магазин).
  • Постройте регрессию метрики периода эксперимента на pre-period выручку (без treatment в регрессоре) и получите скорректированные остатки.
  • Сравнивайте скорректированные значения между тестом и контролем (t-test по магазинам, randomization inference).

Чего избегать: не нужно считать CUPED на уровне пользователей и затем агрегировать, если рандомизация была кластерной.

Задача 13. Marketplace: двусторонний spillover ⚠

Маркетплейс тестирует снижение комиссии для части продавцов. Рандомизация по продавцам: 10k продавцов в тесте, 10k в контроле. Покупатели при этом не рандомизируются.

Метрика: GMV per buyer. В тесте она растёт на +6%, в контроле почти не меняется. Команда хочет экстраполировать этот эффект на 100% продавцов после rollout.

Ответ

Проблема: двусторонний spillover: treatment назначен продавцам, но метрика измеряется на покупателях, которые взаимодействуют и с тестовыми, и с контрольными продавцами. При 100% rollout структура рынка изменится (не будет контрольных продавцов).

Последствия: +6% GMV per buyer в эксперименте может быть комбинацией прямого эффекта (скидки для тестовых продавцов) и перераспределения трафика/продаж между продавцами (zero-sum для части рынка).

Что делать: анализировать эффекты и на уровне продавца (выигравшие/проигравшие), и на уровне покупателя; рассмотреть кластеризацию по рынкам/категориям; аккуратно моделировать поведение при полном rollout, а не наивно переносить экспериментальное uplift.

Задача 14. Design effect при разных ICC

У вас кластерный дизайн с фиксированным средним размером кластера m = 1000 пользователей. Нужно понять, как меняется design effect при разных значениях ICC.

Заполните таблицу (приближённо):

ICC DEFF neff / n
0.001??
0.005??
0.01??
0.05??
Ответ

Используем формулы:

DEFF = 1 + (m − 1) × ICC,   neff / n = 1 / DEFF

При m = 1000:

ICC DEFF neff / n
0.001≈ 1 + 999 × 0.001 ≈ 1.999 ≈ 2≈ 0.5
0.005≈ 1 + 999 × 0.005 ≈ 5.995 ≈ 6≈ 0.17
0.01≈ 1 + 999 × 0.01 ≈ 10.99 ≈ 11≈ 0.09
0.05≈ 1 + 999 × 0.05 ≈ 50.95 ≈ 51≈ 0.02

Вывод: даже «маленькие» ICC типа 0.005–0.01 при больших кластерах драматически уменьшают эффективный размер выборки, и это обязательно нужно учитывать в дизайне эксперимента.