A/B-тестирование: от гипотезы до решения, которое не стыдно защитить
Разбираем эксперимент целиком — на живых данных интернет-магазина за 14 дней. Теория объясняется словами, а каждая цифра на странице пересчитана из одного и того же набора данных: графики, таблицы и выводы не расходятся между собой.
Сюжет кейса. Магазин переписал карточку товара: добавил крупную кнопку «Купить в один клик» и убрал лишние поля из формы. Старая версия — контроль A, новая — вариант B. Метрика успеха: доля посетителей, оформивших заказ. Ниже — как такой тест правильно спланировать, посчитать и прочитать, включая ловушку, в которую этот тест чуть не угодил на шестой день.
Что такое A/B-тест и зачем нужна статистика
A/B-тест — это управляемое сравнение: аудиторию случайно делят на две группы, одной показывают старую версию, другой новую, и смотрят, какая группа чаще совершает целевое действие. Случайное деление нужно ровно для одного: чтобы группы отличались только тем, что вы им показали.
Почему нельзя просто «сравнить до и после»
Если в понедельник выкатить новый дизайн и сравнить с прошлой неделей, вы сравните не дизайн, а две разные недели: другая погода, другая реклама, другие праздники, другой сезон. В A/B-тесте обе версии живут одновременно и делят один и тот же трафик, поэтому внешние факторы действуют на обе группы одинаково и взаимно вычитаются.
Почему разница в цифрах ещё не результат
Конверсия колеблется сама по себе. Если поделить один и тот же трафик на две половины и вообще ничего не менять (это называют A/A-тестом), их конверсии всё равно будут различаться на десятые доли процента. Статистика отвечает на вопрос: наблюдаемая разница похожа на такое случайное колебание — или она слишком велика, чтобы быть случайностью?
Анатомия правильного эксперимента
- Гипотеза. Не «давайте попробуем зелёную кнопку», а утверждение с причиной и ожидаемым эффектом: «форма из трёх полей вместо семи снижает трение на последнем шаге, поэтому конверсия в заказ вырастет минимум на 10 %».
- Одна главная метрика. Заранее выбранная метрика успеха (здесь — конверсия в заказ). Всё остальное — вспомогательные и защитные метрики, они не могут «спасти» проигравший вариант.
- Размер выборки и срок. Считаются до запуска исходя из минимального эффекта, который вам интересен. Срок — целое число недель, чтобы в обе группы попали и будни, и выходные.
- Честная рандомизация. Пользователь попадает в группу случайно и запоминается: при следующем визите он видит ту же версию. Делить по времени суток, городам или устройствам — не A/B-тест.
- Никаких правок на ходу. Пока тест идёт, вариант не дорабатывают, трафик не перераспределяют, а решение не принимают раньше рассчитанного срока.
- Чтение результата. Смотрят не только «кто победил», но и размер эффекта, доверительный интервал и поведение сегментов.
Словарь: минимум терминов, без которых не обойтись
| Термин | Человеческим языком | В нашем кейсе |
|---|---|---|
| Контроль (A) | Текущая версия, эталон для сравнения | Старая карточка товара |
| Вариант (B) | Изменение, которое проверяем | Карточка с кнопкой «Купить в один клик» |
| Конверсия | Доля людей, сделавших целевое действие | Оформили заказ ÷ зашли на карточку |
| Абсолютный прирост (п.п.) | Простая разница двух процентов | — |
| Относительный прирост (%) | Насколько вырос сам показатель | — |
| MDE | Минимальный эффект, который тест способен заметить | Планировали 10 % относительных |
| p-value | Вероятность увидеть такую разницу, если изменение на самом деле не работает | — |
| Доверительный интервал | Диапазон, в котором правдоподобно лежит настоящий эффект | — |
| Статистическая мощность | Шанс заметить эффект, если он действительно есть | Планировали 80 % |
p-value, доверительный интервал и две ошибки, которые можно совершить
Здесь всего одна идея: мы предполагаем, что изменение не работает, и проверяем, насколько наши данные уживаются с этим предположением. Если уживаются плохо — предположение отбрасываем.
Как читать p-value
Мысленно допускаем: кнопка ничего не изменила, обе версии одинаковы. p-value отвечает на вопрос «какова вероятность при таком допущении случайно получить разницу не меньше нашей?». Маленькое p-value означает, что наблюдаемая картина плохо объясняется случайностью.
Порог 0,05 — это не закон природы, а договорённость: мы согласны ошибочно объявлять победу примерно в 5 случаях из 100.
Частая путаница. p-value — это не «вероятность того, что B лучше» и не «вероятность ошибки вывода». Это вероятность самих данных при допущении, что разницы нет.
Почему интервал полезнее, чем «значимо / незначимо»
Доверительный интервал показывает не только факт различия, но и его масштаб. Фраза «прирост от 0,38 до 1,50 п.п.» гораздо содержательнее, чем «p < 0,05»: по ней сразу видно и худший, и лучший реалистичный сценарий, а значит, можно посчитать деньги в обоих случаях.
Если интервал разницы включает ноль — данные допускают, что эффекта нет вовсе. Если интервал целиком в плюсе, но узкой полосой около нуля — эффект есть, но он может оказаться слишком мелким, чтобы окупить разработку.
Две ошибки эксперимента
| На самом деле разницы нет | На самом деле разница есть | |
|---|---|---|
| Тест сказал «победа» | Ошибка I рода Внедрили пустышку. Ресурсы потрачены, метрика не выросла. Контролируется порогом значимости (5 %). |
Верное решение Рабочее изменение раскатано на всех. |
| Тест сказал «разницы нет» | Верное решение Бесполезная идея отклонена. |
Ошибка II рода Хорошая идея похоронена, потому что выборки не хватило. Контролируется мощностью (80 %). |
Мощность 80 % означает: если эффект нужного размера реально есть, тест заметит его в 4 случаях из 5. В оставшемся случае вы честно проведёте эксперимент и ничего не увидите.
Формулы, которые стоят за цифрами страницы
Сравнение двух конверсий (z-тест для долей)
p̄ — общая конверсия обеих групп вместе. Чем больше z по модулю, тем меньше p-value. Для нашего теста z = —.
Интервал для разницы конверсий
Множитель 1,96 соответствует уровню доверия 95 %. Наш интервал: — процентных пункта.
Сколько трафика нужно и почему это считают заранее
Главный вопрос перед запуском: какой минимальный эффект вы хотите уметь замечать? Чем мельче эффект, тем больше людей нужно — и зависимость здесь не линейная, а квадратичная: чтобы ловить вдвое меньший прирост, трафика нужно вчетверо больше.
Цена чувствительности при базовой конверсии 5 %
Расчёт для уровня значимости 5 % и мощности 80 %, двусторонний тест. «Дней теста» — при 1 800 посетителях в сутки на обе группы вместе.
| Хотим замечать прирост | Конверсия B станет | На группу | Всего | Дней теста | Вердикт |
|---|
Вывод для практики. Если трафика хватает только на две недели, не обманывайте себя: вы сможете надёжно поймать прирост примерно от 20 % относительных и крупнее. Мелкие косметические правки на таком объёме проверить невозможно — их либо объединяют в один заметный пакет изменений, либо не тестируют вовсе.
Кейс: карточка товара, 14 дней, 24 977 посетителей
Тест шёл ровно две недели, трафик делился поровну случайным образом, пользователь навсегда закреплялся за своей версией. Вот что получилось.
Сводная таблица эксперимента
| Группа | Посетители | Заказы | Конверсия | 95 % интервал | Отн. прирост |
|---|
—
Динамика по дням
Дневная конверсия скачет очень сильно — это нормальный шум, а не сигнал. Переключитесь на накопленный итог, чтобы увидеть, как из шума постепенно проступает настоящая разница.
Ловушка подглядывания: как тест «выигрывал» и «проигрывал» три раза
Ниже — p-value, пересчитанное каждый день на накопленных данных. Зелёным отмечены дни, когда результат формально был значимым. Если бы команда останавливала тест в первый же такой день, она приняла бы решение на шестой день — а на седьмой значимость исчезла бы.
| День | Накопл. A | Накопл. B | Разница, п.п. | p-value | Что показал бы дашборд |
|---|
Почему так выходит. Каждая проверка — это ещё один шанс случайно наткнуться на «значимость». Если смотреть на p-value ежедневно и останавливаться при первом успехе, доля ложных побед вырастает с обещанных 5 % примерно до 20–30 %. Лечится просто: срок фиксируется заранее, а промежуточные остановки — только по специальным последовательным методам.
Разрез по сегментам: общий итог скрывает главное
Итоговые +0,94 п.п. — это средняя температура. Стоит разложить тот же самый результат по типам устройств, и картина меняется: прирост дал ровно один сегмент, а два остальных не изменились вовсе.
Аналитическая таблица по устройствам
| Сегмент | Посет. A | Конв. A | Посет. B | Конв. B | Разница, п.п. | Отн. | p-value | Вывод |
|---|
Суммы по сегментам в точности равны итогам эксперимента — это первое, что стоит проверять в любой аналитической таблице.
Тот же результат на графике
Высота столбца — конверсия сегмента. Видно, что серый и синий столбцы почти совпадают везде, кроме мобильных.
Как это читать правильно. Новая карточка лечила боль мобильных пользователей: на маленьком экране длинная форма особенно мучительна, и «в один клик» сработало. На десктопе старая форма и так не мешала — поэтому там ничего не изменилось. Гипотеза не просто подтвердилась, а объяснилась.
Где здесь ловушка. Если нарезать данные на десяток сегментов и искать хоть один значимый, что-нибудь «значимое» найдётся почти наверняка — случайно. Сегменты допустимо анализировать, когда они выбраны заранее и их немного, а найденный эффект стоит подтвердить отдельным тестом на этом сегменте.
Что это значит в деньгах
Пересчёт эффекта на год вперёд. Берём тот же трафик, что и в тесте, и средний чек 4 500 ₽. Нижняя и верхняя границы — концы 95 % доверительного интервала: именно так стоит показывать прогноз руководству, а не одним «средним» числом.
| Сценарий | Прирост конверсии | Доп. заказов в год | Доп. выручка в год |
|---|
Даже пессимистичный край интервала окупает доработку — именно поэтому решение о раскатке здесь принимается спокойно, а не «на удачу».
Калькулятор: посчитайте свой тест прямо здесь
Подставьте собственные числа — посетителей и конверсий в каждой группе. Страница пересчитает конверсии, прирост, доверительный интервал и p-value.
Данные эксперимента
Результат
—
Семь ошибок, которые портят большинство тестов
| Ошибка | Как выглядит | Чем опасна | Что делать |
|---|---|---|---|
| Подглядывание | Дашборд открывают каждое утро и ждут «зелёного» | Ложные победы вместо 5 % достигают 20–30 % | Зафиксировать срок заранее и не смотреть на значимость до его конца |
| Слишком короткий тест | Остановили через 3 дня, «и так всё видно» | Выходные и будни ведут себя по-разному, эффект переоценивается | Всегда целое число недель, минимум одна полная |
| Мало трафика под задачу | Ищут прирост 3 % на выборке в тысячу человек | Тест физически не способен заметить эффект — итог всегда «разницы нет» | Считать размер выборки до запуска; мелкие правки объединять в пакет |
| Много метрик сразу | Смотрят 15 показателей и выбирают выросший | Хоть что-то вырастет случайно почти наверняка | Одна главная метрика, названная до запуска; остальные — только защитные |
| Правки на ходу | На пятый день «чуть поправили» вариант B | Данные до и после правки несравнимы, тест обнуляется | Любое изменение варианта = перезапуск теста с нуля |
| Кривая рандомизация | Группа A — Москва, группа B — регионы | Сравниваются не версии, а разные аудитории | Случайное распределение по стабильному идентификатору пользователя |
| Игнорирование защитных метрик | Конверсия выросла — раскатываем! | Заказов больше, но возвраты и отмены съели всю выгоду | Заранее список метрик, ухудшение которых отменяет победу |
Чек-лист перед запуском и перед решением
До запуска
- Гипотеза сформулирована с причиной и ожидаемым размером эффекта
- Главная метрика одна и записана до старта
- Размер выборки и срок рассчитаны, срок кратен неделе
- Определены защитные метрики и условия досрочной остановки по вреду
- Рандомизация проверена A/A-тестом или сплит-валидацией
Перед решением
- Тест отработал весь запланированный срок
- Размеры групп совпадают с ожидаемыми (нет перекоса трафика)
- Смотрим не только p-value, но и доверительный интервал
- Эффект пересчитан в деньги по нижней границе интервала
- Защитные метрики не ухудшились
- Результат по сегментам объясним, а не просто «где-то нашлось»
Итог по нашему кейсу. Вариант B выигрывает — относительных (— п.п., p = —), эффект сосредоточен на мобильных и логично объясняется сутью изменения. Решение: раскатывать на всех, а для десктопа формулировать и проверять отдельную гипотезу — там нынешняя правка ничего не дала.