Дизайн holdout-группы для long-term эффектов
10-20% юзеров без новых фич минимум 4 недели — измеряй накопленный эффект, а не недельный bump.
Спроектируй holdout для измерения накопленного эффекта {{feature_set}}.
Primary metric: {{main_metric}}
Зачем holdout, если есть A/B
A/B-тест отвечает «работает ли фича X?». Holdout отвечает «работает ли всё что мы делаем в сумме?». Накопленный эффект 20 мелких изменений за квартал не виден в A/B по каждой — половина показывает p > 0.05.
Holdout — это зеркало для всего продукта.
1. Размер
| Размер holdout | Когда |
|---|---|
| 5% | Очень крупный продукт (>1M активных), нужна минимальная потеря $ |
| 10-20% | Стандарт — баланс мощности и стоимости |
| 50% | На раннем этапе или когда новинки рискованные |
Меньше 5% — недостаточно мощности на retention-метриках. Больше 20% — теряешь слишком много пользовательского опыта.
Формула проверки мощности:
n_per_group ≥ 16 × σ² / (μ × MDE)²
Для retention 40% и MDE 5% относительных (= 2pp абс):
n ≈ 16 × 0.24 / (0.4 × 0.05)² ≈ 9,600 per group
При 200k активных в месяц — 10% holdout = 20k. Достаточно.
2. Длительность
| Метрика | Минимум |
|---|---|
| Engagement (DAU, session length) | 2-4 недели |
| Retention (W4, M1) | 8-12 недель |
| Revenue / LTV | 1-2 квартала |
| Churn (annual subs) | минимум 1 цикл подписки |
Правило: держи holdout минимум 2× цикла твоей метрики. Если меряешь monthly retention — минимум 8 недель.
3. Что МОЖНО на holdout не давать
- Новые второстепенные фичи
- Изменения UI / редизайн копий
- Новые алгоритмы рекомендаций
- A/B-тесты в активной разработке
- Notification кампании / lifecycle email обновления
4. Что НЕЛЬЗЯ держать на холде
| Категория | Почему |
|---|---|
| Критические security / privacy фиксы | Этический и юридический вопрос |
| Bug fixes ломающие функциональность | Не «эксперимент» — это сломанный продукт |
| Compliance (GDPR, accessibility) | Юридические требования |
| Изменения цен | Несправедливо, скорее юр риск |
| Сервис-уровневые улучшения (uptime, latency) | Holdout — про продукт, не про инфру |
Перепроверь свой список: если в holdout попадает > 30% всех релизов — твой holdout слишком жёсткий, размой границы.
5. Дизайн рандомизации
- Уровень: user_id (не session) — иначе один и тот же юзер попадёт в обе ветки
- Hashing:
hash(user_id + holdout_salt) mod 100 < 10— детерминистично - Стабильность: юзер остаётся в группе на весь срок holdout — не пересоберай каждую неделю
- Сегменты: проверь, что holdout сбалансирован по плану / стране / device
6. Анализ — что считать
Primary
Разница в {{main_metric}} между treatment (получили всё) и holdout (не получили нового).
Effect = (treatment_metric - holdout_metric) / holdout_metric
Пример: M1 retention treatment = 42%, holdout = 38%
Effect = +10.5% relative, +4pp absolute
Secondary (для разбора)
- Per-feature attribution — сравни «holdout vs treatment без фичи X» (требует sub-holdouts)
- Time decay — эффект растёт или плато?
- Сегментный effect — где работает больше
7. Каденс
- Запуск — раз в квартал / полугодие
- Промежуточный read — на 4 неделе, только мониторинг (не решения)
- Финальный read — в конце окна
- После — выпустить holdout, измерить «catch-up effect»
Что НЕ делать
❌ Менять размер holdout посреди эксперимента — нарушает рандомизацию ❌ Решать по 1-недельному окну — недостаточно для retention ❌ Использовать holdout как контроль для отдельного A/B — двойной учёт ❌ Держать одного юзера в нескольких holdout одновременно — caovariance не контролируется ❌ Игнорировать guard rails — holdout может «случайно» снизить metric (degradation) ❌ Peeking каждый день — multiple comparison inflation ❌ Делать holdout только для растущих фич — выберешь bias positive
На выходе
- Размер и длительность с обоснованием мощности
- Список «в holdout» и «не в holdout» (с обоснованием)
- Метод рандомизации (hash + salt)
- Primary / secondary metrics
- Каденс read'ов с заранее определёнными правилами
- Шаблон финального отчёта (включая cumulative + per-feature attribution)
Reactivation flow для dormant пользователей
Email-флоу возврата уснувших пользователей: сегментация, темы, тайминг, метрики. Не «вернись, мы скучаем», а конкретный crm-конвейер.
Dunning emails при failed payments
Цепочка 3-5 писем после неуспешного списания: тон, сроки, escalation, recovery rate.
Cohort-анализ retention
Weekly/monthly cohort: что измерять, как читать heatmap, какие действия следуют из паттернов.