На практике большинство ошибок происходит не на этапе запуска эксперимента, а при анализе результатов. Чаще всего причина в том, что статистический метод выбирается «по привычке», без учёта типа метрики и свойств данных. В этой статье я собрал практическую логику выбора методов анализа A/B-тестов. Без углубления в теорию, но с пониманием, почему в одном случае работает χ², а в другом t-test может привести к неверным выводам.
Привет! Меня зовут Денис. Уже более 5 лет работаю Senior Product Analyst в крупнейших IT-компаниях России, включая Тинькофф. Разрабатывал системы аналитики с полного нуля, провёл огромное количество A/B тестов и знаю всю внутреннюю кухню больших корпораций изнутри.
Я совершил множество ошибок на своём пути – и теперь здесь, чтобы помочь именно тебе их избежать и пройти этот путь быстрее!
A/B-тесты давно стали стандартным инструментом в продуктовой и маркетинговой аналитике. Но на практике большинство ошибок происходит не на этапе запуска эксперимента, а при анализе результатов. Чаще всего причина в том, что статистический метод выбирается «по привычке», без учёта типа метрики и свойств данных.
В этой статье я собрал практическую логику выбора методов анализа A/B-тестов. Без углубления в теорию, но с пониманием, почему в одном случае работает χ², а в другом t-test может привести к неверным выводам.
С чего начинается анализ 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 канал. Если статья была полезна — добавляйте в избранное. До скорого!
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Последовательный анализ в AB-тестировании: ускоряем принятие решений с помощью mSPRT | 0 | 10.77 | 04-02-2026 |
| 2 | Поиск аномалий: статистика или ML? Выбираем лучшее | 0 | 8.3 | 17-02-2026 |
| 3 | Propensity Score Matching: как строить аналоги A/B-тестов, когда эксперименты невозможны | 0 | 8.46 | 06-03-2026 |
| 4 | Hypothesis: тесты, которые сами ищут контрпримеры к вашему коду | 0 | 8.52 | 27-07-2026 |
| 5 | Как писать юнит-тесты, которые не ломаются | 0 | 9.59 | 21-02-2026 |
| 6 | Property-based testing на практике: как находить баги, о которых вы не подумали | 0 | 10.29 | 20-06-2026 |
| 7 | Оценка эффекта релиза, когда изменение затронуло не всех: diff-in-diff и синтетический контроль | 0 | 10.69 | 19-01-2026 |
| 8 | Как подбирать аугментации: гипотезы, протокол и метрики | 0 | 8.18 | 30-03-2026 |
| 9 | Какие ошибки чаще всего делают при выборе авто 🚗 Смотрим ... | 0 | 6.34 | 28-07-2026 |