A/B-тест pricing-страницы
Гипотезы, метрики, размер выборки, риски — дизайн теста, который не даст ложный результат.
Спроектируй A/B-тест pricing.
Текущее: {{current_pricing}} Изменение: {{change}}
1. Гипотеза в одном предложении
Формат: «Если мы [изменение], то [метрика] [направление] на [величина], потому что [механизм]».
Плохо: «Думаю новая цена будет лучше». Хорошо: «Если поднимем Pro с $19 до $29, ARPU вырастет на 25% при оттоке конверсии не более 15%, потому что текущая цена ниже ценности по интервью».
2. Метрики
Primary (одна, и только одна)
- Revenue per visitor (RPV) — обычно лучший выбор для pricing
- НЕ конверсия отдельно (можно "выиграть" дешевизной)
- НЕ revenue total (зависит от трафика)
Guardrails (не должны провалиться)
- Conversion rate visitor → paid
- Churn в первые 30 дней (если меняешь цену — могут уходить быстрее)
- Refund rate
- Support ticket volume
Secondary (для понимания механизма)
- Plan mix (% выбравших каждый план)
- Time-on-pricing-page
- Click distribution на CTA
3. Размер выборки
n = 16 × p × (1-p) / MDE²
p — текущая baseline conversion
MDE — минимальный детектируемый эффект (обычно 5-10%)
Пример: baseline 3%, MDE 10% (отн.) → 0.3% (абс.)
n ≈ 16 × 0.03 × 0.97 / (0.003)² ≈ 51,700 на вариант
Используй калькулятор (Evan Miller, Optimizely). Запиши: целевой n, ожидаемая длительность при текущем трафике.
Анти-паттерн: «Запустим и посмотрим неделю». При недостатке n результат — шум.
4. Длительность
- Минимум 2 недели (захватить недельный цикл)
- Целое число недель (день недели влияет)
- Учти cycle: для месячной подписки — мин 1 месяц до confidence в churn
5. Сегментация
Запиши до старта на чём будешь резать:
- Новые vs возвращающиеся
- По стране (покупательная способность)
- По источнику трафика
- По девайсу
Анти-паттерн: peeking — нашёл сегмент где «выиграло» уже после теста.
6. Риски и митигации
| Риск | Митигация |
|---|---|
| Текущие юзеры увидят разные цены | Тест только для новых; grandfathering |
| SEO-вред (две версии страницы) | rel=canonical, server-side split |
| Юридические (разная цена за то же) | Юрист — особенно EU, US states |
| Падение revenue если проиграет | Kill criteria (см. ниже) |
| Анонс конкурента в середине | Заморозить, переанонсировать |
7. Kill criteria
До старта зафиксируй:
- При conversion drop > X% — остановить через Y дней
- При guardrail metric drop > Z% — остановить немедленно
- Кто принимает решение (один человек)
8. Анализ
Не смотри результаты до n. Когда тест завершён:
- p-value < 0.05 (или Bayesian: probability to be best > 95%)
- Practical significance (не только статистическая) — стоит ли инженерить
- Guardrails не упали
- Sanity-check: SRM (sample ratio mismatch) — bucket распределение здоровое
9. Решение
- Ship: primary вырос, guardrails в норме
- Iterate: гипотеза верна частично — подкрутить и перетестить
- Kill: primary не двигается / guardrails упали
- Inconclusive: n недостаточен — продолжать или закрыть
Анти-паттерны
- ❌ Менять цену И структуру одновременно — нельзя атрибутировать
- ❌ Запустить «на глаз» без расчёта n
- ❌ Подглядывать каждый день — раздувает false positive
- ❌ Победил RPV, но churn вырос — игнорировать ради «выигрыша»
- ❌ Тестировать на 5% юзеров — никогда не дождёшься n
В конце дай
- Гипотезу
- Primary + guardrails
- Расчёт n и длительности
- Kill criteria
- План анализа
- Юридический чек-лист (если меняешь цену)
Декомпозиция фичи в user stories
Разбить фичу на маленькие истории формата «As a … I want … so that …» с acceptance criteria.
Blind A/B eval двух промтов
Сравнить prompt v1 vs v2 на одних inputs: judge (Claude или человек), статистическая значимость, защита от cherry-picking.
Архитектура feature flags
Типы флагов (release/experiment/ops/permission), хранение, оценка, тех-долг и удаление.