Что такое t-тест простыми словами

Что такое t-тест

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

Используется в A/B-тестах, когда нужно сравнить средний чек, время на сайте, конверсию.

Интуиция

У вас две группы: контроль и тест. Вы видите:

  • Среднее A: 1000₽.
  • Среднее B: 1050₽.

Вопрос: реально ли B лучше, или просто выборка такая случайная?

T-test даёт p-value — вероятность такого или большего отличия при условии, что реальной разницы нет. Если p < 0.05 — разница значима.

Виды t-теста

1. One-sample (одновыборочный)

Сравниваем среднее выборки с заданным числом.

from scipy import stats

# Является ли средний чек 1000?
t, p = stats.ttest_1samp(amounts, popmean=1000)

2. Two-sample independent (двухвыборочный независимый)

Сравниваем средние двух независимых групп. Классический A/B.

# Контроль и тест
t, p = stats.ttest_ind(control, treatment, equal_var=False)
# equal_var=False — Welch's t-test (не требует равных дисперсий)

3. Paired (парный)

Те же пользователи в двух состояниях (до / после).

# Результаты теста до обучения и после
t, p = stats.ttest_rel(before, after)

Когда использовать

Хорошо подходит

  • Две независимые группы пользователей.
  • Метрика — среднее (чек, время, количество событий).
  • Большая выборка (n > 30).
  • Распределения примерно нормальные (или ЦПТ срабатывает).

Плохо подходит

  • Бинарные метрики (конверсия) — для них лучше z-test пропорций.
  • Очень скошенные данные с тяжёлыми хвостами — Mann-Whitney U.
  • Маленькие выборки с не-нормальным распределением.

Попробовать силы на подобных вопросах проще всего в тренажёре Карьерник — прямо в Telegram, без регистрации через сайт.

Формула (не учить)

t = (mean_A - mean_B) / SE

где SE — стандартная ошибка разности средних.

На практике считаете через scipy, не руками.

T-test vs Z-test

  • T-test — когда дисперсия выборки неизвестна и оценивается из самих данных.
  • Z-test — когда дисперсия известна заранее или выборка очень большая.

В продуктовой аналитике почти всегда используют t-test. Z-test — редкое (обычно только для пропорций).

Подробнее.

T-test vs Mann-Whitney

  • T-test — параметрический (предполагает нормальное распределение).
  • Mann-Whitney — непараметрический, робастный к выбросам.

Для LTV, revenue, session length с тяжёлыми хвостами — часто Mann-Whitney лучше.

Подробнее.

Пример в Python

import numpy as np
from scipy import stats

# Симулируем A/B-тест
np.random.seed(42)
control = np.random.normal(loc=100, scale=30, size=1000)
treatment = np.random.normal(loc=103, scale=30, size=1000)

t_stat, p_value = stats.ttest_ind(control, treatment, equal_var=False)
print(f't-statistic: {t_stat:.3f}, p-value: {p_value:.4f}')
# t-statistic: -2.241, p-value: 0.0251
# p < 0.05 → разница значима

Интерпретация p-value

p = 0.001  → значимо, разница очень уверенная
p = 0.04   → значимо по стандарту α=0.05
p = 0.06   → почти значимо, но формально нет
p = 0.20   → не значимо

НЕ «p — это вероятность, что разница случайна».

ЕСТЬ «p — вероятность получить такое или большее различие, если бы разницы на самом деле не было».

Подробнее про p-value.

Пройти 30–50 задач по теме за вечер можно в Telegram-тренажёре. Это то, что отличает «знаю» от «уверенно отвечу на собесе».

Ограничения

1. Размер выборки

Маленькая выборка → тест может не задетектировать реальный эффект (низкая мощность).

2. Нормальность

На малых выборках (n < 30) без нормальности t-test может давать неправильный результат.

3. Выбросы

Один гигантский чек в 100x от медианы ломает t-test. Используйте trimming или Mann-Whitney.

4. Множественные сравнения

Если делаете 20 t-тестов — один случайно окажется «значимым». Поправка Бонферрони: α / количество тестов.

На собеседовании

Вопросы, которые могут задать:

  • «Когда t-test, а когда Mann-Whitney?»
  • «Чем отличается от z-test?»
  • «Как интерпретировать p-value?»
  • «Что такое мощность теста?»
  • «Зачем Welch's t-test?» (не требует равных дисперсий).

Читайте также

FAQ

Welch's t-test vs Student's t-test?

Welch's не требует равных дисперсий. Используйте его по умолчанию (equal_var=False). Student's — только если дисперсии точно равны.

Сколько должна быть выборка?

Для нормальных данных — n > 30 на группу. Для ненормальных — n > 100.

Что делать, если распределение не нормальное?

  1. Трансформировать (log).
  2. Использовать Mann-Whitney.
  3. Увеличить выборку (ЦПТ сработает).

T-test всегда симметричный?

Двусторонний t-test (scipy по умолчанию) — да. Есть и односторонний (one-tailed), если гипотеза направленная.