¿Cuándo terminar la prueba bayesiana A / B?

10

Estoy tratando de hacer pruebas A / B de la manera bayesiano, como en Probabilístico de programación para los hackers y bayesiano A / B pruebas . Ambos artículos suponen que el tomador de decisiones decide cuál de las variantes es mejor basándose únicamente en la probabilidad de algún criterio, por ejemplo, , por lo tanto, es mejor. Esta probabilidad no proporciona ninguna información sobre si había suficiente cantidad de datos para sacar conclusiones de ella. Entonces, no está claro para mí cuándo detener la prueba.AP(pA>pB)=0.97A

Supongamos que hay dos casas rodantes binarios, y , y yo quiero para estimar qué tan probable es que , y basado en las observaciones de y . Además, suponga que los posteriores y están distribuidos en beta.B p A > p B p A - p BABpA>pBABpApBpApBpA>5%ABpApB

Como puedo encontrar los parámetros para y , puedo muestrear los posteriores y estimar . Ejemplo en python:p Aα,βp BpA|dataP ( p A > p B | datos )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'])

Podría obtener, por ejemplo, . Ahora me gustaría tener algo como .P ( p A > p B | datos ) = 0.95 ± 0.03P(pA>pB)=0.95P(pA>pB | data)=0.95±0.03

He investigado acerca de intervalos creíbles y factores de Bayes, pero no puedo entender cómo calcularlos para este caso si son aplicables. ¿Cómo puedo calcular estas estadísticas adicionales para tener un buen criterio de finalización?

Bogdan Kulynych
fuente
1
Un buen artículo sobre esto, consulte el apéndice para ver un ejemplo con cálculos ... support.google.com/analytics/answer/2844870?hl=es
Fabio Beltramini

Respuestas:

10

Me alegra que hayas mencionado este ejemplo, ya que un proyecto en el que estoy trabajando es escribir un capítulo completo sobre pruebas Bayesianas A / B.

Estamos interesados ​​en dos cantidades: y alguna medida de "aumento". Discutiré primero la cantidad .P ( p A > p BP(pA>pB|data)P(pA>pB|data)

No hay límites de error en , es una cantidad verdadera. Esto es similar a decir "¿Cuál es la media de la parte posterior?", Solo hay 1 media, y podemos calcularla tomando el promedio de todas las muestras (estoy ignorando cualquier error de Monte Carlo, ya que pueden reducirse a insignificancia al tomar más muestras). Creo que está mezclando cantidades desconocidas, donde podemos decir algo como "+ - 3%" y cantidades calculadas posteriormente.P(pA>pB|data)

Lo que estoy diciendo es que es cierto: dada su información observada y sus antecedentes, esta es su conclusión.P(pA>pB|data)=0.95

Tenga en cuenta que sabremos rápidamente: solo requiere cantidades moderadas de observaciones para diferentes y . Es mucho más difícil y más interesante medir qué aumento tiene A sobre B (y a menudo este es el objetivo de una prueba A / B: cuánto aumentamos las conversiones). Usted mencionó que 5%, ¿qué tan seguro está de esto?p A p B p A - p BpA>pBpApBpApBpB>

Tenga en cuenta que aunque es un valor booleano y, por lo tanto, fácil de medir, ciertamente no es un valor booleano. Es una distribución de posibilidades:p A - p BpA>pBpApBpB

ingrese la descripción de la imagen aquí

A medida que se adquieren más y más datos, esta distribución converge al aumento relativo real, se puede decir que la distribución se estabiliza. Aquí es donde sugiero pensar en terminar el experimento. Una vez que esta distribución parece "calmarse", y podemos sentirnos seguros sobre el aumento, entonces terminamos el experimento.

Cam.Davidson.Pilon
fuente
¡Gracias por la respuesta! Espero ver el nuevo capítulo pronto. Por ahora, estoy considerando la varianza muestral de , y la prueba cuando se acerca a cero. pApBpA
Bogdan Kulynych
Hola @ Cam.Davidson.Pilon, gracias por tu respuesta. Todavía estoy confundido al dar probabilidades como: "La probabilidad es que A sea 10% mejor que B es X%". Creé 2 distribuciones; uno es 10% mejor que el otro, y utiliza un gran valor de N, por lo tanto, el diff (A / B-1) tiene una distribución de tipo normal con una media del 10%. Por lo tanto (diff> .10) .mean () devuelve ~ 50%, pero ¿no debería ser 100%?
CanCeylan
@ CanCeylan, ¿tiene código para compartir? No estoy seguro de cómo creó las distribuciones ...
Cam.Davidson.Pilon
0

He estado experimentando con formas de detener una prueba Bayesiana A / B y tienes razón: no hay muchas maneras obvias de buscar en Google. El método que más me gusta es un método basado en la precisión, basado en esto: http://doingbayesiandataanalysis.blogspot.com/2013/11/optional-stopping-in-data-collection-p.html . Sin embargo, no he encontrado mucha literatura matemática sobre esto, así que en este momento es solo una buena heurística.

Descubrí que si bien mis pruebas deben durar mucho más para alcanzar la precisión deseada, es más intuitiva y está dando tiempo para que la distribución de "calme" en un objetivo manera, es decir, en lugar de llamar la atención.P(A>B|data)

ilanman
fuente
0

Parece que hay dos enfoques principales para la toma de decisiones en las pruebas Bayesianas A / B. El primero se basa en un artículo de John Kruschke de la Universidad de Indiana (K. Kruschke, Bayesian Estimation Reemplaza la prueba t, Journal of Experimental Psychology: General, 142, 573 (2013)). La regla de decisión utilizada en este documento se basa en el concepto de Región de equivalencia práctica (ROPE).

Otra posibilidad es usar el concepto de una Pérdida Esperada. Ha sido propuesto por Chris Stucchio (C. Stucchio, Bayesian A / B Testing en VWO). Es otro enfoque que consideraría.

El enfoque sugerido por Cam.Davidson.Pilon de mirar la distribución posterior de tiene mucho sentido y encajaría bien dentro del método ROPE. El uso del método ROPE tiene la ventaja adicional de dar también una regla para cuando el experimento no es concluyente (no solo cuando las variantes "A" o "B" pueden declararse ganadoras). (pApB)/pA

Puede encontrar más en esta publicación de blog: Bayesian A / B Testing: una guía paso a paso . También incluye algunos fragmentos de código de Python que se basan principalmente en un proyecto de Python alojado en Github .

cbellei
fuente