T-tests на собеседовании Data Scientist
Содержание:
Зачем t-test спрашивают
T-test — базовый инструмент проверки гипотез о средних, и на собесе DS его спрашивают почти всегда, когда речь заходит про A/B-тесты. Логика простая: если в вакансии есть эксперименты, значит вам нужно уметь ответить, отличается ли среднее в тесте от контроля не случайно. T-test как раз про это.
Интервьюер проверяет не столько формулу, сколько понимание, какой вариант теста применить и какие у него предпосылки. Ниже — четыре формы t-теста, их предпосылки и типичные ошибки, на которых заваливаются кандидаты.
Одновыборочный t-test
Сравнивает среднее выборки с известным заранее значением μ₀ (например, «средний чек стал отличаться от прошлогодних 1500 рублей?»).
H0: μ = μ₀ (среднее равно эталонному значению)
H1: μ ≠ μ₀ (среднее отличается)
t = (x̄ - μ₀) / (s / √n)В числителе — отклонение выборочного среднего от эталона, в знаменателе — стандартная ошибка среднего. Чем больше отклонение и чем меньше разброс, тем больше t по модулю. Если p-value меньше выбранного уровня значимости (обычно 0.05), нулевую гипотезу отклоняют: различие статистически значимо.
Двухвыборочный t-test
Сравнивает средние двух групп — это и есть классический A/B: контроль против теста.
H0: μ_A = μ_B (средние групп равны)
H1: μ_A ≠ μ_B (средние различаются)
t = (x̄_A - x̄_B) / SEСтандартная ошибка (SE) в знаменателе считается по-разному в зависимости от того, предполагаем ли мы равенство дисперсий в группах. Если дисперсии считаем равными — используют объединённую (pooled) оценку дисперсии; если нет — раздельную (unpooled), и тогда это уже Welch's t-test (см. ниже). На практике равенство дисперсий выполняется редко, поэтому дефолтным выбором чаще идёт именно вариант Уэлча.
Парный t-test
Применяется, когда наблюдения связаны попарно: одни и те же объекты «до и после» или сопоставленные пары (matched subjects). Например, метрика у одних и тех же пользователей до и после изменения.
diff = X_after - X_before (разности внутри пар)
t = mean(diff) / (sd(diff) / √n) (одновыборочный тест на разностях)По сути это одновыборочный t-test на разностях с проверкой, что средняя разность равна нулю. Ключевая выгода: связывание пар убирает межобъектный разброс (одни люди в среднем тратят больше, другие меньше), поэтому шума меньше, а мощность выше, чем у двухвыборочного теста на тех же данных. На собесе частый вопрос — «когда парный, а когда двухвыборочный?»: парный только если наблюдения действительно связаны попарно, иначе нельзя.
Welch's t-test
Двухвыборочный тест без предположения о равенстве дисперсий. Его берут, когда дисперсии групп различаются (а на практике они почти всегда различаются).
t = (x̄_A - x̄_B) / √(s²_A/n_A + s²_B/n_B)В коде это scipy.stats.ttest_ind(a, b, equal_var=False). Уэлч не объединяет дисперсии, а учитывает разброс каждой группы отдельно и корректирует число степеней свободы. Современная рекомендация по умолчанию — использовать именно Welch's t-test: он устойчивее (robust) к неравенству дисперсий и почти не проигрывает обычному тесту, когда дисперсии всё же равны. Хороший ответ на собесе: «беру Уэлча по умолчанию, потому что равенство дисперсий редко выполняется, а рисковать ложным результатом не хочется».
Предпосылки
T-test корректен, когда выполняются три предпосылки:
- Нормальность. Строго — выборочное среднее распределено нормально. При большом n это выполняется автоматически по центральной предельной теореме (CLT), даже если сами данные не нормальны. На маленьких выборках нормальность данных важнее.
- Независимость. Наблюдения независимы друг от друга. Нарушается, например, если один пользователь попал в выборку несколько раз или если есть кластеризация по устройствам/сессиям.
- Равенство дисперсий. Нужно только для классического (pooled) двухвыборочного теста. Welch's t-test этой предпосылки не требует.
Что делать, если предпосылки нарушены:
- Тяжёлые хвосты и выбросы → непараметрический тест Манна — Уитни (Mann-Whitney U), который сравнивает ранги, а не средние.
- Категориальные или бинарные данные (конверсия, доля) → тест на пропорции или хи-квадрат, а не t-test по средним.
- Маленькая выборка и ненормальность → бутстрап-доверительный интервал вместо аналитической формулы.
Частые ошибки
- Брать t-test для конверсии. Конверсия — это доля (бинарный исход), для неё нужен тест на пропорции или хи-квадрат, а не t-test по средним. Частая ловушка на собесе.
- Игнорировать неравенство дисперсий. Использовать pooled-вариант, когда дисперсии групп явно разные, — риск неверного результата. Дефолт — Welch's.
- Путать парный и двухвыборочный. Применять парный тест к несвязанным группам (или наоборот) — грубая ошибка. Парный только для реально связанных пар.
- Не проверять нормальность на малых n. На маленькой выборке CLT ещё не спасает, и на тяжёлых хвостах t-test даёт неверный p-value — тут нужен непараметрический тест или бутстрап.
- Множественные сравнения. Гонять t-test по десятку метрик и радоваться первому p < 0.05 без поправки (Бонферрони, FDR) — так ложноположительные результаты неизбежны.
Связанные темы
- Confidence intervals для DS
- A/B testing fundamentals
- Causal inference для DS
- Bayesian методы для DS
- Подготовка к собесу Data Scientist
FAQ
Когда брать Welch's, а когда обычный двухвыборочный t-test?
По умолчанию берите Welch's: он не требует равенства дисперсий и устойчив, когда группы разного размера или разброса. Классический pooled-вариант оправдан, только если вы уверены в равенстве дисперсий, — но на реальных данных это выполняется редко, поэтому Уэлч безопаснее.
Чем парный t-test отличается от двухвыборочного?
Парный применяют к связанным наблюдениям (одни и те же объекты до/после или сопоставленные пары), и он работает с разностями внутри пар. Двухвыборочный — к независимым группам. Связывание пар убирает межобъектный разброс, поэтому у парного теста выше мощность, но использовать его можно только когда пары действительно есть.
Что делать, если данные не нормальны?
При большом n беспокоиться обычно не о чем: по CLT среднее распределено нормально, и t-test работает. На малых выборках с тяжёлыми хвостами переходят к тесту Манна — Уитни (сравнивает ранги) или к бутстрап-доверительному интервалу. Для долей и бинарных исходов t-test вообще не подходит — нужен тест на пропорции.
Можно ли t-test использовать для конверсии в A/B-тесте?
Нет, это частая ошибка. Конверсия — бинарная метрика (купил / не купил), и корректно сравнивать доли через z-тест на пропорции или хи-квадрат. T-test предназначен для средних непрерывных величин, например среднего чека или времени на сайте.
В чём разница между односторонним и двусторонним тестом?
Двусторонний проверяет гипотезу «средние различаются» в любую сторону (H1: μ_A ≠ μ_B), односторонний — только в одну («тест лучше контроля», H1: μ_A > μ_B). Односторонний мощнее при том же уровне значимости, но применять его можно, только если направление эффекта задано заранее по бизнес-логике, а не подобрано под данные. В A/B по умолчанию берут двусторонний.
Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.