Что такое 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 мес).

Как настроить

  1. Random assignment на основе user_id hash
  2. Flag в системе feature flags
  3. Все features проверяют: «this user в holdout? не применять»
  4. 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+ вопросами для собесов.