TGViewer
Я твой продукт анализировал Я твой продукт анализировал @datadeepdive · 1.68K subscribers
Post #52 635
📌 4. T-тест. Проверка дисперсий

С теорией разобрались, едем дальше.

Для расчёта АБ существует много методов. Мы рассмотрим самые популярные, которые чаще других применяются на практике. И начнём, конечно, с T-теста Стьюдента / Уэлча.

‼️ Кстати, тоже частая тема на собесах.

Нулевая гипотеза Т-теста предполагает, что средние значения переменной в выборках равны. Отклонение гипотезы (p-value < 0.05) это наша желаемая цель.


Я часто подхожу к расчётам через T-тест. Он простой и довольно точный. Из минусов — имеет пару ограничений (но и инструменты для их обхода).

Первое ограничение подразумевает, что дисперсии в выборках должны быть гомогенны, т.е. равны.

Для проверки дисперсий обычно используют какой-то из критериев:

✅ Бартлетта. Он чувствителен к нормальности распределения;

✅ Левена. Менее чувствителен к нормальности, самый популярный тест;

✅ Флигнера-Килина. Не чувствителен к отклонениям от нормальности и выбросам, подходит для ненормального распределения;

Нулевые гипотезы всех критериев похожи, они предполагают, что дисперсии в выборках равны. Т.е. нам эту гипотезу отклонять не хочется (цель p-value > 0.05).


Но вне зависимости от результатов, мы можем обойти это ограничение. Оно присутствует у Стьюдента, но его нет у Уэлча. Т.е. технически, нам всё равно какая там дисперсия получится 🙂

В коде далее df — датасет, metric — метрика, столбец который проверяем, var — категория варианта.

Проверка дисперсий в R и Python:
library(car) # библиотека с тестом Левена

bartlett.test(metric ~ var, df) # тест Бартлетта
leveneTest(metric ~ var, df) # тест Левена
fligner.test(metric ~ var, df) # тест Флигнера-Килина


from scipy.stats import bartlett, fligner, levene

# тест Бартлетта
bartlett_result = bartlett(df[df['var'] == 'A']['metric'], df[df['var'] == 'B']['metric']).pvalue

# тест Левена
levene_result = levene(df[df['var'] == 'A']['metric'], df[df['var'] == 'B']['metric']).pvalue

# тест Флигнера-Килина
fligner_result = fligner(df[df['var'] == 'A']['metric'], df[df['var'] == 'B']['metric']).pvalue


#ABtest
  • 👍 14
  • ❤ 4
More from @datadeepdive
  1. Jul 28, 2026📌 4/4, Бизнес уровень. Пожалуй самый сложный, и самый простой уровень одновременно. Понят…
  2. Jul 28, 2026Сори, отвлёкся 😀 📌 3/4, Продуктовый уровень. Этот раздел ставит перед собой почти филосо…
  3. May 31, 2026📌 2/4, Операционный уровень. Эта часть про то, насколько оптимально расходуются ресурсы.…
  4. May 31, 2026📌 Про оценку направления экспериментов, 1/4 Я как-то недавно выступал на одной конфе, рас…
  5. May 26, 2026А вот маленький демо датасет, если захочется глянуть как оно всё работает
  6. May 26, 2026Прикрутили типизацию аккаунтов, теперь в соло можно пользоваться без всяких ключей, с огра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →