Короткий ответ
Для сравнения двух конверсий (биномиальные доли) обычно используют z-тест для разности пропорций или эквивалентный chi-square тест (для таблицы 2x2 они дают математически согласованные результаты); t-тест для независимых выборок уместен для непрерывных метрик (например, среднего чека), а не для бинарных конверсий, хотя на больших выборках численно даёт близкий результат к z-тесту.
Как это работает подробнее
Как это работает: z-тест и chi-square тест для таблицы 2x2 проверяют одну и ту же нулевую гипотезу о равенстве долей и при двустороннем сравнении дают эквивалентные p-value, так как chi-square статистика является квадратом z-статистики; t-тест основан на предположении о приблизительно нормальном распределении метрики внутри группы, что лучше подходит для непрерывных величин с ограниченной асимметрией.
Пример в Python:
Для среднего чека с длинным хвостом вместо t-теста можно применить bootstrap-доверительный интервал разницы медиан или средних с 10 000 ресэмплов — это устойчивее к выбросам, чем классический t-тест.
Пример кода
from scipy import stats
import numpy as np
# конверсии: A — 500 из 10000, B — 560 из 10000
count = np.array([560, 500])
nobs = np.array([10000, 10000])
from statsmodels.stats.proportion import proportions_ztest
z_stat, p_value = proportions_ztest(count, nobs)
print(p_value)Что использовать на практике
- На практике: для метрик типа 'средний чек' или 'время на странице' с сильной асимметрией (длинный хвост) t-тест может быть не очень устойчив — на практике часто применяют бутстрэп или Манна-Уитни как более робастную альтернативу; для конверсий на больших выборках разница между z- и chi-square тестом практически не ощущается.
Подводные камни
- Частые ошибки: использование t-теста напрямую к бинарной переменной (0/1) без осознания, что это частный случай, который при умеренных выборках даёт результаты, близкие к z-тесту для долей, но при малых выборках или сильной асимметрии числовых метрик нужно выбирать тест осознанно, а не по умолчанию.