← Назад к вопросам

Почему будешь использовать Т-тест для нахождения статистической значимости конверсии между группами A и B?

2.0 Middle🔥 161 комментариев
#A/B тестирование#Статистика и математика

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

T-тест для анализа конверсии в A/B тестах

Вопрос о применении t-теста для анализа конверсии требует внимательного рассмотрения. На первый взгляд может показаться странным, что мы используем t-тест для бинарных данных (конверсия или нет), но на самом деле это один из распространённых подходов. Давайте разберёмся, почему, когда это применимо, и какие есть альтернативы.

Почему t-тест можно использовать для конверсии

1. Конверсия как непрерывная переменная

Когда мы говорим о конверсии между группами, мы имеем в виду долю/процент пользователей, совершивших действие:

  • Группа A: конверсия = 12.5% (125 из 1000)
  • Группа B: конверсия = 15.3% (153 из 1000)

Это уже непрерывная переменная (число между 0 и 100%), а не бинарная. И для сравнения двух средних значений непрерывных переменных как раз и предназначен t-тест.

# Конверсии как средние значения
group_a_conversions = [1, 0, 1, 0, 1, ...]  # 1000 значений
group_b_conversions = [1, 1, 0, 1, 1, ...]  # 1000 значений

# Среднее = доля конвертов
mean_a = np.mean(group_a_conversions)  # 0.125 = 12.5%
mean_b = np.mean(group_b_conversions)  # 0.153 = 15.3%

# T-тест для проверки различия средних
from scipy import stats
t_stat, p_value = stats.ttest_ind(group_a_conversions, group_b_conversions)
print(f"t-statistic: {t_stat:.4f}, p-value: {p_value:.4f}")

2. Центральная предельная теорема (ЦПТ)

Даже хотя конверсия по определению — бинарная величина (конвертилась или нет), при достаточно большом размере выборки распределение средней доли приближается к нормальному.

ЦПТ гласит: При n → ∞, распределение средних любой переменной 
приближается к нормальному, независимо от исходного распределения

Практический порог:

  • При n > 30-50 в каждой группе можно применять t-тест
  • При n > 100-200 t-тест становится очень надёжным
  • Особенно для конверсий, близких к 50%

3. T-тест как Z-тест для больших выборок

Для больших выборок t-тест эквивалентен Z-тесту, который часто используется в маркетинге специально для пропорций:

# T-тест (для больших n)
t_stat, p_value_t = stats.ttest_ind(data_a, data_b)

# Z-тест для пропорций (классический способ для конверсий)
from statsmodels.stats.proportion import proportions_ztest
count_a, count_b = 125, 153
n_a, n_b = 1000, 1000
z_stat, p_value_z = proportions_ztest([count_a, count_b], [n_a, n_b])

print(f"T-test p-value: {p_value_t:.4f}")
print(f"Z-test p-value: {p_value_z:.4f}")
# Результаты будут примерно одинаковы при больших n

Когда t-тест уместен для конверсии

Используй t-тест:

  • Размер выборки > 100 в каждой группе
  • Конверсия не близка к крайностям (не 1% и не 99%)
  • Нужен быстрый анализ с использованием стандартных инструментов

НЕ используй t-тест:

  • Малые выборки (n < 30)
  • Очень низкая или очень высокая конверсия (< 5% или > 95%)
  • Нужна высокая точность для критичного решения

Лучшие практики для анализа конверсии

Вариант 1: Стандартный Z-тест для пропорций (рекомендуется)

from statsmodels.stats.proportion import proportions_ztest

# Данные A/B теста
conversions_a = 125  # количество конвертов в A
conversions_b = 153  # количество конвертов в B
n_a = 1000          # размер группы A
n_b = 1000          # размер группы B

# Z-тест для двух пропорций
count = np.array([conversions_a, conversions_b])
nobs = np.array([n_a, n_b])
z_stat, p_value = proportions_ztest(count, nobs)

print(f"Z-statistic: {z_stat:.4f}")
print(f"P-value: {p_value:.4f}")
print(f"Статистически значимо: {'Да' if p_value < 0.05 else 'Нет'}")

Вариант 2: T-тест (простой, но менее точный)

# Создаём бинарные массивы
group_a = np.array([1]*125 + [0]*(1000-125))
group_b = np.array([1]*153 + [0]*(1000-153))

# T-тест Велча (устойчив к неравным дисперсиям)
t_stat, p_value = stats.ttest_ind(group_a, group_b, equal_var=False)
print(f"T-statistic: {t_stat:.4f}, P-value: {p_value:.4f}")

Вариант 3: Chi-square тест (для категориальных данных)

from scipy.stats import chi2_contingency

# Таблица сопряжённости
contingency_table = np.array([
    [125, 153],        # конверсии
    [875, 847]         # неконверсии
])

chi2, p_value, dof, expected = chi2_contingency(contingency_table)
print(f"Chi-square: {chi2:.4f}, P-value: {p_value:.4f}")

Сравнение методов

МетодПрименениеТочностьТребования
Z-тестДля пропорцийВысокаяn > 30
T-тестДля среднихСредняяn > 30-50
Chi-squareКатегориальныеВысокаяn > 5 везде
FisherМалые nТочнаяn < 30

Практический пример

import numpy as np
from scipy import stats
from statsmodels.stats.proportion import proportions_ztest

# A/B тест результаты
group_a = {'conversions': 125, 'users': 1000}
group_b = {'conversions': 153, 'users': 1000}

# Вычисляем конверсии
conv_rate_a = group_a['conversions'] / group_a['users']
conv_rate_b = group_b['conversions'] / group_b['users']

print(f"Конверсия A: {conv_rate_a:.2%}")
print(f"Конверсия B: {conv_rate_b:.2%}")
print(f"Разница: {(conv_rate_b - conv_rate_a):.2%}")

# Z-тест (РЕКОМЕНДУЕТСЯ)
count = [group_a['conversions'], group_b['conversions']]
nobs = [group_a['users'], group_b['users']]
z_stat, p_value = proportions_ztest(count, nobs)

print(f"\nZ-test результат:")
print(f"Z-statistic: {z_stat:.4f}")
print(f"P-value (two-tailed): {p_value:.4f}")

if p_value < 0.05:
    print(f"✓ Результат статистически значим (p < 0.05)")
    lift = ((conv_rate_b - conv_rate_a) / conv_rate_a) * 100
    print(f"Lift: {lift:+.1f}%")
else:
    print(f"✗ Недостаточно доказательств различия (p >= 0.05)")

Выводы

T-тест используется для конверсии потому что:

  1. Конверсия становится непрерывной когда мы смотрим на долю в группе
  2. ЦПТ гарантирует нормальность при больших n
  3. Он работает и дает близкие результаты к Z-тесту

Однако в практике:

  • Для пропорций лучше использовать Z-тест или Chi-square
  • T-тест подходит, но менее специализирован
  • Для малых выборок используйте Fisher's exact test
  • Всегда проверяйте размер эффекта, а не только p-value
Почему будешь использовать Т-тест для нахождения статистической значимости конверсии между группами A и B? | PrepBro