Uno de los mayores placeres de la vida es poner a prueba el modelo que estabamos desarrollando, y esto es usando la prueba A-B. Empecemos con un ejemplo, y hablando de limonadas.
Ya hemos estado ajustando hiperparámetros utilizando el antiguo método de «adivinar y comprobar». Vamos hacia el refrigerador. Para nuestro descubrimiento, nos dimos cuenta que ayer bebimos el último vaso de la limonada perfecta, y ahora todo lo que tenemos en el refri es agua, azúcar y limones enteros. «¿Ahora que?». El lote de limonada que se terminó tenía la proporción perfecta de ingredientes, pero olvidamos la receta de las cantidades de los ingredientes. Como buenos modeladores, entra en acción diseñar una prueba A-B que determinará la proporción perfecta de agua, azúcar y limones.
¿Qué es una prueba A-B?
Imaginemos que somos analistas de datos de compras de un gran e-commerce y que lleva el nombre de una enorme selva tropical, Congo. Su sitio web vende toneladas de productos todos los días. Sin embargo, creemos que los cambios en la página del producto pueden aumentar aún más las ventas y las ganancias.
Nuestro plan actual, al que llamaremos Plan B, tiene el botón Comprar antes de la información sobre lo que estamos vendiendo. Creemos que los clientes estarían mejor informados y terminarían comprando nuestro producto si el botón viniera después de la información del producto. Las pruebas A-B son una forma de probar esa hipótesis y determinar con certeza qué página de producto es mejor para el cliente y el negocio.
Hay muchas maneras de ejecutar una buena prueba A-B. Muchos de ellos pueden volverse muy complicados a medida que trabaja con más y más opciones. Exploremos el tipo más simple de prueba A-B, antes de echar un vistazo a las versiones más complicadas.
Un camino simple de la prueba A-B
La forma simple puede ser la forma más fácil inicialmente. Continuando con el ejemplo de la página del producto, obtenemos el visto bueno de la gerencia para ejecutar una prueba durante las próximas dos semanas. Trabajamos con ingeniería para construir un sistema que dirige a las personas a una de las dos páginas, al azar.
Digamos que un 1 significa que un cliente fue dirigido a la página y luego compró el artículo. Un 0 significa que se fueron sin comprar nada. Estamos haciendo algunas suposiciones sobre el comportamiento del cliente aquí que son importantes. Por ejemplo, ignoramos el caso en el que un cliente vuelve más tarde y compra el artículo. Esto es similar al ejemplo de la limonada del mundo real que veremos más adelante.
Usando el método simple, tomamos los datos y contamos el número de 0 y el número de 1. Si observamos estos recuentos ordenados de nuestro método, encontramos que la página A tiene más valores de 1 que la página B, mientras que
ambos tienen 5,000 puntos de datos registrados.
La página A tiene una tasa de conversión del 66%, mientras que la página B solo tiene una tasa de conversión del 56%. Esto parece ser una diferencia significativa. Pero para estar seguros, ejecutamos una prueba $p-2$. Efectivamente, encontramos que nuestros resultados son estadísticamente significativos.
Al final del día, esto funciona bien, sin embargo, hay algunos problemas potenciales. La primera de ellas es que necesitábamos 10,000 visitantes y 2 semanas para recoger estos resultados. Si queremos probar otro cambio en la página, tenemos que pasar mucho más tiempo en otra ronda de pruebas A-B. Además, esa diferencia del 14% es la pérdida real de ingresos para la empresa. Lo que es más importante, si queremos realizar una prueba A-B para determinar la mejor combinación de limonada, es probable que no tengamos 10,000 amigos dispuestos a probar nuestros brebajes.
Una mejor forma de la prueba A-B
Resulta que las pruebas A-B se pueden modelar como un problema de bandidos con múltiples brazos.
El nombre «bandido de un solo brazo» se usa a menudo para describir las máquinas tragamonedas. Estas máquinas tienen una sola palanca tiramos que produce un pago aleatorio y obtienes lo que obtienes. En la versión de brazos múltiples, cada brazo tiene un pago aleatorio, pero algunos tienen un pago promedio más alto que otros, por lo que queremos tirar de esas palancas una vez que las encontremos. En el caso de nuestro dilema de la limonada, estamos tratando de averiguar qué brazo (combinación de ingredientes) da como resultado la puntuación más alta cuando se tira (sabe mejor).
Imaginemos una máquina tragamonedas con tres palancas. El primero da 10 cuando se jala, el segundo 1 y el tercero 25. Obviamente, una vez que averigüemos esto, nos gustaría jalar la Palanca Tres todo el tiempo y dado que los números aquí son fijos, es fácil tirar de las palancas y averiguar cuál es mejor.
Sin embargo, en nuestra vida cotidiana, necesitamos probar nuestra limonada en varias personas que tienen preferencias ligeramente diferentes. Dado que los tipos de limonada provocan diferentes reacciones de diferentes personas, el tirar de palancas ahora es probabilístico. Tendríamos que darle a mucha gente cada combinación para descubrir qué limonada tiene mejor puntaje, por lo que debemos mover las palancas de una manera inteligente para descubrir cuál es la mejor. O, en otras palabras, esto significa que debemos obsequiar a nuestros amigos con tazas de limonada de una manera inteligente para descubrir qué receta es la mejor.
En general, deseamos realizar la menor cantidad de intentos para encontrar la mejor opción posible, ya que luego podemos concentrarnos en tirar de la palanca correcta con la mayor frecuencia posible. Dado que solo tenemos un número limitado de amigos para que preueben nuestra limonada, deberemos usar la información obtenida durante la prueba para que sea más eficiente mientras realiza la prueba.
Bien, ¿cómo hacemos eso? La primera idea podría ser un enfoque «codicioso». Una vez que probemos todas las palancas, siempre tiraremos de la palanca que nos da la máxima recompensa. Esto está bien en el caso de unas pocas opciones (2 o 3), pero cuando el número de palancas/combinaciones (también conocido como espacio de estado) es enorme, rápidamente se vuelve imposible probarlas todas. Además, incluso con unos pocos brazos, un solo tirón puede darte resultados engañosos. Si una persona califica una mala receta de limonada como excelente durante la ronda inicial de pruebas, podría terminar atrapado con esa mala combinación cuando más tiros hubieran revelado una mejor receta para su limonada.
Resulta que hay una solución simple llamada muestreo de Thompson. El muestreo de Thompson es un algoritmo para la toma de decisiones en línea en el que, después de que le damos a una persona una muestra aleatoria para que la pruebe, usamos su respuesta para cambiar qué tan «aleatoria» será la siguiente muestra. Entonces, si hay varias personas a las que les gusta la Opción A, entonces es más probable que le demos a los futuros probadores la Opción A. Se introdujo por primera vez en 1933, pero fue prácticamente ignorada por la comunidad académica hasta décadas después. Luego, a principios de la década de 2010, se demostró que tenía aplicaciones prácticas muy sólidas, lo que llevó a una adopción generalizada del método.
La idea puede ser complicada de entender pero simple de implementar e increíblemente poderosa. Para configurar el problema a resolver con el muestreo de Thompson para limonada, vamos a simplificar un poco y solo consideraremos dos recetas potenciales. Podemos tratar cada receta (partes de azúcar, agua y limón) como un brazo sobre el bandido.
La razón por la que el muestreo de Thompson funciona es porque las preferencias de las personas tienen una cierta forma matemática, llamada distribución. En nuestras pruebas anteriores, estábamos usando un lanzamiento de moneda para determinar qué receta dejar probar a la gente, que se modela usando lo que se llama una distribución de Bernoulli, que simplemente cambia aleatoriamente entre dos opciones. Sin embargo, para el muestreo de Thompson, usaremos lo que se llama una distribución Beta que tiene un par de variables $\alpha$ y $\beta$ que representan éxitos y fracasos anteriores.
Existe una cierta probabilidad subyacente sobre la preferencia de las personas por cada receta de limonada. Elegimos inteligentemente una taza para obsequiar a nuestro amigo y puede optar por beberlo todo o dejarlo después de un sorbo. La preferencia de nuestro amigo se puede modelar con una probabilidad similar a la del lanzamiento de una moneda. La distribución de lanzamiento de moneda se denomina distribución de Bernoulli $p(1 -p)$ si $k = 1$. El muestreo de Thompson intentará calcular las probabilidades de esta distribución. La pieza clave del genio es qué distribución usar como apriori, que se completará como supongamos. El muestreo de Thompson utiliza una distribución Beta que tiene dos parámetros que representan el éxito y el fracaso $\alpha$, $\beta$.
Debido a que el muestreo de Thompson se actualiza después de cada nueva información, no tenemos que esperar 2 semanas para obtener nuestros resultados. En cambio, cada persona que probemos mejorará el modelo a medida que probamos, permitiéndonos usar solo nuestro pequeño grupo de amigos, en lugar de 10,000 personas. Es mucho más eficiente que el método ingenuo que probamos primero, y nuestros amigos obtendrán una buena limonada mucho más rápida, lo que resultará en menos tiempo perdido bebiendo limonada mala.
¿Cómo construmos la prueba A-B?
Cuando comenzamos el experimento, cada receta de limonada tiene dos valores: la cantidad de ganancias, o la cantidad de veces que nuestros amigos terminaron el vaso lleno de limonada, y la cantidad de pérdidas, o la cantidad de veces que se detuvieron después de unos pocos sorbos. Los dos parámetros de la distribución Beta($\alpha$, $\beta$) representan el número de ganancias y pérdidas respectivamente.
Aquí está la parte inteligente. Elegimos qué receta de limonada presentar a nuestros amigos en función de la propia distribución Beta. Comenzamos con Beta(1,1) para ambas limonadas, lo que representa un número igual de ganancias y pérdidas y elegimos un número aleatorio usando la distribución Beta. Esto nos da un número entre cero y uno para cada receta. Si el número de limonada A es mayor que el de la limonada B, entonces le damos a probar la limonada A a nuestro amigo. De lo contrario, les damos limonada B.
Cuando prueban la limonada, registramos si beben todo el vaso o no en los parámetros $\alpha$ y $\beta$ para cada limonada. Entonces, si la primera persona bebió toda la Limonada A, entonces la distribución de la Limonada A cambiaría a Beta(2,1). Si solo tomaran un sorbo, cambiaría a Beta (1,2) en su lugar. A medida que aumenta el número de ganancias de una limonada, los números entre 0 y 1 elegidos para esa limonada también serán mayores, lo que hace que sea más probable que esa limonada sea elegida en el futuro. Lo contrario también es cierto a medida que las pérdidas aumentan, y es menos probable que se recoja la limonada. Después de probar estas dos recetas con algunos amigos, es posible que tengamos Beta (8,2) 6 para la limonada A y Beta (1, 6) para la limonada B.
Esto significa que nuestros amigos prefirieron la limonada A porque el valor de A es más alto. que la de la limonada B y nuestro algoritmo ahora sugerirá la limonada A a nuestros amigos con más frecuencia para que no se pierdan la receta más sabrosa.
¿Cuál es la receta de la limonada perfecta?
Al final, tenemos unas pocas líneas de código de toma de decisiones basadas en sólidos principios probabilísticos que garantizan la convergencia. Podemos aumentar la satisfacción de nuestros amigos y descubrir rápidamente qué limonada es la mejor. En este caso, según nuestros experimentos, la respuesta es 1:1:5, que es 1 taza de jugo de limón, 1 taza de azúcar y 5 tazas de agua. No necesitábamos probar nuestro método contra 10,000 amigos para tener confianza estadística. Y al final, tenemos un método infalible que podemos aplicar a cualquier cantidad de necesidades culinarias.