Estadística

Multi-Armed Bandits vs. Test A/B: la Guía Completa

Bandit vs. test A/B: cuándo usar multi-armed bandits en vez del A/B clásico, con muestreo de Thompson y un ejemplo numérico que compara los dos.

Ilustración de una máquina tragamonedas de tres brazos junto a dos columnas divididas que representan un test A/B, con una curva de asignación de tráfico al fondo

Todo el que corre tests lo suficiente tropieza con la misma frustración: mientras tu test A/B todavía está corriendo, la mitad del tráfico sigue viendo la variación que, poco a poco, va quedando claro que es la peor. Ese es el precio combinado de testear con rigor, lo pagas con “costo de oportunidad” para comprar una respuesta confiable. Solo que existe toda una familia de algoritmos diseñada exactamente para reducir ese precio: los multi-armed bandits.

El bandit no es un sustituto del test A/B, es una herramienta con un objetivo distinto. Esta guía explica qué es un bandit, cómo decide hacia dónde mandar a cada visitante, cuándo vale más que un A/B clásico (y cuándo no), y muestra, con números reales calculados por el mismo motor estadístico que corre las calculadoras de este blog, cuánto cuesta cada enfoque en el mismo escenario. Al final, una tabla neutral compara lo que VWO, Optimizely, Kameleoon y otras herramientas del mercado realmente publican sobre el tema, con fuente para cada afirmación.

Qué es un multi-armed bandit

El nombre viene de una imagen antigua de casino: un “bandido de un solo brazo” (one-armed bandit) es la máquina tragamonedas clásica, con una palanca. Un multi-armed bandit es el problema de decisión de alguien frente a varias de esas máquinas al mismo tiempo, cada una con una tasa de pago desconocida y posiblemente distinta de las demás. En cada jugada, eliges una máquina, jalas la palanca y observas el resultado. El objetivo es fácil de enunciar y difícil de resolver bien: maximizar el total ganado a lo largo de todas las jugadas, sabiendo que cuanto más juegas en una máquina, más aprendes sobre ella, pero también renuncias a jugar en las otras.

Cambia “máquina” por “variación de tu página” y “jugada” por “visitante”, y tienes el problema exacto que un bandit resuelve en un test online. Cada variación (A, B, C…) es un brazo. Cada visitante que llega es una jugada. La “tasa de pago” de cada brazo es la tasa de conversión real de esa variación, que no conoces de antemano y que solo vas estimando con más precisión conforme llega el tráfico.

La diferencia de postura respecto a un test A/B es sutil, pero cambia todo lo que viene después: un test A/B trata la fase de recolección de datos y la fase de decisión como dos etapas separadas (primero juntas evidencia con una división fija, después decides). Un bandit trata la recolección y la decisión como la misma cosa, ocurriendo en tiempo real, jugada a jugada.

Exploración y explotación en un multi-armed banditUn bandit decide, con cada visitante, entre explorar (mandar tráfico a brazos inciertos, para aprender más) y explotar (concentrar tráfico en el brazo que parece mejor hasta ahora). La proporción entre los dos cambia conforme crece la confianza en la estimación de cada brazo.PróximovisitanteBrazo Atasa inciertapoco tráfico hasta ahoraBrazo Btasa inciertapoco tráfico hasta ahoraBrazo Cparece el mejormás tráfico hasta ahoraexplorar (líneas discontinuas)explotar (línea continua)
Explorar manda una fracción del tráfico hacia brazos aún inciertos, para aprender más sobre ellos. Explotar concentra tráfico en el brazo que parece mejor ahora. Todo bandit es, en el fondo, una regla para equilibrar los dos a lo largo del tiempo.

Bandit vs. test A/B: la diferencia central

Un test A/B clásico es un experimento de horizonte fijo: decides, antes de empezar, la asignación de tráfico (normalmente 50/50) y el tamaño de muestra necesario, lo corres hasta llegar ahí, y solo entonces declaras un ganador. La asignación no cambia ni un milímetro entre el primer visitante y el último, aunque a mitad de camino ya esté claro que una variación está perdiendo feo.

Un bandit reasigna el tráfico continuamente. Empieza cerca de una división igualitaria (porque, al inicio, no sabe qué brazo es mejor) y va empujando más visitantes hacia el brazo que parece ganar, mientras reduce, sin llegar a cero, el tráfico hacia los brazos que parecen perder. Con cada nueva conversión observada, la estimación de cada brazo se actualiza y la asignación se ajusta de nuevo.

Esto crea un intercambio (trade-off) bien definido, y es el corazón de toda esta guía:

En otras palabras: el A/B optimiza para aprender con rigor; el bandit optimiza para ganar mientras aprende. Ninguno de los dos es “mejor” de forma absoluta, resuelven problemas diferentes, y elegir el equivocado para tu caso sale caro por los dos lados: correr un A/B cuando el costo de la variación perdedora es alto desperdicia conversión sin necesidad; correr un bandit cuando necesitas defender una decisión formalmente te deja sin el número que sostiene esa defensa.

Cómo funciona en la práctica: exploración vs. explotación

El nombre técnico para el intercambio que todo bandit resuelve es exploration/exploitation trade-off (exploración vs. explotación). Explorar es gastar tráfico en brazos sobre los que todavía tienes poca certeza, con la esperanza de descubrir que uno de ellos es, en realidad, el mejor. Explotar es concentrar tráfico en el brazo que, con la información disponible hasta ahora, parece el mejor.

Un algoritmo que solo explora nunca converge, sigue jugando a ciegas para siempre y desperdicia conversión probando brazos malos indefinidamente. Un algoritmo que solo explota (siempre elige el brazo que parece mejor según los primeros datos) corre el riesgo de fijarse demasiado pronto en una elección equivocada, porque los primeros datos de cualquier brazo son ruidosos: un brazo genuinamente mejor puede parecer peor en las primeras decenas de visitantes, solo por azar, y un algoritmo puramente codicioso nunca le daría una segunda oportunidad después de eso. Los tres algoritmos clásicos resuelven este equilibrio de formas distintas.

Epsilon-greedy: el más simple de explicar

El epsilon-greedy reserva una fracción fija y pequeña de tráfico, llamada épsilon (ε, por ejemplo 10%), para exploración pura y aleatoria entre todos los brazos, y manda el resto (1-ε) siempre al brazo que parece mejor en el momento. Es fácil de implementar y de explicar, pero tiene un defecto estructural: explora de la misma forma todo el tiempo, gastando el mismo 10% en brazos claramente malos después de miles de visitantes que el que gastaba el primer día, cuando la incertidumbre era genuina. Variaciones del método (como el épsilon decreciente, que reduce ε poco a poco) intentan corregir esto a mano, pero siguen siendo un ajuste manual, no una respuesta automática a la incertidumbre real de cada brazo.

UCB (Upper Confidence Bound): optimismo ante la incertidumbre

El UCB cambia la exploración aleatoria por una regla más elegante: para cada brazo, calcula la tasa de conversión estimada más un bono de optimismo, proporcional a la incertidumbre sobre ese brazo (cuantos menos datos, mayor el bono), y elige siempre el brazo con el mayor valor combinado. Un brazo poco probado gana un “beneficio de la duda” automático que lo vuelve atractivo incluso con una tasa estimada mediana, lo que empuja la exploración exactamente hacia donde falta información, sin necesitar un parámetro fijo como el ε. Conforme llegan más datos, el bono de cada brazo se reduce y la elección converge naturalmente hacia el que de hecho es mejor.

Muestreo de Thompson: el estándar de producción bayesiano

El muestreo de Thompson es el algoritmo que más aparece en producción cuando la base es bayesiana, exactamente el terreno donde Donnu ya opera. La idea, explicada sin fórmula: para cada brazo, mantienes una distribución de probabilidad (“qué tan probable es cada tasa de conversión posible de ese brazo”, dado lo observado hasta ahora, típicamente una distribución Beta cuando la métrica es una tasa de conversión). Con cada nuevo visitante, el algoritmo sortea un valor aleatorio de la distribución de cada brazo y manda al visitante hacia el brazo que sorteó el valor más alto. Después, actualiza la distribución de ese brazo con el resultado observado (convirtió o no), dejando la curva más estrecha y más precisa.

posterior del brazo = Beta(α + conversiones, β + visitantes − conversiones)

El truco es que ese muestreo aleatorio ya incorpora el equilibrio correcto entre explorar y explotar, sin necesitar ningún parámetro manual como el ε del epsilon-greedy. Un brazo con pocos datos tiene una distribución ancha (mucha incertidumbre), así que a veces el sorteo saca un valor bien alto de él aunque la media parezca mediana, y termina recibiendo tráfico de exploración de forma orgánica. Un brazo con muchos datos y una tasa claramente mala tiene una distribución estrecha y baja, así que casi nunca sortea un valor lo bastante alto como para ser elegido, lo que reduce el tráfico que va hacia él sin llevarlo a cero de una vez.

Muestreo de Thompson: sortear de las distribuciones de cada brazoCada brazo tiene una distribución de creencia sobre su tasa de conversión real. Con cada visitante, el algoritmo sortea un valor de cada distribución y elige el brazo con el mayor valor sorteado; los brazos con más datos tienen distribuciones más estrechas.tasa de conversión posibleBrazo Apoco dato, anchaBrazo Balgún dato, mediaBrazo Cmucho dato, estrechamayor sorteo, elegido
Cuanto más estrecha la distribución, más el brazo ya demostró lo que tenía que demostrar. El brazo con el mayor valor sorteado en esta ronda recibe al próximo visitante; en la ronda siguiente, el sorteo puede favorecer a otro brazo.

Esta es también la razón por la que el muestreo de Thompson encaja tan bien en un producto que ya es bayesiano por defecto: la distribución de creencia sobre cada brazo es exactamente el mismo tipo de objeto que un motor bayesiano de test A/B ya calcula para responder “cuál es la probabilidad de que B sea mejor que A”. El bandit y el test A/B bayesiano comparten la misma matemática de fondo; la diferencia está en qué haces con ella: decidir tráfico en tiempo real, o reportar una probabilidad al final.

Cuándo usar un bandit en vez de A/B (y cuándo no usarlo)

La pregunta correcta no es “cuál es mejor”, es “qué necesita esta decisión específica”. El bandit tiende a valer más cuando:

El A/B clásico sigue siendo la elección correcta cuando:

Árbol de decisión: ¿A/B clásico o bandit?Si el costo de mostrar la variación perdedora es alto y no necesitas significancia formal, usa bandit. Si necesitas defender la decisión con rigor estadístico o analizar por segmento después, usa test A/B, incluso cuando el costo de oportunidad es alto.Mostrar la variación perdedora¿cuesta caro ahora?noUsa test A/B clásico¿Necesitas significancia formalo análisis por segmento después?noUsa A/B, después automatizacon bandit lo que ya ganóUsa banditMuestreo de Thompson
Incluso cuando el costo de oportunidad es alto, la necesidad de defender la decisión con rigor formal empuja de vuelta hacia el A/B. Muchos equipos maduros usan los dos en secuencia: A/B para validar, bandit para optimizar lo que ya fue validado.

El trade-off que nadie esconde

Vale la pena repetirlo con todas las letras, porque es la parte que el marketing de “optimización automática” tiende a suavizar: un bandit no produce un ganador declarado con 95% de confianza de la misma forma que un test A/B. La documentación de la propia Optimizely es directa sobre esto, las optimizaciones de multi-armed bandit no generan significancia estadística; el algoritmo optimiza el total de conversiones reasignando tráfico hacia la variación que está desempeñándose mejor en el momento, sin analizar formalmente por qué una variación supera a otra, y sin usar un control o línea base en el sentido del A/B clásico.

Esto no es un defecto de implementación que algún proveedor vaya a corregir en un próximo lanzamiento, es la naturaleza del problema que el bandit resuelve. El bandit es una herramienta de optimización (maximizar el resultado acumulado durante el período de test); el A/B es una herramienta de inferencia causal (estimar, con un margen de error conocido, si un cambio específico causa una mejora específica). Son preguntas distintas, y un buen bandit responde bien a la primera sin responder a la segunda.

En la práctica, esto importa en el momento en que necesitas defender la decisión. “La variación B convirtió 30% más y recibió la mayor parte del tráfico a lo largo del test” es una frase legítima para un bandit, pero no carga el mismo peso que “B convirtió 30% más, con un valor p de 0,003 e intervalo de confianza del 95% entre +0,5 y +2,5 puntos porcentuales”, la frase que un test A/B debidamente dimensionado permite decir. Si tu cultura de decisión exige el segundo tipo de frase (para un consejo, un inversor, o solo para que el propio equipo de producto duerma tranquilo), el bandit solo no entrega eso, aunque de hecho haya entregado más conversión durante el proceso.

Un ejemplo numérico resuelto

Para salir de la teoría, vamos a usar el mismo motor estadístico que corre las calculadoras de este blog y a comparar, con números concretos, lo que un test A/B fijo cuesta en oportunidad perdida frente a un bandit adaptativo, en el mismo escenario.

El escenario: una página con 10.000 visitantes por semana, tasa de conversión actual del 5%, y una variación B que, en realidad (aunque no lo sepas de antemano), convierte al 6,5%, el mismo lift del 30% relativo usado como ejemplo en la guía de significancia estadística de este blog. Quieres detectar un efecto mínimo del 10% relativo, con 95% de confianza y 80% de poder, el estándar de mercado.

Corre estos números en la calculadora de abajo (ya está con este escenario cargado) y confirma el tamaño de muestra y la duración:

Calculadora de tamaño de muestra
-Visitantes por variación
-Total (2 variaciones)
-Duración estimada

Cálculo por aproximación normal de dos proporciones, 2 variaciones (50/50). Cambia los campos y mira el impacto en vivo.

El motor de muestra de este blog (el mismo de src/lib/stats.ts, sin alteraciones en la matemática congelada) devuelve 31.234 visitantes por variación, 62.468 en total, corriendo durante 44 días con ese tráfico semanal.

El costo del A/B fijo 50/50

Durante los 44 días completos, la mitad del tráfico (31.234 visitantes) sigue viendo la variación A, aunque, bastante antes del final, los datos ya estén apuntando hacia B. Haciendo la cuenta de conversiones esperadas en este diseño:

Ahora, el techo teórico: si todo el tráfico, desde el primer visitante, hubiera ido a B (la variación de hecho mejor, en un escenario hipotético donde ya lo supieras con certeza absoluta), el resultado sería:

La diferencia, ≈ 468 conversiones, es el “costo de oportunidad” que el diseño 50/50 fijo paga por su propia disciplina: mantiene la mitad del tráfico en la variación inferior de principio a fin, porque la asignación se decidió antes de que llegara ningún dato y no cambia hasta que el test termina. Es exactamente ese costo el que un bandit intenta reducir.

Una asignación adaptativa en el mismo escenario

Para ilustrar la lógica (no para simular con exactitud ningún motor comercial específico, ya que la curva real depende del algoritmo, del prior elegido y de la varianza observada), vamos a dividir los mismos 44 días y los mismos 62.468 visitantes en tres fases, con la asignación hacia B subiendo conforme se acumula la evidencia:

Fase Días Visitantes (aprox.) Asignación para B Asignación para A
1: todavía incierto 1 a 11 ~15.617 50% 50%
2: la evidencia empieza a aparecer 12 a 26 ~21.296 65% 35%
3: evidencia fuerte, pero nunca 100% 27 a 44 ~25.555 80% 20%

Sumando las dos variaciones a lo largo de las tres fases: A recibe cerca de 20.374 visitantes y B cerca de 42.095. Las conversiones esperadas quedan así:

Comparando los tres números lado a lado, con el mismo tráfico total:

Conversiones esperadas: A/B fijo, bandit ilustrativo y techo teóricoCon los mismos 62.468 visitantes, el A/B fijo 50/50 genera cerca de 3.592 conversiones esperadas, un bandit adaptativo ilustrativo cerca de 3.755, y el techo teórico de asignar todo a la variación ganadora desde el inicio sería 4.060.conversiones esperadas en 62.468 visitantes3.592A/B fijo50/50 todo el tiempo3.755Banditilustrativo, adaptativo4.060Techo teóricotodo para B desde el día 1
El bandit ilustrativo recupera cerca del 35% de la diferencia entre el A/B fijo y el techo teórico (163 de las 468 conversiones posibles), sin llegar nunca al techo, porque sigue explorando A en alguna medida hasta el final.

El punto central de este ejemplo no es el número exacto (que cambia con el algoritmo, el prior y la tasa real de conversión), es la forma del resultado: un bandit bien configurado queda sistemáticamente entre el A/B fijo y el techo teórico, sin llegar nunca al techo porque ningún bandit serio deja de explorar por completo (eso sería apostar todo a una lectura que aún puede estar equivocada), pero tampoco quedando tan atrás como una división 50/50 mantenida de principio a fin. Y, como se vio arriba, entrega esa ganancia sin producir, al final, un valor p o una significancia en el sentido clásico.

Asignación de tráfico hacia la variación B a lo largo del testEn el test A/B fijo, la asignación hacia B permanece en 50% del primer al último día. En el bandit ilustrativo, la asignación empieza en 50% y sube progresivamente hasta cerca del 80% conforme se acumula la evidencia, a lo largo de los 44 días del test.% del tráfico yendo hacia Bdías de test (0 a 44)50% · A/B fijo (constante)65%80%día 0día 11día 26día 44
La curva del bandit es ilustrativa (la inclinación real depende del algoritmo y de la varianza observada), pero la forma cualitativa siempre es esta: parte de cerca del 50%, sube conforme aumenta la confianza, y no llega al 100%, porque llevar la exploración a cero significa apostar todo a una lectura que aún puede estar equivocada.

Tabla comparativa: A/B clásico vs. bandit vs. bandit contextual

Criterio A/B clásico Bandit (simple) Bandit contextual
Asignación de tráfico Fija (ej.: 50/50) de principio a fin Cambia a lo largo del tiempo, según la evidencia Cambia por visitante, según su contexto
Produce significancia estadística formal Sí, valor p e intervalo de confianza No, en el sentido clásico (Optimizely es explícita sobre esto) No, en el sentido clásico
Mejor para Decisiones que necesitan ser defendidas y documentadas Optimización continua, costo alto de mostrar la variación perdedora El “ganador” cambia por perfil (dispositivo, canal, comportamiento)
Análisis por segmento después del test Directo, la asignación fue estable Difícil, la asignación ya cambió sola durante el test Es el propio objetivo del método
Exige más dato/infraestructura No, es el diseño más simple Un poco más (actualización continua) Bastante más (modelo por atributo de contexto, datos en tiempo real)
Riesgo de decisión equivocada Bajo, si está bien dimensionado y ejecutado Bajo costo de oportunidad, pero sin prueba formal de causa El mismo del bandit simple, más la complejidad de mantener varios modelos

Ninguna fila de esta tabla es “siempre la mejor”. Existe para que elijas según lo que tu decisión específica exige, y no por lo que suena más moderno.

Herramientas que ofrecen bandits (visión neutral)

Buena parte del mercado de test A/B ya ofrece algún sabor de bandit, generalmente como un recurso al lado del A/B clásico, no como sustituto de él. Vale la pena mirar lo que cada proveedor publica sobre su propio enfoque, con la debida salvedad de que las especificaciones de producto cambian y el mejor lugar para confirmar detalles siempre es la documentación oficial más reciente.

Herramienta Enfoque divulgado Lo que queda fuera sin confirmación directa
VWO Bayesiano (SmartStats), prior no informativo, test secuencial La reducción de tiempo “a la mitad” es un número divulgado por la propia empresa
Optimizely MAB simple y contextual (vía Opal), documentación explícita de que no genera significancia Detalles del algoritmo exacto de bandit usado internamente
Kameleoon CUPED (reducción de varianza, no bandit en sí) Si la empresa ofrece bandit nativo además de CUPED, revisa la documentación actual
Spotify Engineering Bandits contextuales en producción (personalización), evaluados por A/B formal aparte Los detalles de implementación son internos, el artículo público es de alto nivel

Donnu A/B se posiciona en este mapa como una herramienta bayesiana nativa: el mismo motor que ya calcula “cuál es la probabilidad de que B sea mejor que A” para un test clásico es la base matemática que un bandit como el muestreo de Thompson necesita. Hoy el producto se enfoca en test A/B con lectura bayesiana honesta; el bandit es la extensión natural de ese motor, no un recurso genérico pegado encima.

Hazlo Automático con Donnu

Acabas de ver los dos lados reales de esta elección: un test A/B clásico entrega un veredicto que aguanta ser defendido, con valor p, intervalo de confianza y una asignación estable fácil de analizar después por segmento, al costo de mantener tráfico en la variación perdedora hasta el final. Un bandit reduce ese costo de oportunidad reasignando tráfico en tiempo real, al costo de no entregar, al final, una significancia estadística formal. Ninguna herramienta te libra de elegir: todavía necesitas decidir si tu situación pide rigor de inferencia causal u optimización continua, y la respuesta cambia de test a test.

Donnu ya corre hoy sobre un motor bayesiano nativo, exactamente la base matemática que sostiene a los dos mundos: el mismo cálculo de “cuál es la probabilidad de que B sea mejor que A” que declara un ganador honesto en un A/B también es lo que alimenta a un bandit como el muestreo de Thompson cuando la decisión pide optimización continua en vez de un veredicto único. No necesitas elegir la herramienta correcta a ciegas, Donnu ya parte de la estadística que ambos escenarios exigen.

Lee también qué es un test A/B y cómo funciona, significancia estadística explicada con la fórmula detrás, el problema del peeking y por qué detenerte pronto arruina un test, y la pieza hermana de esta guía, bandit contextual explicado, para cuando el “ganador” cambia según quién está mirando.

Empieza un test gratis de 14 días y corre tu próximo experimento sobre una base estadística que ya es bayesiana por defecto.

Referencias

Preguntas frecuentes

¿Qué es un multi-armed bandit, en palabras simples?
Es un algoritmo que decide, visita a visita, hacia qué variación mandar al próximo visitante, según lo que ya aprendió hasta ese momento. En vez de fijar la división de tráfico al inicio y analizar solo al final (como un test A/B clásico), el bandit va reduciendo poco a poco el tráfico hacia las variaciones que parecen débiles y aumenta el de las que parecen fuertes, mientras el test todavía está corriendo.
¿El bandit sustituye por completo al test A/B?
No. El bandit es excelente para optimización continua, cuando el costo de mostrar la variación perdedora es alto y no necesitas un veredicto formal. El test A/B sigue siendo la herramienta correcta cuando necesitas una respuesta que aguante ser defendida con rigor estadístico, documentada y analizada por segmento después. Muchos equipos usan los dos: A/B para decidir qué se queda, bandit para correr la optimización continua de lo que ya fue validado.
¿Un bandit puede decirme que una variación "ganó con 95% de confianza"?
No de la misma forma que un test A/B. Los bandits optimizan la métrica a lo largo del tiempo, reasignando tráfico; no corren el diseño de hipótesis nula y valor p que sostiene una afirmación de significancia clásica. Optimizely es explícita sobre esto en su documentación: las optimizaciones de multi-armed bandit no generan significancia estadística. Lo que tienes, al final, es la mejora de desempeño sobre una división igualitaria, no un veredicto con nivel de confianza.
¿Cuándo tiene más sentido un bandit contextual que uno simple?
Cuando el "ganador" cambia según quién está mirando: dispositivo, ubicación, canal de origen o historial de comportamiento. Un bandit simple busca una única variación campeona para todo el mundo; un bandit contextual usa esos atributos para elegir la mejor variación para cada perfil de visitante, lo que cuesta más datos y más complejidad operativa.
¿Donnu ofrece bandits?
Donnu hoy corre sobre un motor bayesiano nativo, que es la base estadística que también sostiene a bandits como el muestreo de Thompson. El producto actual se enfoca en test A/B con lectura bayesiana honesta; el bandit es la extensión natural de ese mismo motor para quien necesita optimización continua, y es hacia donde apunta la hoja de ruta del producto.