Привет! Меня зовут Денис. Уже более 5 лет работаю Senior Product Analyst в крупнейших IT-компаниях России, включая Тинькофф. Разрабатывал системы аналитики с полного нуля, провёл огромное количество A/B тестов и знаю всю внутреннюю кухню больших корпораций изнутри.

Я совершил множество ошибок на своём пути – и теперь здесь, чтобы помочь именно тебе их избежать и пройти этот путь быстрее!

A/B-тесты давно стали стандартным инструментом в продуктовой и маркетинговой аналитике. Но на практике большинство ошибок происходит не на этапе запуска эксперимента, а при анализе результатов. Чаще всего причина в том, что статистический метод выбирается «по привычке», без учёта типа метрики и свойств данных.

В этой статье я собрал практическую логику выбора методов анализа A/B-тестов. Без углубления в теорию, но с пониманием, почему в одном случае работает χ², а в другом t-test может привести к неверным выводам.

С чего начинается анализ A/B-теста

Предположим, у нас есть две рандомно сформированные выборки – контроль и тест. Первый и самый важный шаг – определить метрику, по которой мы будем принимать решение. Именно от типа метрики зависит выбор статистического метода.

Пример A/B - теста
Пример A/B - теста

На практике почти все продуктовые метрики можно разделить на три группы:

  • пропорции (качественные метрики),

  • количественные метрики,

  • метрики соотношений.

Разберём каждую из них.

Пропорции (качественные метрики)

К этому типу относятся конверсия, CTR, доля пользователей, совершивших целевое действие. Это самый частый кейс в A/B-тестах и одновременно самый простой с точки зрения анализа.

Для таких метрик оптимальным выбором является χ²-тест. Он хорошо подходит для бинарных исходов, устойчив на больших выборках и не требует сложных предположений о распределении данных.

Перед запуском теста важно оценить размер выборки. Для этого нужно задать базовую конверсию, минимальный эффект, уровень значимости и мощность эксперимента. Без этого легко попасть в ситуацию, когда разница не обнаруживается просто потому, что данных недостаточно.

Минимальный пример χ²-теста в Python выглядит так:

import numpy as np
from scipy.stats import chi2_contingency

# successes, failures
control = np.array([50, 950])
test = np.array([60, 940])

chi2, p_value, _, _ = chi2_contingency([control, test])

print(f'p-value: {p_value}')

При анализе результатов полезно смотреть не только на p-value, но и на относительное изменение (lift) и доверительный интервал. Один только факт статистической значимости редко даёт понимание бизнес-эффекта.

Количественные метрики

Количественные метрики – это количество заказов, длина сессии, выручка, число действий пользователя и т.д. Основная проблема таких данных – высокая дисперсия, выбросы и асимметричные распределения.

Если у вас есть данные за предтестовый период, имеет смысл использовать CUPED. Этот подход снижает дисперсию метрики за счёт учёта предыдущего поведения пользователей и часто заметно повышает чувствительность эксперимента.

Ключевая идея CUPED сводится к корректировке тестовой метрики:

theta = cov_pre_test / var_pre_test
cuped_metric = test_metric - theta * (pre_test_metric - mean_pre_test)

После применения CUPED стоит оценить распределение данных. Если выборка достаточно большая и распределение близко к нормальному, можно использовать t-test. На практике безопаснее сразу выбирать t-критерий Уэлча – он не требует равенства дисперсий между группами.

Пример:

from scipy.stats import ttest_ind

ttest_ind(control_cuped, test_cuped, equal_var=False)

Если данных мало или распределение явно не нормальное, разумной альтернативой становится bootstrap. Этот метод не опирается на предположения о распределении и позволяет напрямую получить доверительный интервал для эффекта.

Упрощённый пример bootstrap-оценки разницы средних:

import numpy as np

boot_diffs = []
for _ in range(1000):
    boot_control = np.random.choice(control, size=len(control), replace=True)
    boot_test = np.random.choice(test, size=len(test), replace=True)
    boot_diffs.append(boot_test.mean() - boot_control.mean())

Дальше по распределению boot_diffs можно построить доверительный интервал и проверить, содержит ли он ноль.

Метрики соотношений

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

Основная проблема здесь в том, что числитель и знаменатель зависимы. Стандартный t-test предполагает независимость наблюдений, из-за чего дисперсия оценивается неправильно, а выводы могут быть смещены.

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

Упрощённый пример проверки с помощью дельта-метода:

import numpy as np
from scipy.stats import norm

mean_diff = mean_test - mean_control
var = var_test / n_test + var_control / n_control

z = mean_diff / np.sqrt(var)
p_value = 2 * (1 - norm.cdf(abs(z)))

Если выборка небольшая, лучше использовать блочный bootstrap. В отличие от ��бычного bootstrap, здесь данные пересобираются блоками, что позволяет сохранить структуру зависимости. После этого эффект можно оценивать через доверительный интервал или t-статистику, рассчитанную на основе bootstrap-оценки стандартной ошибки.

Как выбирать метод на практике

Если сильно упростить логику выбора, она будет такой:

  • для пропорций – χ²-тест;

  • для количественных метрик – CUPED + t-test (или bootstrap при малых выборках);

  • для метрик соотношений – дельта-метод при больших выборках и блочный bootstrap при малых.

Схема выбора метрик
Схема выбора метрик

Выводы

Корректный анализ A/B-теста – это не только проверка p-value. Это последовательность решений: выбор правильной метрики, понимание её статистической природы, оценка размера выборки и дисперсии данных, а затем – осознанный выбор метода анализа.

Использование «привычного» теста без учёта особенностей данных часто приводит к статистически значимым, но неверным бизнес-выводам. И именно на этом этапе A/B-тесты чаще всего дают ложное чувство уверенности.

Чтобы узнать больше о продуктовой аналитике — подписывайтесь на мой Telegram канал. Если статья была полезна — добавляйте в избранное. До скорого!