← Назад к вопросам

A/B тест: Дизайн эксперимента для кнопки оформления заказа

2.7 Senior🔥 231 комментариев
#A/B тестирование#Метрики продукта#Статистика и математика

Условие

Продуктовая команда хочет изменить цвет кнопки "Оформить заказ" с зеленого на оранжевый. Гипотеза: оранжевый цвет привлечет больше внимания и увеличит конверсию.

  1. Спроектируйте A/B тест для проверки гипотезы
  2. Какую метрику выберете как основную?
  3. Какие дополнительные метрики будете мониторить?
  4. Как рассчитаете необходимый размер выборки?
  5. Сколько времени нужно проводить эксперимент?
  6. Какие 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
A/B тест: Дизайн эксперимента для кнопки оформления заказа | PrepBro