A/B-тестирование — полный гайд для аналитика данных

Коротко

A/B-тестирование — это эксперимент, в котором пользователей случайно делят на две группы и сравнивают метрики при разных вариантах продукта. Это основной инструмент для принятия data-driven решений: вместо «мне кажется, новая кнопка лучше» вы получаете статистически обоснованный ответ. На собеседованиях аналитиков A/B-тесты — одна из самых частых тем.

Что такое A/B-тестирование

A/B-тест (он же сплит-тест, он же контролируемый эксперимент) — метод сравнения двух вариантов продукта. Контрольная группа (A) видит текущую версию, тестовая группа (B) — версию с изменением. Пользователи распределяются случайно, чтобы группы были сопоставимы по всем характеристикам, кроме тестируемого изменения.

Ключевая идея: если единственное различие между группами — ваше изменение, то разница в метрике вызвана именно им, а не внешними факторами. Рандомизация устраняет confounders — скрытые переменные, которые могли бы исказить результат.

A/B-тест отличается от мультивариантного теста тем, что сравнивает ровно два варианта. Мультивариантный тест проверяет несколько изменений одновременно, но требует значительно больше трафика.

Пошаговый процесс: от гипотезы до решения

1. Сформулировать гипотезу

Гипотеза — это не «давайте поменяем цвет кнопки». Это конкретное утверждение: «Изменение цвета кнопки с серого на зелёный увеличит конверсию в покупку на 5%». Без чёткой гипотезы тест превращается в рыбалку — вы будете искать эффект в данных, а не проверять предположение.

Нулевая гипотеза (H0): разницы между группами нет. Конверсия в тесте = конверсия в контроле. Альтернативная гипотеза (H1): разница есть. Конверсия в тесте выше.

2. Выбрать метрику

Основная метрика (primary metric) — одна. По ней принимается решение. Дополнительные метрики — для контекста и диагностики. Не забудьте про guardrail-метрики — те, которые не должны ухудшиться (время загрузки, crash rate).

3. Рассчитать размер выборки

Размер выборки зависит от четырёх параметров:

  • Базовый уровень метрики — текущая конверсия (например, 10%)
  • MDE (Minimum Detectable Effect) — минимальный эффект, который вы хотите обнаружить (например, 1 п.п.)
  • Уровень значимости alpha — допустимая вероятность ложного срабатывания (обычно 0.05)
  • Мощность (1 - beta) — вероятность обнаружить реальный эффект (обычно 0.80)

Чем меньше MDE хотите поймать, тем больше нужна выборка. Чем выше дисперсия метрики, тем больше наблюдений потребуется. Это определяет, сколько дней будет длиться тест.

4. Рандомизировать пользователей

Каждый пользователь случайно попадает в одну из групп. Единица рандомизации чаще всего — пользователь (user ID). Рандомизация по сессиям опасна: один человек может увидеть оба варианта, что размывает эффект.

5. Провести эксперимент

Тест работает до набора запланированного размера выборки. Не останавливайте тест раньше, даже если результат уже «значимый» — это подглядывание, которое раздувает вероятность ложного срабатывания. Минимальная длительность — один полный бизнес-цикл (обычно 7 дней), чтобы покрыть день-недельную сезонность.

6. Проанализировать результаты

Считаете тестовую статистику и p-value. Если p < alpha — отклоняете H0, результат статистически значим. Если p >= alpha — данных недостаточно для отклонения H0.

7. Принять решение

Статистическая значимость — не единственный критерий. Проверьте:

  • Практическая значимость. Рост конверсии на 0.01% при p = 0.001 — статистически значим, но бесполезен.
  • Доверительный интервал. Посмотрите диапазон возможного эффекта, а не только точечную оценку.
  • Guardrail-метрики. Не ухудшились ли ключевые показатели здоровья продукта.

Ключевые понятия

P-value — вероятность получить наблюдаемый или более экстремальный результат при условии, что H0 верна. Подробнее — в отдельной статье.

Alpha (уровень значимости) — порог для p-value. Обычно 0.05. Это ваша допустимая вероятность ошибки первого рода — раскатки изменения, которое не работает.

Мощность (1 - beta) — вероятность обнаружить эффект, если он есть. Обычно 0.80. При мощности 0.80 вы пропустите реальный эффект в 20% случаев.

MDE (Minimum Detectable Effect) — наименьший эффект, который тест способен обнаружить. Задаётся до эксперимента на основе бизнес-требований: какой минимальный прирост метрики оправдывает внедрение фичи?

SRM (Sample Ratio Mismatch) — перекос в размерах групп. Если при сплите 50/50 в тесте 52% пользователей — что-то пошло не так с рандомизацией. Результатам такого теста доверять нельзя.

Python: простой z-тест для сравнения конверсий

import numpy as np
from scipy import stats

# Контроль: 480 конверсий из 5000, тест: 540 из 5000
n_ctrl, conv_ctrl = 5000, 480
n_test, conv_test = 5000, 540

p_ctrl, p_test = conv_ctrl / n_ctrl, conv_test / n_test
p_pool = (conv_ctrl + conv_test) / (n_ctrl + n_test)
se = np.sqrt(p_pool * (1 - p_pool) * (1/n_ctrl + 1/n_test))

z = (p_test - p_ctrl) / se
p_value = 2 * (1 - stats.norm.cdf(abs(z)))

print(f"Конверсия: {p_ctrl:.1%} → {p_test:.1%}, z={z:.2f}, p={p_value:.4f}")

Подробнее о выборе между t-тестом и z-тестом.

Байесовский подход

Классический (частотный) A/B-тест отвечает на вопрос: «Насколько удивительны данные, если эффекта нет?» Байесовский подход отвечает напрямую: «Какова вероятность, что вариант B лучше?»

Байесовский тест не требует фиксированного размера выборки и позволяет останавливать эксперимент в любой момент без раздувания ошибки. Результат — распределение вероятностей эффекта, а не бинарное «значимо / незначимо». На практике байесовский подход используют Google, VK Experiments и ряд других платформ. Оба подхода валидны — выбор зависит от инфраструктуры и культуры команды.

Когда A/B-тест не подходит

  • Мало трафика. Если на набор выборки нужно полгода — ищите другие методы (pre-post анализ, квази-эксперименты).
  • Необратимые изменения. Если откатить невозможно (ребрендинг, закрытие фичи), A/B-тест бесполезен.
  • Очевидное улучшение. Если страница падает с ошибкой 500 у 30% пользователей — чините, а не тестируйте.
  • Сетевые эффекты. В маркетплейсах и соцсетях пользователи групп влияют друг на друга. Нужна кластерная рандомизация.

Типичные ошибки

1. Подглядывание (peeking). Проверять p-value каждый день и останавливать тест при первом p < 0.05. При ежедневных проверках реальный alpha вырастает с 5% до 20-30%. Фиксируйте размер выборки до запуска.

2. Множественные сравнения без поправки. Проверяете 15 метрик — ожидайте хотя бы одно ложное срабатывание. Используйте Бонферрони или FDR. Подробнее — в статье про ошибки в A/B-тестах.

3. Эффект новизны (novelty effect). Пользователи активнее кликают на новый вариант просто потому, что он новый. Через неделю эффект исчезает. Решение — запускать тест минимум на 2-3 недели и сравнивать метрики по временным окнам.

4. Игнорирование SRM. Если соотношение пользователей в группах не совпадает с запланированным сплитом — результат невалиден. Проверяйте SRM хи-квадрат тестом перед анализом.

Вопросы с собеседований

Что такое A/B-тестирование? Объясните простыми словами. — Это эксперимент: делим пользователей на две случайные группы, одной показываем текущую версию продукта, другой — изменённую. Сравниваем метрики. Рандомизация гарантирует, что разница вызвана изменением, а не внешними факторами.

Как определить, сколько пользователей нужно для теста? — Считаем размер выборки по четырём параметрам: базовый уровень метрики, MDE, alpha и мощность. Чем меньше эффект хотим поймать — тем больше выборка. Для снижения дисперсии можно использовать CUPED или стратификацию.

Тест показал p = 0.08. Что делаете? — Результат формально незначим при alpha = 0.05. Но p-value близко к порогу. Проверяю мощность: если она была низкой, возможно, эффект есть, но выборки не хватило. Смотрю доверительный интервал — если верхняя граница существенна, имеет смысл повторить тест с большей выборкой. Решение «эффекта нет» при p = 0.08 было бы преждевременным.

Как вы справляетесь с проблемой множественных сравнений? — Фиксирую одну основную метрику до запуска — по ней принимаю решение без поправки. Для дополнительных метрик применяю Бонферрони или Benjamini-Hochberg (FDR). Анализ по подгруппам рассматриваю как гипотезы для следующих тестов, а не как основания для решений.

Можно ли остановить тест раньше, если результат уже значимый? — При стандартном дизайне — нет. Ранняя остановка раздувает alpha. Если бизнес требует возможность ранней остановки — нужно закладывать это в дизайн: sequential testing, group sequential design или always valid p-values.

Чем отличается статистическая значимость от практической? — Статистическая значимость (p < 0.05) говорит, что результат вряд ли случаен. Практическая значимость — что эффект достаточно велик для бизнес-решения. Рост конверсии на 0.01% может быть значимым при большом трафике, но бесполезным для бизнеса. Всегда смотрю на размер эффекта и доверительный интервал.


Потренируйтесь решать задачи по A/B-тестированию в Карьерникетренажёре для подготовки к собеседованиям. 1500+ примеров вопросов по всем темам, включая статистику.

FAQ

Что такое A/B-тестирование простыми словами?

A/B-тестирование — это эксперимент, в котором пользователей случайно делят на две группы: одна видит текущую версию продукта, другая — изменённую. Сравнивая метрики групп, можно понять, улучшает ли изменение продукт или нет. Рандомизация гарантирует, что разница вызвана именно изменением.

Как рассчитать размер выборки для A/B-теста?

Размер выборки зависит от базового уровня метрики, минимального детектируемого эффекта (MDE), уровня значимости (alpha, обычно 0.05) и мощности теста (обычно 0.80). Чем меньше эффект нужно обнаружить, тем больше пользователей потребуется. Подробнее — в статье про размер выборки.

Сколько времени нужно проводить A/B-тест?

Минимум — один полный бизнес-цикл (7 дней), чтобы покрыть дневную сезонность. Оптимально — 2-3 недели, чтобы учесть эффект новизны. Главное — не останавливать тест раньше запланированного размера выборки, даже если результат уже кажется значимым.

В чём разница между A/B-тестом и мультивариантным тестом?

A/B-тест сравнивает два варианта (контроль и один тестовый). Мультивариантный тест проверяет несколько изменений и их комбинации одновременно. Мультивариантный тест требует значительно больше трафика, но позволяет оценить взаимодействие факторов. Подробнее — в отдельном сравнении.

Что делать, если трафика не хватает для A/B-теста?

Увеличьте MDE — ищите только крупные эффекты. Снизьте дисперсию метрики через CUPED или стратификацию. Используйте более чувствительную метрику (например, linearized metric для среднего чека). Если ничего не помогает — рассмотрите квази-экспериментальные методы: pre-post анализ, difference-in-differences, synthetic control.