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

Почему важен T-тест?

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

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

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

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

Почему важен T-тест

T-тест — это один из самых фундаментальных инструментов в статистике и product analytics. Его важность сложно переоценить. Объясню почему.

1. Отличие сигнала от шума

Основная проблема: В жизни есть везение и случайность. Когда вы видите, что одна версия конвертит на 3.2%, а другая на 3.5% — это может быть:

  • Реальный эффект (нужно внедрить)
  • Просто удача (если бы мы повторили, результат был бы другой)

Пример: Представьте две монеты. Вы кидаете их по 10 раз.

  • Монета А: 6 орлов из 10
  • Монета B: 7 орлов из 10

Вопрос: Монета B лучше или это просто случайность?

На 10 бросках это может быть шум. Но если мы бросим по 10,000 раз:

  • Монета А: 4,950 орлов
  • Монета B: 7,010 орлов

Теперь 20% разница явно не случайность.

T-тест именно это и отвечает: "Насколько вероятно, что эта разница произошла случайно?"

2. Защита от ложных положительных результатов

Сценарий: Вы запустили A/B тест. Через 3 дня видите, что treatment лучше на 10%!

Без T-теста: "Отлично, внедрим!"

С T-тестом:

from scipy import stats

# Данные
control_conversions = 45  # из 1500
treatment_conversions = 52  # из 1500

n_control = 1500
n_treatment = 1500

p_control = control_conversions / n_control  # 0.03
p_treatment = treatment_conversions / n_treatment  # 0.0347

# T-тест для пропорций
from statsmodels.stats.proportion import proportions_ztest
t_stat, p_value = proportions_ztest(
    [treatment_conversions, control_conversions],
    [n_treatment, n_control]
)

print(f"Difference: {(p_treatment - p_control) * 100:.2f}%")
print(f"T-statistic: {t_stat:.3f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("✓ Статистически значимо")
else:
    print("✗ Может быть случайностью")

# Output: p-value = 0.423
# Вывод: эта 15% разница может быть полностью случайной!

Без T-теста вы бы внедрили версию, которая на самом деле не лучше.

3. Определение размера выборки

T-тест помогает рассчитать, сколько пользователей нужно, чтобы обнаружить эффект.

Вопрос: Я хочу найти эффект в 5%. Сколько пользователей мне нужно?

Ответ зависит от:

  • Уровня significance (α) — обычно 0.05
  • Желаемой мощности (power) — обычно 0.80
  • Ожидаемого effect size
  • Вариативности метрики

T-тест помогает все это рассчитать:

from statsmodels.stats.power import tt_solve_power

# Параметры
effect_size = 0.2  # Cohen's d (стандартизированный эффект)
alpha = 0.05
power = 0.80

# Решаем: какой размер выборки нужен?
required_n = tt_solve_power(
    effect_size=effect_size,
    nobs1=None,  # неизвестное
    alpha=alpha,
    power=power,
    ratio=1.0,  # равные группы
    alternative='two-sided'
)

print(f"Required sample size per group: {required_n:.0f}")
# Output: 393 per group

Без этого вы могли бы:

  • Запустить тест с 100 пользователей и не найти эффект
  • Или ждать месяц на 100,000, хотя 1000 было бы достаточно

4. Определение длительности теста

Т-тест показывает, как долго нужно ждать результата.

Пример:

  • Ваш трафик: 500 новых пользователей в день
  • Требуемый размер: 393 на группу
  • Минимальное время: 393 * 2 / 500 = 1.57 дня ≈ 2 дня

На практике: Нужно добавить 20% буфер для вариативности, так что 2-3 дня.

Без T-теста: Вы не знаете, когда остановить тест. Ждете 2 недели? Месяц?

5. Различие между типами тестов

T-тест существует в нескольких видах, и знание различий критично:

а) Independent samples T-test

Используется: При сравнении двух независимых групп (control vs treatment) Формула: Сравнивает средние значения двух групп

б) Paired T-test

Используется: Когда одни и те же пользователи тестируются дважды (до/после) Формула: Сравнивает разницы внутри пар

в) One-sample T-test

Используется: Когда сравниваем результат с ожиданием Пример: "Средний ARPU должен быть $50, а получился $48. Это значимо?)

Неправильный выбор теста приводит к неправильным выводам.

6. Понимание confidence intervals

T-тест не просто говорит "значимо" или "не значимо". Он дает доверительный интервал.

Пример:

Control: 3.0% конверсия (95% CI: [2.8%, 3.2%])
Treatment: 3.3% конверсия (95% CI: [3.0%, 3.6%])

Это означает:

  • Мы на 95% уверены, что истинное значение treatment находится между 3.0% и 3.6%
  • Интервалы частично пересекаются, но не полностью
  • Вероятность того, что treatment действительно лучше: ~85%

Без понимания интервалов вы бы видели только одну цифру (3.3%) и не знали неопределённость.

7. Защита от p-hacking

П-хакинг — это проблема, когда аналитик тестирует многие гипотезы до тех пор, пока не найдёт значимый результат (чистая удача).

Проблема: Если вы запустите 20 тестов и все отклоните на α=0.05, то примерно один из них будет ложный положительный результат просто по удаче.

T-тест помогает контролировать это:

  • Используя Bonferroni correction (делим α на количество тестов)
  • Или регулируя α заранее
  • Или используя Bayesian подход

Без этого компании часто внедряют изменения, которые на самом деле не работают.

8. Практический сценарий

История: Email маркетолог видит, что subject A имел open rate 20%, subject B имел 22%.

Без T-теста:

  • "B лучше на 10%! Используем B!"
  • Отправляет 1 млн писем с B
  • Открытия на самом деле 19.5% (хуже чем А)
  • Потеря revenue

С T-тестом:

# Данные
opens_A = 4000
total_A = 20000
opens_B = 4400
total_B = 20000

rate_A = opens_A / total_A  # 0.20
rate_B = opens_B / total_B  # 0.22

from statsmodels.stats.proportion import proportions_ztest
t_stat, p_value = proportions_ztest(
    [opens_A, opens_B],
    [total_A, total_B]
)

print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("✓ Разница статистически значима")
else:
    print("✗ Разница может быть случайностью")

# Output: p-value = 0.145
# Вывод: не факт, что B лучше. Нужен больший размер выборки.

Вывод: Подождали бы дополнительных 1 млн писем или выяснили, что разница случайна.

9. Разница между T-тестом и другими методами

МетодКогда использоватьПримеры
T-testСравнение двух групп (continuous)ARPU, время в приложении
Chi-square testСравнение двух групп (categorical)Конверсия, клики (как пропорции)
ANOVAСравнение 3+ группТестирование 3 вариантов дизайна
Mann-Whitney UНепараметрический t-тестКогда данные не нормальны

T-тест — это специалист по бинарным сравнениям, как конверсия в A/B тестах.

10. T-тест vs визуальное сравнение

Опасная ошибка: Положиться на визуальное сравнение графиков.

Контроль:   [===========================] 3.0%
Тритмент:   [================================] 3.3%

Визуально: "Тритмент явно лучше!"
Т-тест:    "p-value = 0.43, может быть случайностью"

Человеческий глаз обманывается масштабом и порядком. T-тест не может обмануться.

Практические выводы

  1. T-тест это необходимость в А/B тестировании, а не опция
  2. Без него вы будете принимать ложные решения в 5-20% случаев
  3. Это основа для расчёта размера выборки (сколько нужно пользователей)
  4. Это инструмент для контроля риска (false positives)
  5. Это позволяет быстро отклонить неработающие гипотезы (vs ждать месяц без результата)
  6. Это дает confidence intervals, которые показывают неопределённость

Итог

T-тест важен потому что:

  • Отличает сигнал от шума — главная работа статистика
  • Защищает компанию от ошибок — не внедрять бесполезные изменения
  • Оптимизирует дорогие ресурсы — зная точный размер выборки
  • Быстро даёт ответы — на основе наших критериев
  • Объективен — не зависит от мнения вице-президента

В world of data-driven decisions, T-тест — это ваша защита от случайности.

Почему важен T-тест? | PrepBro