Когда прекратить байесовский тест А / Б?


10

Я пытаюсь провести A / B-тестирование байесовским способом, как в вероятностном программировании для хакеров и байесовских A / B-тестов . В обеих статьях предполагается, что лицо, принимающее решение, решает, какой из вариантов лучше, основываясь исключительно на вероятности какого-либо критерия, например, , поэтому лучше. Эта вероятность не дает никакой информации о том, было ли достаточно данных, чтобы сделать из этого какие-либо выводы. Так что мне непонятно, когда прекратить тест.AP(pA>pB)=0.97A

Предположим , что имеется два двоичных RVs, и , и я хочу , чтобы оценить , насколько вероятно, что и на основе наблюдений и . Кроме того, предположим, что и распределены по бета-версии.B p A > p B p A - p BABpA>pBABpApBpApBpA>5%ABpApB

Так как я могу найти параметры для и , я могу и оценить . Пример на питоне:p Aα,βр БpA|dataP ( p A > p B | данные )pB|dataP(pA>pB | data)

import numpy as np

samples = {'A': np.random.beta(alpha1, beta1, 1000),
           'B': np.random.beta(alpha2, beta2, 1000)}
p = np.mean(samples['A'] > samples['B'])

Я мог бы получить, например, . Теперь я хотел бы иметь что-то вроде .P(pA>pB)=0.95P(pA>pB | data)=0.95±0.03

Я исследовал достоверные интервалы и байесовские факторы, но не могу понять, как рассчитать их для этого случая, если они вообще применимы. Как я могу рассчитать эти дополнительные характеристики, чтобы у меня был хороший критерий завершения?


1
Хорошая статья об этом, посмотрите в приложении пример с расчетами ... support.google.com/analytics/answer/2844870?hl=ru
Фабио Бельтрамини,

Ответы:


10

Я рад, что вы упомянули этот пример, поскольку один проект, над которым я работаю, пишет целую главу по байесовскому A / B-тестированию.

Нас интересуют две величины: и некоторая мера «увеличения». я рассмотрю количество .P(pA>pB|data)P(pA>pB|data)

На нет границ ошибок , это истинная величина. Это похоже на выражение «Что означает среднее заднее значение?», Есть только 1 среднее, и мы можем вычислить его, взяв среднее значение по всем выборкам (я игнорирую любые ошибки Монте-Карло, поскольку их можно уменьшить до незначительности путем отбора проб больше). Я думаю, что вы смешиваете неизвестные величины, где мы можем сказать что-то вроде «+ - 3%» и вычисленные после апостериорных величин.P(pA>pB|data)

Я хочу сказать, что точно: учитывая ваши наблюдаемые данные и априоры, это ваш вывод.P(pA>pB|data)=0.95

Обратите внимание, что мы будем быстро знать : для достаточно разных и требуется лишь умеренное количество наблюдений . Намного сложнее и интереснее измерить, какое увеличение имеет А по сравнению с В (и часто это является целью теста А / Б: насколько мы увеличиваем конверсии). Вы упомянули, что 5% - насколько вы уверены в этом?p A p B p A - p BpA>pBpApBpApBpB>

Обратите внимание, что хотя является логическим значением и, следовательно, его легко измерить, определенно не является логическим значением. Это распределение возможностей:p A - p BpA>pBpApBpB

введите описание изображения здесь

По мере получения все большего количества данных это распределение сходится к фактическому относительному увеличению, можно сказать, что распределение стабилизируется. Здесь я предлагаю подумать о прекращении эксперимента. Как только это распределение кажется «успокоенным», и мы можем чувствовать уверенность в увеличении, тогда прекратите эксперимент.


Спасибо за ответ! С нетерпением жду новой главы в ближайшее время. Сейчас я рассматриваю пример дисперсии и заканчиваю тест, когда он приближается к нулю. pApBpA
Богдан Кулинич

эй @ Cam.Davidson.Pilon, спасибо за ваш ответ. Я все еще не понимаю, что такое вероятность: «Вероятность того, что A на 10% лучше, чем B, это X%». Я создал 2 распределения; один на 10% лучше другого и использует огромное значение N, поэтому diff (A / B-1) имеет нормальное распределение со средним значением 10%. Поэтому (diff> .10) .mean () возвращает ~ 50%, но не должно ли быть 100%?
CanCeylan

@CanCeylan у вас есть код, чтобы поделиться? Я не уверен, как вы создали дистрибутивы ...
Cam.Davidson.Pilon

0

Я экспериментировал со способами остановить байесовский A / B тест, и вы правы - не так много очевидных способов отыскать гугл вокруг. Метод, который мне нравится больше всего, - это метод на основе точности, основанный на этом: http://doingbayesiandataanalysis.blogspot.com/2013/11/optional-stopping-in-data-collection-p.html . Тем не менее, я не нашел много математической литературы по этому поводу, так что сейчас это просто хорошая эвристика.

Я обнаружил, что хотя мои тесты должны выполняться намного дольше, чтобы достичь желаемой точности, они более интуитивны, и вы даете время, чтобы распределение «успокоилось» в цели путь, то есть, а не ошеломляющий это.P(A>B|data)


0

Кажется, что есть два основных подхода к принятию решений в байесовском A / B тестировании. Первый основан на статье Джона Крушке из Университета Индианы (К. Крушке, Байесовская оценка заменяет т-тест, Журнал экспериментальной психологии: Общее, 142, 573 (2013)). Правило принятия решений, используемое в этой статье, основано на концепции региона практической эквивалентности (ROPE).

Другая возможность заключается в использовании концепции ожидаемой потери. Это было предложено Крисом Стуккио (C. Stucchio, Bayesian A / B Testing в VWO). Это еще один подход, который я бы рассмотрел.

Подход, предложенный Cam.Davidson.Pilon для рассмотрения апостериорного распределения имеет большой смысл и хорошо вписывается в метод ROPE. Использование метода ROPE имеет дополнительное преимущество, заключающееся в том, что оно дает также правило, когда эксперимент не дает результатов (не только тогда, когда варианты «A» или «B» могут быть объявлены победителями). (pApB)/pA

Вы можете найти больше в этом сообщении в блоге: Байесовское А / Б тестирование: пошаговое руководство . Он также включает в себя некоторые фрагменты кода Python, которые в основном основаны на проекте Python, размещенном на Github .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.