Что такое holdout test
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Зачем это знать
Вы выкатили фичу, A/B показал +5% retention. Через 3 месяца уверены, что impact всё ещё +5%? Обычный A/B этого не скажет — он завершён. Holdout — группа, которая долгосрочно НЕ получает фичу, даёт clean controlled comparison на long term.
На собесах в product / growth компаниях holdout — признак зрелости analytics team. Знать → middle+.
Короткое объяснение
Holdout — постоянная control group, которая никогда не получает новые features. 1-5% от users обычно.
Остальные 95-99% получают все фичи по мере выкатки.
Разница между holdout и «все остальные» → совокупный impact всех ваших features.
Зачем
Cumulative impact
Каждая фича A/B-тестом показала +1%. Но фичи могут overlap, deprecate, conflict. Holdout показывает чистый cumulative effect.
Long-term effects
A/B обычно 2-4 недели. Holdout держится месяцами → видны долгосрочные эффекты (novelty wearing off, habituation).
Measurement на уровне team
OKRs: «retention +5% за год». Holdout показывает вклад команды.
Типы
Global holdout
1-5% всех users никогда не получают никаких features. Самый clean, но expensive.
Team holdout
Отдельно для команды (Growth, Search, Onboarding). Их фичи не применяются к их holdout.
Feature-level
Временный long-term holdout для конкретной фичи после её ship (3-6 мес).
Как настроить
- Random assignment на основе user_id hash
- Flag в системе feature flags
- Все features проверяют: «this user в holdout? не применять»
- Regular reporting — metric treatment vs holdout
Пример
1. Assign users: 2% → global_holdout, 98% → default
2. Feature flags:
- feature_A: enabled for default, disabled for holdout
- feature_B: enabled for default, disabled for holdout
- ... все features same pattern
3. Metric:
Retention_treatment - Retention_holdout = cumulative impactПример в SQL
SELECT
CASE WHEN is_holdout THEN 'holdout' ELSE 'treatment' END AS grp,
AVG(retained_30d) AS retention
FROM users
GROUP BY 1;Проблемы
Novelty vs long-term
Holdout показывает accumulated novelty effect. Если features wear off — видно.
Opportunity cost
Holdout не получает improvements → worse experience. Этически надо минимизировать (1-2%).
Configurationally burden
Нужно следить, чтобы каждая новая feature уважала holdout flag.
Holdout vs A/B
| A/B | Holdout | |
|---|---|---|
| Длительность | 1-4 недели | Месяцы-годы |
| Scale | Одна feature | Cumulative все features |
| Size | 50/50 | 1-5% holdout |
| Purpose | Immediate decision | Long-term tracking |
Не взаимоисключающие. Рекомендуется оба.
Primary и secondary metrics
Primary
North Star: retention, revenue, engagement.
Secondary
Per-feature metrics, subgroups, segments.
Guardrail
Performance, error rates — не должны деградировать из-за cumulative features.
Статистическая power
Holdout 1% от 10M users = 100k. Для detecting 1% lift на retention — enough.
Для маленьких сервисов (< 100k users) — hard to split out holdout meaningfully. Используйте A/B.
На собесе
«Что такое holdout?» Постоянная control group для долгосрочного measurement.
«Отличие от A/B?» Длительность + comprehensive vs feature-specific.
«Как настроить?» 1-5% random assignment + все features проверяют holdout flag.
«Когда не нужен?» Малый масштаб (< 100k users).
Частые ошибки
Leak
Если feature случайно включится у holdout → комбинирование → biased.
Too small
< 0.5% — мало power для detection.
Сравнение wrong
Сравнивать holdout с pre-launch periods — это pre-post, а не holdout analysis.
Связанные темы
FAQ
Какой процент оптимален?
1-2% balances power и opportunity cost.
Holdout нужен всем компаниям?
В B2C продукте с большой user base — да. В B2B/enterprise — часто нет.
Ethical concerns?
Minimize size, communicate, rotate per user periodically.
Тренируйте A/B — откройте тренажёр с 1500+ вопросами для собесов.