← Назад к вопросам
A/B тест: Дизайн эксперимента для кнопки оформления заказа
2.7 Senior🔥 231 комментариев
#A/B тестирование#Метрики продукта#Статистика и математика
Условие
Продуктовая команда хочет изменить цвет кнопки "Оформить заказ" с зеленого на оранжевый. Гипотеза: оранжевый цвет привлечет больше внимания и увеличит конверсию.
- Спроектируйте A/B тест для проверки гипотезы
- Какую метрику выберете как основную?
- Какие дополнительные метрики будете мониторить?
- Как рассчитаете необходимый размер выборки?
- Сколько времени нужно проводить эксперимент?
- Какие guardrail метрики установите?
Ожидается:
- Четкая формулировка гипотезы
- Выбор и обоснование метрик
- Понимание статистики A/B тестов
Источник: типовой кейс на собеседованиях продуктовых аналитиков
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение: A/B тест для цвета кнопки оформления заказа
1. Проектирование теста
Формулировка гипотезы
Нулевая гипотеза (H0): Цвет кнопки (зелёный vs оранжевый) не влияет на конверсию до покупки
Альтернативная гипотеза (H1): Оранжевая кнопка увеличивает конверсию до покупки на ≥5%
Обоснование 5% MDE:
- Базовая конверсия на кнопку обычно ~2-5% (зависит от трафика)
- 5% относительный лифт = практически значимо для бизнеса
- Меньше чувствителен к noise
- Требует разумный размер выборки
Дизайн теста
ТЕСТ: Button Color Optimization
GROUPS:
├─ Control (A): Зелёная кнопка #4CAF50
├─ Treatment (B): Оранжевая кнопка #FF9800
└─ Размер групп: 50/50 (рандомизация)
LEVEL OF RANDOMIZATION: User ID
├─ Не session (иначе один пользователь может быть в обеих группах)
└─ Sticky assignment: один пользователь в одной группе всегда
TARGET AUDIENCE: Все пользователи, прошедшие до checkout
EXCLUDE:
├─ Тестовые аккаунты
├─ Admins и сотрудники
├─ Мобильные приложения (если отдельный UI)
└─ VIP пользователи (если у них свой flow)
DURATION: 2 недели (14 дней)
├─ Достаточно для 2 полных недельных цикла
├─ Избегает недельной сезонности
└─ Минимизирует novelty effect
2. Выбор основной метрики (Primary Metric)
Главная метрика: Checkout-to-Purchase Conversion Rate
Что это: % пользователей, которые нажали на кнопку "Оформить заказ"
и успешно завершили покупку
Формула:
Conversion = (Успешные покупки) / (Пользователи, которые видели кнопку)
PRIMARY METRIC (статистический тест):
├─ Тип: Conversion rate (бинарная переменная)
├─ Статистический тест: Chi-square test (или Fisher's exact)
├─ Уровень значимости (α): 5% (двусторонний)
├─ Статистическая мощность (β): 80% (Type II error)
└─ Направление: Двусторонний (может быть как +, так и -)
Почему эта метрика:
- ✅ Напрямую связана с бизнес-целью (выручка)
- ✅ Легко мерить и трактовать
- ✅ Не чувствительна к величине заказа (только факт)
- ✅ Быстро достигает статзначимости
3. Дополнительные метрики
Secondary Metrics (диагностика)
📊 SECONDARY METRICS (не требуют коррекции за множественные сравнения):
1. Click-Through Rate (CTR) на кнопку
├─ Что: % кликов на кнопку / пользователей в checkout
├─ Зачем: проверить, видена ли кнопка вообще
└─ Ожидание: оранжевая должна иметь выше CTR (внимание)
2. Button Engagement Time
├─ Что: время, которое пользователь провел на странице с кнопкой
├─ Зачем: если упал CTR, может быть, люди быстрее уходят
└─ Ожидание: примерно одинаково
3. Add-to-Cart-to-Checkout Rate
├─ Что: % пользователей, перешедших из корзины в checkout
├─ Зачем: проверить, не влияет ли дизайн выше по воронке
└─ Ожидание: не должно измениться
4. Average Order Value (AOV)
├─ Что: средняя сумма заказа
├─ Зачем: если упала, это говорит о change in basket composition
└─ Ожидание: не должно измениться (зависит от цены, не цвета кнопки)
5. Cart Abandonment Rate
├─ Что: % пользователей, которые ушли после checkout
├─ Зачем: возможно, оранжевая кнопка отпугивает на последнем этапе
└─ Ожидание: не должно измениться
6. Payment Failure Rate
├─ Что: % неудачных платежей
├─ Зачем: проверить, не сломалось ли что-то в платёжном процессе
└─ Ожидание: одинаково
7. Return Rate (первые 30 дней)
├─ Что: % возвратов из этого теста
├─ Зачем: качество не пострадало?
└─ Ожидание: одинаково или лучше
Guardrail Metrics (метрики безопасности)
🛡️ GUARDRAIL METRICS (должны НЕ ухудшиться):
1. Page Load Time
├─ Почему: если кнопка стала медленнее загружаться → проблема
├─ Limit: не более чем на 2% медленнее
└─ Action: если ухудшилось → kill тест
2. Error Rate (на checkout странице)
├─ Почему: если растёт количество ошибок → проблема с кодом
├─ Limit: не более чем на 1% выше
└─ Action: если ухудшилось → kill тест
3. Support Tickets (жалобы на кнопку)
├─ Почему: если много жалоб → плохой UX
├─ Limit: не более чем на 50% выше
└─ Action: если ухудшилось → kill тест
4. Revenue per Visitor
├─ Почему: вся цель теста
├─ Limit: должна остаться прежней или расти
└─ Action: если упала → kill тест
4. Расчет размера выборки (Sample Size)
Power Analysis
Параметры:
├─ Базовая конверсия (Control, p1): 3%
├─ Минимальный эффект (MDE): +5% → 3.15%
├─ Уровень значимости (α): 0.05 (5%)
├─ Статистическая мощность (β): 0.20 (80% power)
└─ Вид теста: двусторонний
Формула (приблизительная):
n = ((Z_α/2 + Z_β) / (p2 - p1))² × (p1 × (1-p1) + p2 × (1-p2))
Где:
├─ Z_α/2 = 1.96 (for α=0.05, двусторонний)
├─ Z_β = 0.84 (for power=0.80)
├─ p1 = 0.03 (control)
└─ p2 = 0.0315 (treatment)
Результат:
├─ n ≈ 105,000 пользователей в каждой группе
├─ Всего: 210,000 пользователей
└─ При среднем трафике 15,000 юзеров/день
= 14 дней
Калькулятор (в Excel или Optimizely)
https://www.optimizely.com/sample-size-calculator/
или
https://www.evanmiller.org/ab-testing/sample-size.html
Вводим:
- Baseline conversion: 3%
- Minimum detectable effect: 5% (relative)
- Statistical power: 80%
- Significance level: 5%
→ Результат: нужно 210,000 юзеров, или ~14 дней
5. Длительность эксперимента
Рекомендация: 14 дней (2 недели)
Почему 14, а не 7?
├─ Неделя 1: неизвестные факторы (novelty, люди видят рекламу не в эту неделю)
├─ Неделя 2: стабилизация, реальное поведение
├─ Минимум 2 полных недельных цикла (пн-вс)
└─ Достаточно для статистической значимости
Возможны исключения:
├─ Если трафик ОЧЕНЬ высокий (>50k/день) → можно 7 дней
├─ Если результат очень очевидный (>20% лифт) → может хватить 3-5 дней
└─ Если сезонность (праздники) → добавить неделю
Что делать с результатами
НА 5-Й ДЕНЬ (примерно 50% выборки):
├─ ✅ Проверяем guardrail метрики
├─ ✅ Смотрим на тренд primary метрики
└─ ❌ НЕ смотрим на statistical significance
(это увеличит вероятность false positive)
НА 14-Й ДЕНЬ (конец теста):
├─ ✅ Проверяем primary metric
├─ ✅ p-value < 0.05 → результат значим
├─ ✅ Смотрим confidence interval
└─ ✅ Анализируем secondary metrics
6. Guardrail Метрики
Установка лимитов
🛡️ GUARDRAIL METRICS & THRESHOLDS:
1. PRIMARY GUARDRAIL: Revenue per Visitor
├─ Baseline: $2.50
├─ Lower bound (CI 95%): не ниже $2.40 (-4%)
├─ Action: если упало → kill тест
└─ Reason: это главная бизнес-метрика
2. Checkout Error Rate
├─ Baseline: 0.5%
├─ Upper bound: не выше 0.6% (+20%)
├─ Action: если выросло → kill тест
└─ Reason: может быть проблема с кодом
3. Payment Decline Rate
├─ Baseline: 2%
├─ Upper bound: не выше 2.2% (+10%)
├─ Action: если выросло → kill тест
└─ Reason: может быть проблема с платёжной системой
4. Page Load Time (median)
├─ Baseline: 800ms
├─ Upper bound: не выше 850ms (+6%)
├─ Action: если медленнее → optimize код
└─ Reason: медленная страница = меньше конверсия
5. Support Tickets (Button-related)
├─ Baseline: 10 tickets/day
├─ Upper bound: 20 tickets/day (в 2 раза)
├─ Action: если больше → kill тест
└─ Reason: люди жалуются на юзабилити
Таблица мониторинга
Метрика | Control | Treatment | Status
---------------------|---------|-----------|--------
Conversion Rate | 3.0% | 3.2% | ✅ +6.7%, p=0.08 (не значим пока)
Click-Through Rate | 85% | 87% | ✅ +2.4%
Avg Order Value | $45.50 | $45.60 | ✅ +0.2%
Cart Abandonment | 15% | 15.2% | ✅ +1.3%
Payment Decline | 2.0% | 2.1% | ✅ +5% (в норме)
Page Load Time | 800ms | 805ms | ✅ +0.6% (в норме)
Error Rate | 0.5% | 0.52% | ✅ +4% (в норме)
Support Tickets | 5/day | 7/day | ⚠️ +40% (мониторим)
Итоговый Чек-лист
✅ ДО ЗАПУСКА:
├─ Гипотеза сформулирована
├─ Primary metric выбран
├─ Размер выборки рассчитан (210k юзеров)
├─ Guardrails установлены
├─ Рандомизация проверена (нет data leaks)
├─ Логирование события включено
├─ QA пройден (обе версии работают)
└─ Stakeholders согласны
📊 ДЕНЬ 1-3 (запуск, санити-чеки):
├─ Проверка, что обе версии видны
├─ Баланс между группами (Control ~50%, Treatment ~50%)
├─ Guardrail метрики в норме
└─ Нет technical issues
📈 ДЕНЬ 5-7 (полная неделя):
├─ Guardrails в норме
├─ Первые insights (какие secondary метрики двигаются)
└─ Готовимся к продлению или kill
✔️ ДЕНЬ 14 (конец теста):
├─ p-value < 0.05 → Победа Control или Treatment
├─ Confidence interval [нижний, верхний]
├─ Практическая значимость (не только статистическая)
├─ Secondary metrics анализ
├─ Root cause analysis (почему именно такой результат)
└─ Decision: Rollout / Kill / Iterate