Всем привет! Меня зовут Мария Ходякова, я продуктовый аналитик Тинькофф Страхования. В этой статье мы поговорим о множественном тестировании. Хорошо известен такой подход, как А/В-тестирование, когда в тесте участвуют две выборки. Но иногда нужно сравнить больше двух выборок и определить статистически значимо лучшую. Например, найти среди пяти баннеров в приложении лучший по конверсии продаж. Именно для этого и нужно множественное тестирование.
Статья имеет следующую структуру. Сначала описывается математическая постановка задачи и наиболее простой путь ее решения. Далее мы переходим к тому, как можно решить данную задачу более хитрым способом, существенно сократив размер данных, необходимых для тестирования.
В конце статьи также приводится библиотека с функциями для множественного тестирования по описанному алгоритму, реализованному на языке Python.
Длительность теста и постановка задачи
На идейном уровне множественное тестирование отличается от А/В только количеством выборок. Существенные различия скрываются на статистическом уровне. До начала теста нужно определить статистический критерий и минимальный размер выборки для получения стат. значимого результата. Минимальный размер считается по
уровню значимости и мощности — обычно и соответственно;
минимальному детектируемому эффекту MDE, или минимальному отклонению, которое хотим зафиксировать для метрики на выборках;
теоретической оценке дисперсии метрики, которая вычисляется по историческим данным;
отношению размеров выборок друг к другу.
При А/В-тесте этап определения критерия и выбора минимального размера не сильно чувствуется, поскольку создано много калькуляторов. Нам только нужно указать соответствующие параметры для нашего теста.
При множественном тестировании этап определения критерия и выбора минимального размера самый сложный. Если об этом совсем не подумать, может быть повышена вероятность ошибки. Если вникнуть, размер выборки может стать заоблачным, что отрицательно повлияет на длительность теста.
Разберемся с вычислением минимального размера выборки и возможными критериями для множественного тестирования как с идейной, так и с математической стороны.
Статистическая постановка задачи: определить лучшую из выборок по целевой метрике (к примеру, конверсии). Здесь под лучшей выборкой понимается та, что дает наибольшее среднее значение целевой метрики. Сформулируем задачу статистически в случае выборок равного размера.
Пусть где — множество возможных распределений. К примеру, в случае теста конверсий есть множество распределений Бернулли с различными параметрами. Пусть — математическое ожидание, или среднее значение,— дисперсия . Предположим, что случайные величины независимы в совокупности.
Тест, основанный на попарных сравнениях
Мы проверяем нулевую гипотезу против гипотез вида
То есть утверждает невыполнение остальных гипотез.
Так, если на -й выборке будет статистически наибольшее среднее значение целевой метрики, то мы примем гипотезу . Иначе будет принята гипотеза . В примере с баннерами гипотеза означает, что -й баннер имеет наибольшую конверсию продажи, — все баннеры дают одинаковую конверсию продажи.
Отметим, что при получаем следующие классические гипотезы:
где предполагает равенство средних значений целевой метрики на обеих выборках, и — преобладание целевой метрики на первой и второй выборках соответственно.
Один из вариантов определения лучшей выборки — сравнение выборок попарно. То есть мы проводим А/В-тестов. К примеру, при нужно провести сравнений. Кажется, выглядит пугающе. Выясним, даст ли это желаемый результат.
Размер одной выборки и построение критерия. Пусть заданы — уровень значимости и вероятность ошибки второго рода соответственно, — MDE. Выберем для случая двух выборок с односторонней проверкой гипотезы по формуле:
где — -квантиль стандартного нормального распределения, уровень значимости вероятность ошибки второго рода минимальный детектируемый эффект . Тогда — минимальный размер выборки для каждой из вариаций.
Доказательство
Критерий где будет сопоставлять верную гипотезу, то есть .
Составим односторонние гипотезы и . Будем предполагать, что для проверки односторонних гипотез используется такая статистика что в случае она принимает большие по модулю положительные значения, в случае она принимает большие по модулю отрицательные значения.
Положим
где — число, которое мы выберем по уровню значимости позднее, — -квантиль предельного распределения статистики при гипотезе . Если мы проверяем против или вероятность ошибки первого рода такого критерия будет равна причем в случае ненулевой гипотезы мы можем утверждать стат. значимо об отличии от в одну или другую сторону.
Логично положить если
то есть имеет место событие . При этом события не пересекаются. Если ни для какого условие не выполнено, полагаем .
Можно посчитать вероятность ошибки первого рода критерия
Для подсчета размера выборки нужно зафиксировать MDE, равное , и вероятность ошибки второго рода, равную . Пусть размер выборки в каждой группе, был выбран так, чтобы вероятность ошибки второго рода при проверке против или была равна . Вообще говоря, может зависеть от и поэтому мы выберем максимальный из всех комбинаций. Рассмотрим . Тогда
Таким образом, выбрав так, чтобы при проверке против или вероятность ошибок первого и второго рода не превосходила соответственно и мы сможем стат. значимо обнаружить отклонение максимума порядка с вероятностью ошибок первого и второго рода, не превосходящей и соответственно.
Что и требовалось доказать.
При множественном тестировании выборок с уровнем значимости и вероятностью ошибки второго рода сравнивая попарно выборки, мы проводим А/В-тестов с уровнем значимости и вероятностью ошибки второго рода . Если некоторая -я выборка стат. значимо лучше каждой другой выборки, принимается гипотеза где иначе принимается гипотеза . Математически критерий теста описан в доказательстве.
Выбранное решение не самое простое. Без каких-либо доказательств мы могли прийти к тому, что можно провести попарных сравнений с уровнем значимости и вероятностью ошибки второго рода .
Моделирование. Мы провели математический разбор критерия, основанного на попарных сравнениях, который будем называть простым решением. Но что это даст на практике? Чтобы с этим разобраться, обратимся к моделированию.
Мы не хотим ошибаться слишком часто, следовательно, мы будем контролировать вероятность ошибки первого рода, то есть вероятность отклонить нулевую гипотезу при ее справедливости. Величина эта теоретическая, поэтому мы промоделируем частоту неверного отклонения нулевой гипотезы, близкую к истинной вероятности ошибки первого рода при достаточном количестве моделирований. Для примера используем распределение Бернулли, как в случае с тестом конверсии.
Возникает вопрос: на что влияет наша чрезмерная осторожность? Посмотрим на минимальный размер одной выборки в зависимости от количества выборок.
Решение нас не устраивает, поэтому углубимся в теорию и придумаем другое.
Тест, основанный на предельном сравнении
Мы проверяем гипотезу
против гипотез вида
Отметим, что гипотезы в совокупности не дают все возможные события. К примеру, не рассматриваются события, что существуют такие что и все средние не равны.
Снова прокомментируем это на примере с баннерами. Гипотеза означает, что -й баннер дает наибольшую конверсию продажи и она больше конверсии на других баннерах, — все баннеры дают одинаковую конверсию продажи. Но возможен случай, что есть два баннера, которые дают одинаковую конверсию продажи и их конверсия максимальна. Принятие нулевой гипотезы означает не ее верность, неверность остальных гипотез.
Размер одной выборки и построение критерия. Пусть выборки имеют одинаковый размер, заданы уровень значимости вероятность ошибки второго рода и минимальное отклонение . Тогда в общем случае для получения минимального размера выборки можно использовать метод Монте-Карло для моделирования квантилей распределений случайных величин
где — независимые случайные величины со стандартным нормальным распределением.
Для снижения вычислительной сложности алгоритма выделим частный случай равных дисперсий при нулевой гипотезе на всех выборках, который наиболее часто встречается на практике (к примеру, тест конверсии). При размер выборки определяется равенством
где — -квантиль распределения случайной величины
Доказательство
Пусть критерий где будет сопоставляться набору выборок номер гипотезы следующим образом. Если верна гипотеза . Если ни одна из гипотез не верна.
Составим односторонние гипотезы и . Будем предполагать, что для проверки односторонних гипотез используется такая статистика что в случае она принимает большие по модулю положительные значения, в случае она принимает большие по модулю отрицательные значения.
Положим
где — число, которое мы выберем по уровню значимости позднее, — -квантиль предельного распределения статистики при гипотезе . Если мы проверяем против или вероятность ошибки первого рода такого критерия будет равна причем в случае ненулевой гипотезы мы можем утверждать стат. значимо об отличии от в одну или другую сторону.
Логично положить если
Если — статистика критерия -теста и размеры выборок совпадают, то
Можно доказать, что при нулевой гипотезе и неизвестных дисперсиях существует предельное распределение
где независимы и имеют стандартное нормальное распределение. Стоит отметить, что величины под минимумом зависимы — везде присутствует . Но предельное распределение зависит только от дисперсий.
Критическое множество будет иметь вид
Константу для каждого можно выбрать с помощью Монте-Карло для заданного так, чтобы
Будем считать, что при гипотезе при различных вероятность ошибки первого рода будет одна и та же.
Чтобы посчитать размер выборки нужно зафиксировать отклонение и вероятность ошибки второго рода . Рассмотрим. Тогда
где
Дальше можно моделировать для разных желаемое и по виду кривой понять, какой стоит выбрать для каждого . Положим:
Отдельно рассмотрим случай равных дисперсий при нулевой гипотезе, поскольку нередко при проведении тестов при предполагаются равные дисперсии . Получаем, что предельное распределение имеет вид
где сходимость подразумевается по распределению. При нулевой гипотезе в пределе имеют некоторое одинаковое распределение и нужно определить только одну константу для критического множества которая является -квантилем распределения . Обозначим .
Определять размер выборки будем аналогично. В силу того, что мы знаем распределение при гипотезе верно равенство
Следовательно, верно
где — -квантиль распределения . Таким образом, мы получаем явное выражение для
Что и требовалось доказать.
Мы пришли к тому, что при множественном тестировании выборок можно рассматривать пределы используемых в критерии статистик при достаточно большом размере одной выборки. Это возможно, поскольку для теста требуется много независимых экспериментов. Так, если некоторая -я выборка стат. значимо лучше каждой другой выборки, принимается гипотеза где иначе принимается гипотеза . Математически критерий теста описан в доказательстве.
Моделирование. Мы провели математический разбор критерия, основанного на предельном распределении, который будем называть оптимальным решением. И снова возникает вопрос: решает ли этот метод проблемы, возникшие при попарном сравнении выборок?
Промоделируем частоту неверного отклонения нулевой гипотезы для предыдущего примера для распределения Бернулли.
Мы добились того, чего хотели. Посмотрим, как это влияет на минимальный размер одной выборки.
Например, мы решили провести тест десяти выборок, выбрав конверсию целевой метрикой. Тогда при использовании оптимального решения тест займет в три раза меньше времени, чем при использовании простого решения.
Как пользоваться методом, основанным на предельном распределении
Чтобы каждый раз не писать код, мы с коллегами из Сбера оформили инструмент для использования метода, основанного на предельном распределении. Мы создали функции критерия, минимального размера выборки и квантиля предельного распределения в библиотеке HypEx для Python.
Пример кода:
import hypex.abn_test as criteria
alpha = 0.05 # Уровень значимости
beta = 0.2 # Вероятность ошибки II рода
sample_count = 10 # Количество выборок
d = 0.02 # MDE
# Считаем минимальный размер выборки
n = criteria.min_sample_size(number_of_samples=sample_cont,
minimum_detectable_effect=d,
variances=hist_var, # Оценка дисперсии по историческим данным
significance_level=alpha,
power_level=beta,
equal_variance=True)
# Номер принятой гипотезы
res = test_on_marginal_distribution(sample_list, # Массив выборок
significance_level=alpha)
Перейдя по ссылкам, можно посмотреть
Заключение
Мы построили метод множественного тестирования, который позволяет нам ошибаться ровно с той вероятностью, которую мы закладываем. А еще создали инструмент для реализации теста. Построенный метод дает нам возможность не увеличивать размер одной выборки и проводить множественное тестирование быстрее в несколько раз.
Надеюсь, эта статья будет вам полезна на практике. Если есть вопросы, оставляйте их в комментариях.