“История одного обмана” или “Требования к распределению в t-тесте”
Почему все говорят, что для t-критерия нужны нормальные данные??
Последний год я прособеседовал несколько десятков аналитиков, и каждый раз при ответе на казалось бы простой вопрос я получал столько же простой, но неверный ответ.
Обычно я спрашивал примерно так: “В каких ситуациях (тип метрики, ее распределение) какой стат-тест будешь использовать?”.
Большинство аналитиков отвечало (спойлер: неправильно 😩): “В случае нормального распределения у метрики стоит использовать t-test, в обратном случае — тест Манна-Уитни (U-критерий)”.
Если зайти на википедию, то увидим что она также врет (по крайней мере на момент написания статьи). Игнорирование факта, что это ложь, может принести вред бизнесу — об этим ниже есть специальный раздел.
Почему же многие думают иначе?
Хороший вопрос: откуда пошло заблуждение про нормальность выборок? Я решил поизучать его 🕵🏻♂️. Например, если мы откроем на вики английскую версию статьи про t-критерий, то во втором абзаце увидим правильные слова (под статистикой там подразумевается среднее по выборке) ❤:
A t-test is the most commonly applied when the test statistic would follow a normal distribution if the value of a scaling term in the test statistic were known. When the scaling term is unknown and is replaced by an estimate based on the data, the test statistics (under certain conditions) follow a Student’s t distribution.
Обратимся к оригинальной статье Стьюдента. Госсет (реальное имя Стьюдента) говорит, что в экспериментах всегда 2 неизвестные сущности — форма распределения и ее параметры (например, среднее). На малых выборках форму распределения понять сложно, поэтому Студент предполагает что лучше считать его нормальным. При этом, он использует формулу для доверительного интервала выборочного среднего (ЦПТ), и не говорит, что выборка обязательно должна быть из нормального распределения. Доказательство текущего нестрогого вида ЦПТ (через теорему Леви) появилось уже позже, возможно именно поэтому в статье вообще говорится про нормальность выборок.
А вот статья про t-тест на русской википедии гласит, как показано слева (на момент написания статьи). Скорее всего, это неверный перевод с английской версии статьи — перепутали выборку и статистику. В тексте про критерий Уэлча (мы поговорим про него ниже) также допущена эта ошибка. BTW, в английской версии статьи про t-распределение (не про критерий) также допущена ошибка про нормальность данных. Источник номер раз — вики!
Карпов в своем курсе сказал, что в случае размера выборок меньше 30 данные должны быть нормальными. И, хотя при больших выборках сказано, что нормальность необязательна, а в блоке про ЦПТ отдельным шагом показано, что распределение может быть любым, все же это может быть источником №2. Но Карпову респект 💕.
На вполне достоверном сайте machinelearning.ru также неверно указано это требование (источник №3). Известный русско-язычный блог про R — источник №4.
Ну и конечно я не ожидал оплошностей от основателей ExpF 😭 (источник №5). В этой статье (на медиуме она кстати уже удалена), хотя посыл и выводы верные, есть следующие неточности:
- “Но мы не можем его использовать на изначальных данных. Ненормальное распределение даст большой дисбаланс в среднее и шум (дисперсия) сделает неточным результат применения критерия” — сам t-критерий устроен так, что всегда даст точный результат (FPR при верной H0), и уровень дисперсии может оказать влияние разве что на чувствительность.
- “данные далеки от нормального распределения, следовательно, посчитать на нем среднее значение проблемно — очень сильно влияет длинный хвост из значений” — это совсем непонятное выражение, т.к. среднее значение — это детерминированная функция, и длина хвоста на нее не влияет, тем более если форма распределения исторически одна и та же.
А что же тогда должно быть нормальным?
Чтобы ответить на этот вопрос, давай поймем, как вообще работает t-критерий (критерий Стьюдента).
Большинство стат-тестов работает так — рассчитывает по выборке статистику (в узком смысле статистика это любая функция, которая переводит выборку в скаляр, например: среднее, максимальный элемент или средне-квадратичная ошибка) и сравнивает его с табличными значениями. Чтобы определить стат-значимость, нужно заранее понимать форму распределения этой статистики и уметь считать для каждой точки этого распределения соотвествующий p-value (площадь под графиком от точки до конца распределения ко всей площади ).
В случае стандартного нормального распределения статистики (среднее 0, дисперсия 1): p-value = 0.05 при z-статистике равной 1.96. T-критерий назван так потому, что использует t-распределение статистики. Отличие от z-теста в том, что t-распределение принимает еще 1 параметр — степень свободы.
Откуда взялось t-распределение в задаче оценки А/В-тестов??
Допустим наша метрика — доход с пользователя за период. Нас, как бизнес, в основном интересует среднее (ARPU) значение этой метрики, потому что именно оно участвует в бизнес-моделях и юнит-экономике. Так вот, значения поюзерной метрики (user revenue в нашем случае) — это выборка, а ее среднее (ARPU) — это как раз статистика. Что мы можем сказать о распределении ARPU?
Доходы пользователей — случайные величины из одного и того же распределения, необязательно нормального. При условии, что пользователи независимы, существует центральная предельная теорема, говорящая нам о том, что среднее значение метрики по достаточно большой выборке пользователей будет иметь нормальное распределение. Именно это и использует z-критерий (сравнивая значения z-оценки с точками на этом распределении), и именно распределение средних и должно быть нормальным для t-теста. Это важный результат, который стоит помнить:
Никакого условия на распределение самой метрики в ЦПТ нет, поэтому не стоит требовать нормальность от для входные данных z- и t-тестов.
Как теперь свести полученный результат к t-критерию? В z-статистике в знаменателе используется стандартная ошибка среднего, рассчитанная через стандартное отклонение генеральной совокупности, которое мы на самом деле не знаем. Однако, мы можем оценить его по выборке через среднеквадратичное отклонение. Распределение полученной статистики и является распределением Стьюдента (об этом рассказывал еще Карпов в своем курсе статистики). В целом, оно очень похоже на нормальное распределение, но с чуть более широкими хвостами (увеличение дисперсии как раз объясняется тем, что вместо известного параметры мы подставляем его выборочную оценку).
Как проверить, что мое распределение удовлетворяет требованиям
Как мы уже выяснили, нормальным должно быть распределение среднего значения метрики в группе. Стоп-стоп, что❓❓ Среднее это же одно число, какое распределение❗❓
Да, среднее — это случайная величина, посчитанная лишь по выборке от всех возможных пользователей. Если через какое-то время взять другую выборку (новые пользователи), или даже для тех же пользователей посчитать среднее еще раз, оно окажется отличным. Каждый раз оно семплируется из неизвестного распределения, и мы лишь делаем догадки о его форме в случае ЦПТ (и t-теста). Если мы не знаем, можем ли считать его нормальным, то можем оценить это по одной нашей выборке, превратив ее во много выборок и посчитав среднее для всех. Так мы получим распределение, предполагая, что оно примерное совпадает с распределением среднего генеральной совокупности. Этот метод и называется бутстрап, код для него слева в gist’е.
Вопрос, который может возникнуть — а как такое может быть, ведь согласно ЦПТ распределение должно стремиться к нормальному? На самом деле существует много факторов, благодаря которым такое может случиться, но два из них основные. Во-первых, ЦПТ требует чтобы все значения в выборке были i.i.d., т.е. одинаковы и независимо распределены. В случае сетевого эффекта, наши юниты (например пользователи) будут влиять друг на друга, соответственно предположения будут нарушены.
Во-вторых, ЦПТ это асимптотический метод, для формального равенства требуется бесконечно большая выборка, чего не встретишь в реальных задачах. Поэтому такая проблема может воспроизвестись на малых выборках (видимо именно это имел ввиду Карпов). Кстати, в той же статье Госсет поднимал вопрос о границах малой и большой выборок, чтобы считать среднее нормально распределенным.
Самое интересное в статье — это размеры выборок. Он брал 3000 измерений пальцев преступников. Далее делил их на 750 выборок по 4 элемента, внутри каждой выборки считал среднее и смотрел, как эти 750 значений распределены вокруг реального среднего (по всем 3000 измерениям). Нет, тут нет опечатки. Он правда использовал выборки по четыре юнита. Даже на таких выборках можно работать с t-критерием!
Важно найти, на каком размере выборок именно в твоих задачах и метриках распределение выборочного среднего становится похожим на нормальное. Скорость схождения к нормальному распределению описывается через неравенство Берри — Эссеена (расстояние убывает обратно-пропорционально корню из размера выборки). Так что если выборка не удовлетворяет требованиям t-теста и хочется увеличить ее размер, лучше сразу делать это на пару порядков.
Вред бизнесу 📉, или чем плохо U-критерий
Тест Манна-Уитни учит делать тот же Карпов. И в статье на вики про t-тест написано следующее: “При несоблюдении этих условий [нормальность выборок] при сравнении выборочных средних должны использоваться аналогичные методы непараметрической статистики, среди которых наиболее известными являются U-критерий Манна — Уитни” .
Давай подробнее разберем, почему я считаю его почти неприменимым (точнее применимым лишь для небольшого типа задач). Во-первых, если ты хочешь один тест на все случаи в жизни, тебе стоит знать что на тех же нормальных данных он менее мощный чем t-критерий (правда несильно, на 5%). Это грозит бизнесу найти меньше возможностей.
Во-вторых, сам тест не всегда робастен и точен относительно p-value (ошибки первого рода). Если распределение состоит из большого количества повторяющихся значений (и еще во многих кейсах), то это критерий сходит с ума и выдает весьма странные результаты.
В-третьих, есть важный момент, который кстати указали в своей статье ExpF (и Карпов на Матемаркетинге — выбросы могут быт неслучайны (это можно проверить на исторических данных), и в таком случае удалять их нельзя! Если удалить, можно посчитать положительным тест с отрицательным в реальности эффектом на средний чек. Например, предположим что у нас половина клиентов нам не платят, а верхний персентиль имеет средний чек в несколько миллионов. Если в таргетной группе мы сменим нижняя половина начнет нам приносить по 1 рубля, а в верхнем персентиле AOV упадет в несколько раз, то скорее всего средний доход упадет. При этом, при удалении верхнего персентиля как выбросы, мы получим положительный эффект в тесте.
Ну и главное — как объяснить бизнесу результаты критерия? Он сравнивает то, что сравнивает. Т.е. не среднее и не медиану, как многие думают, а ранги в объединенной выборке. Можно придумать примеры, когда эти ранги могут быть разнонаправленными со средними значениями. Какой в таком случае репортить аплифт? Это же касается и любых трансформаций данных, таких как логарифмирование, Бокс-Кокс и тд.
Кстати, многие используют непараметрические критерии в анализе, при этом считают sample size/MDE/мощность через формулу для t-теста. Так конечно же делать нельзя, ведь считать данные величины нужно способом, соответствующим используемому при анализе методу расчета значимости. Например, можно использовать бутстрап из библиотеки от facebook.
Другие вопросы касательно t-теста
В отличие от нормальности выборок, у t-критерия есть гораздо более важные требования к распределениям. Например, неравенство дисперсий в двух выборках (несоблюдения гомогенности). Давай наглядно продемонстрирую тебе.
Для одной выборки t-критерий выглядит так, как показано на картинке в первой формуле. На самом деле это не совсем t-распределение, поскольку в классическом варианте оно обязует и числитель, и каждый член суммы в знаменателе (дисперсия — это сумма) иметь стандартное нормально распределение N(0,1). Чтобы его получить, во второй формуле мы делим и числитель, и знаменатель на фактор масштаба (обрати внимание, в нем используется неизвестный параметр дисперсии генеральной совокупности, а не выборочное SE, но это не важно).
Теперь рассмотрим кейс сравнения средних двух выборок. В общем случае после деления на фактор масштаба каждое из слагаемых в среднеквадратичном отклонении не стандартизируется, соотвественно распределение знаменателя уже не Хи-квадрат. И если в случае равных размеров выборки мы можем использовать pooled variance объединенной выборки (тем самым свести это к кейсу одной выборки), то при неравных дисперсиях и размеров выборки мы получаем проблему Беренца-Фишера, которая до недавнего времени считалась нерешаемой в строгом виде. Потом решение нашли, но оно малопопулярное и сложное и все используют способ, описанный ниже.
Стандартом для таких кейсов является тест Уэлча (на картинке слева), идея которого проста — дисперсия разницы равна сумме дисперсий. А вот степень свободы для такого теста называет pooled sample size и считается (найдешь по ссылке выше) по сложной формуле , о которой стоит знать следующее — она возвращает нецелую cлучайную величину, к чему t-распределение конечно не готово. Но все же, тест Уэлча отдает вполне релевантные результаты, и можно по дефолту использовать его в независимости от размеров выборок и дисперсий (это лучше, чем вначале делать тест на гомогенность для выборка между критериями Сьюдента и Уэлча). К сожалению, иногда этот тест сильно неточен, особенно если большая по размеру выборка имеет меньшую дисперсию.
Надеюсь, ты и так это знаешь, но в зависимых выборках используется другая дисперсия (разностей для каждой пары).
Требования к распределениям в других тестах
На самом деле, в отличии от Стъюдента, некоторые статистические тесты действительно требуют нормальное распределение данных. Например, в проверке гомогенности дисперсий, которую упоминал в прошлом разделе📊. Используемый тут и в регрессиях F-тест требует нормальности. Как и t-тест, он также имеет непараметрические альтернативы (тест Левена и тест Бартлетта), которые также имеют свои недостатки. Требующая нормальности выборок ANOVA не так чувствительна к нарушению этого правила, но все же имеет слегка завышенный FPR в этом случае.
Как ты уже понял, существует правило ✍️: если распределение удовлетворяет условиям наиболее строгих параметрических тестов (кстати обычно они самые простые в вычислении и интерпретации), то лучше использовать именно их.
А требуется ли нормальность данных для регрессии?
Регрессия требует нормальности лишь для остатков, а это может выполняться при любом распределении зависимых и независимых переменных (более того, форма распределения никак не влияет на нормальность остатков) при условии выполнения других пунктов из теоремы Гаусса-Маркова. Проще можно объяснить это условие так — Y должен быть нормальным на каждом уровне X.
А вот дов-интервалы и стат-значимости коэффициентов регрессии можно посчитать только при нормальных выборках (об этом будет отдельная статья).
Напоследок, держи эту статью. И до скорых (возможно очень) встреч!
P.S.: Если тебе понравилась стать, в качестве благодарности можешь купить мне кофе на https://www.donationalerts.com/r/stats_data_ninja или https://buymeacoffee.com/koch.