Ответ
Выбор критерия зависит от типа метрики и свойств данных. Вот мой практический подход:
Для бинарных метрик (конверсия, кликабельность):
- Z-тест для пропорций: Основной инструмент при больших размерах выборок (n > 30, а лучше > 100 на группу), когда можно аппроксимировать биномиальное распределение нормальным.
from statsmodels.stats.proportion import proportions_ztest # count - количество успехов, nobs - размер группы count = np.array([150, 180]) # Конверсии в группах A и B nobs = np.array([1000, 1000]) # Размеры групп z_stat, p_value = proportions_ztest(count, nobs, alternative='two-sided') print(f"Z-статистика: {z_stat:.3f}, p-value: {p_value:.4f}")
Для непрерывных метрик (средний чек, время в приложении):
- T-тест Стьюдента: Использую, когда данные приблизительно нормально распределены и дисперсии в группах схожи (проверяю тестом Левена).
from scipy.stats import ttest_ind # revenue_a, revenue_b - массивы с данными по чекам t_stat, p_value = ttest_ind(revenue_a, revenue_b, equal_var=True) - U-тест Манна-Уитни: Непараметрическая альтернатива, когда данные не нормальны или есть выбросы. Он сравнивает не средние, а распределения в целом.
from scipy.stats import mannwhitneyu u_stat, p_value = mannwhitneyu(time_on_site_a, time_on_site_b, alternative='two-sided')
Ключевые принципы, которые я соблюдаю:
- Проверка предпосылок: Перед t-тестом смотрю на гистограммы и проверяю нормальность (Shapiro-Wilk) и гомогенность дисперсий (Levene's test).
- Коррекция множественных сравнений: Если тестируется несколько гипотез одновременно, применяю поправку Бонферрони или Бенджамини-Хохберга (FDR).
- Расчёт мощности теста: До запуска оцениваю необходимый размер выборки, чтобы с заданной вероятностью (обычно 80%) обнаружить эффект ожидаемого размера (MDE). Использую для этого
statsmodels.stats.power. - Анализ не только p-value: Всегда смотрю на доверительные интервалы разницы метрик, чтобы оценить не только статистическую значимость, но и практическую значимость эффекта.