de una manera bastante sencilla. Inician una prueba, abren el tablero todas las mañanas y esperan a que el valor p caiga por debajo de 0,05. Cuando lo haga, el resultado parece lo suficientemente oficial como para enviarlo. Se ha cruzado la línea, el número parece limpio y el ganador parece estar listo para igualar.
No diría que esta rutina se haga siempre de forma descuidada. En la mayoría de los casos, el equipo está haciendo exactamente lo que el tutorial estándar les enseñó a hacer: definir la hipótesis, elegir la métrica, ejecutar la prueba z o t de dos proporciones y rechazar el valor nulo cuando p cae por debajo de 0,05. Algunas guías incluso añaden el valioso paso de calcular el tamaño de muestra requerido antes de que comience la prueba.
Pero hay una cosa crucial que a menudo se pasa por alto. La tasa de falsos positivos del 5 por ciento se escribe para una sola mirada a una muestra fija, y las matemáticas cambian una vez que el mismo panel se revisa una y otra vez antes de que finalice el experimento.
Ejecuté una simulación para hacer esto visible. La configuración era deliberadamente ordinaria: dos versiones, A y B, ambas convirtiendo a la misma tasa real del 10 por ciento; 1.000 visitantes por brazo por día; una prueba bilateral al nivel del 5 por ciento; y 30 días de tráfico. No hubo diferencia entre A y B. No se pudo encontrar ninguna mejora en el producto. Lo único que la prueba pudo descubrir fue ruido.
importar numpy como np desde scipy importar estadísticas RNG = np.random.default_rng(5) n_sims = 60_000 n_days = 30 visitantes_por_arm_day = 1_000 p_true = 0.10 def two_prop_z(succ_a, n_a, succ_b, n_b): pa, pb = succ_a / n_a, succ_b / n_b pool = (succ_a + succ_b) / (n_a + n_b) se = np.sqrt(pool * (1 – pool) * (1 / n_a + 1 / n_b)) z = (pb – pa) / se return z, 2 * stats.norm.sf(np.abs(z)) inc_a = RNG.binomial(visitantes_por_brazo_día, p_true, tamaño=(n_sims, n_días)) inc_b = RNG.binomial(visitantes_por_brazo_día, p_true, tamaño=(n_sims, n_días)) cum_a, cum_b = inc_a.cumsum(eje=1), inc_b.cumsum(eje=1) n = np.cumsum(np.full((n_sims, n_days), visitantes_por_arm_day), axis=1) _, p_daily = two_prop_z(cum_a, n, cum_b, n) false_positive_daily = (p_daily < 0.05).any(axis=1).mean()
Si la prueba se revisó sólo una vez al final, la tasa de falsos positivos llegó donde debería: alrededor del 5 por ciento. Pero si la prueba se revisaba todos los días y se detenía tan pronto como p caía por debajo de 0,05, la tasa de falsos positivos ascendía al 27,7 por ciento. En otras palabras, más de una de cada cuatro “victorias” fueron victorias creadas por la regla de detención, no por el producto.
Lo que este artículo agrega es una medición directa de la inflación y un punto de referencia en paralelo de las correcciones sobre los mismos datos simulados. Utilizo una simulación inicial para medir la tasa de falsos positivos en la observación diaria, luego comparo el diseño de muestra fija, un límite de Pocock secuencial de grupo y un valor p siempre válido según la validez y velocidad que mantiene cada uno.
La versión tutorial no es suficiente.
La explicación pública habitual de las pruebas A/B da la impresión de que la estadística de la prueba es la historia completa. Calcula el valor p, lo compara con 0,05 y realiza la llamada. Por sí sola, esa rutina está bien, pero está incompleta para la forma en que los equipos de producto realmente realizan experimentos.
En la práctica, la gente rara vez espera tranquilamente hasta el final planificado previamente de la prueba. Miran el tablero más de una vez. Si el resultado parece bueno el día cuatro, el día ocho o el día doce, la presión para detenerse se vuelve muy real. El panel dice importante, la hoja de ruta está esperando y la empresa quiere la respuesta.
El problema es que cada nueva apariencia le da al mismo proceso aleatorio otra oportunidad de cruzar la línea. Un valor p no es una propiedad estable del experimento mientras los datos aún se están acumulando. Se mueve con el siguiente grupo de usuarios, lo que significa que una caída que parece decisiva un día puede desaparecer por completo al día siguiente.
Por eso la frase “nos detuvimos cuando se volvió importante” no es un detalle operativo inofensivo. Es parte del diseño estadístico. Si la regla de suspensión no es válida, el valor p en el día de la suspensión no significa lo que el equipo cree que significa.
Lo malo que se pone depende de la frecuencia con la que mires
El daño crece con el número de miradas. En la simulación:
La intuición es simple. Si le damos al ruido muchas oportunidades para que parezca una señal, algunas de esas miradas cruzarán el umbral por casualidad. Y el equipo que se detiene en el primer significado nunca ve la corrección posterior. Registra el día de suerte como resultado.
Entre las pruebas de brazos idénticos que cruzaron la línea de 0,05 al menos una vez, la mitad había cruzado el quinto día. Ese es exactamente el momento en el que un equipo se siente más tentado a declarar una victoria rápida. Pero también es exactamente cuando la muestra es todavía pequeña y la estimación más frágil.
Incluso un verdadero ganador se vuelve exagerado.
El mismo problema aparece incluso cuando el efecto es real. Volví a ejecutar la simulación con B realmente mejor que A: A convirtió al 10 por ciento y B al 11 por ciento, un aumento relativo real del 10 por ciento. Una prueba que se realizó hasta el horizonte fijo de 30 días registró un aumento medio del 10,1 por ciento, básicamente centrado en la verdad.
Pero una prueba detenida en la primera significación registró un aumento medio del 12,7 por ciento. El ganador fue real, pero el tamaño medido de la victoria se infló en aproximadamente una cuarta parte. Esto sucede porque cruzar la línea temprano generalmente requiere una oscilación inusualmente favorable.
Esto importa de una manera muy práctica. El aumento no es sólo un número estadístico. Se convierte en el número utilizado en el pronóstico de ingresos, el caso de lanzamiento y la discusión de la hoja de ruta y, a veces, es la razón por la que se le quita prioridad a otro proyecto. Si el experimento sobrevendió el impulso antes de que se lanzara la función, el lanzamiento puede decepcionar incluso cuando el cambio de producto realmente ayudó.
Por lo tanto, cuando una parada anticipada es inevitable, la elevación medida en el momento de la parada no debe considerarse como un pronóstico claro. El número más honesto es la estimación de un método que tiene en cuenta las miradas repetidas o la estimación en un horizonte previamente comprometido. Vale la pena mostrar la brecha entre esos números a cualquiera que esté planificando el resultado.
Puedes mirar temprano, pero el método debe permitirlo.
Esto no significa que los equipos tengan que elegir entre observar el experimento y confiar en el resultado. Significa que la regla de detención debe coincidir con la forma en que realmente se monitorea la prueba.
La primera opción es la más simple: fijar el tamaño de la muestra de antemano y tratar el panel como fuera de los límites para la inferencia hasta el punto final. En la simulación, esto mantuvo la tasa de falsos positivos en el 5,1 por ciento. La limitación es obvia. Debe esperar la muestra completa incluso cuando el efecto se vuelve grande y visible temprano.
La segunda opción son las pruebas secuenciales de grupos. Esta es la familia de métodos que los ensayos clínicos han utilizado durante décadas. Usted decide de antemano cuántas veces mirará y aumenta el umbral en cada mirada para que todas esas miradas juntas gasten solo la tasa de error que pretendía. En la versión más simple de límites de Pocock, se utiliza el mismo límite más estricto en cada mirada. Calibrado aquí, utilizó un límite de 2,73 en lugar del habitual 1,96, y mantuvo la tasa de falsos positivos en un 4,9 por ciento bajo seguimiento diario.
La tercera opción es la inferencia siempre válida, que está diseñada para la realidad del experimento en línea de verificar cada vez que se actualiza el panel. En lugar de un valor p de muestra fija, utiliza una cantidad que sigue siendo válida sin importar cuándo o con qué frecuencia se mire. En esta simulación, el valor p siempre válido mantuvo la tasa de falsos positivos en 1,5 por ciento, lo cual es conservador porque protege contra la interrupción en cualquier momento, no solo durante un mes fijo.
# Límite diario estilo Pocock, calibrado en el valor nulo z_daily, _ = two_prop_z(cum_a, n, cum_b, n) def false_positive_at_boundary(z_values, border): return (np.abs(z_values) > border).any(axis=1).mean() # En la ejecución inicial utilizada aquí, el límite constante calibrado es 2,73, # en comparación con la muestra fija habitual 1,96. pocock_boundary = 2.73 fp_pocock = false_positive_at_boundary(z_daily, pocock_boundary) # Valor p siempre válido de una prueba de relación de probabilidad secuencial de mezcla TAU = 0.01 # SD anterior en la verdadera diferencia absoluta, aproximadamente 1pp en una base de 10% def msprt_pvalue(diff, var): tau2 = TAU ** 2 lam = np.sqrt(var / (var + tau2)) * np.exp( diff**2 * tau2 / (2 * var * (var + tau2)) ) return np.minimum(1.0, 1.0 / lam)
Esta es la parte que a menudo se pasa por alto en las discusiones sobre productos. Los métodos corregidos hacen que el resultado sea más honesto y, al mismo tiempo, mantienen gran parte de la velocidad que hizo que mirar a escondidas fuera atractivo en primer lugar.
La velocidad sólo se convierte en un problema cuando queda fuera del diseño.
Frente a un aumento real del 10 por ciento, el diseño de muestra fija captó el efecto el 97,9 por ciento de las veces, pero sólo en el día 30 según el diseño. El límite de Pocock lo atrapó el 93,3 por ciento de las veces con una decisión típica el día 11. El valor p siempre válido lo atrapó el 87,5 por ciento de las veces con una decisión típica el día 14.
Ésa es la compensación útil. Puede detenerse temprano cuando el efecto es real, pero ya no pretenderá que el primer p < 0,05 ingenuo signifique lo mismo que una prueba de muestra única fija. La velocidad se convierte en parte del diseño en lugar de un hábito informal superpuesto.
El método siempre válido es más conservador en esta configuración, porque paga por una garantía que se mantiene en cualquier momento de parada. El previo utilizado en la simulación también se puede ajustar. Si un equipo lo acerca al tamaño del efecto que realmente espera, puede recuperar poder. La elección del método depende de cómo el equipo quiera ejecutar el experimento, pero el método debe saber que el equipo está buscando.
Algunos límites que vale la pena decir en voz alta
Esta simulación mide una parte del problema: una métrica, un tratamiento frente a un control, una aleatorización limpia y un tráfico diario constante. Los programas de experimentación reales suelen ser más complicados. Los equipos prueban múltiples métricas, varias variantes y, a veces, varios segmentos al mismo tiempo. Cada una de esas opciones añade otra capa de multiplicidad, por lo que los números aquí están más cerca de un piso que del peor de los casos.
La simulación tampoco resuelve los efectos de novedad ni los patrones de los días laborables. Si los usuarios reaccionan de manera diferente en los primeros días porque algo es nuevo, o si la empresa tiene ciclos fuertes entre días de la semana, es posible que aún sea necesario un tiempo de ejecución mínimo de una o dos semanas completas, independientemente del método secuencial. Los métodos de reducción de la varianza como CUPED también son complementarios. Reducen el tamaño de muestra necesario, pero por sí solos no solucionan el problema de la regla de detención.
Entonces la lección práctica es no dejar de mirar el tablero. Los equipos mirarán el tablero y eso está bien. El acto de mirar simplemente tiene que ser parte del diseño, no algo que suceda fuera de las estadísticas.
Lo que debería enseñar la próxima guía de pruebas A/B
Una mejor guía de pruebas A/B haría cuatro cambios.
Primero, establezca la regla de detención antes de que comience la prueba, de la misma manera que establece la métrica y la hipótesis. La regla de parada determina si el valor p significará algo cuando lo uses.
En segundo lugar, si miras una vez, haz el cálculo de potencia y comprométete con el tamaño de la muestra. Este es el hábito básico de mayor valor y ya está disponible para cualquiera que pueda calcular el tamaño del efecto.
En tercer lugar, si va a mirar repetidamente, utilice un método creado para miradas repetidas. Un límite de secuencia de grupo funciona cuando el número de miradas se fija de antemano. Un valor p siempre válido funciona cuando el equipo quiere tener la libertad de comprobarlo cuando quiera.
Cuarto, informe la regla de detención junto al resultado. El lector debería poder ver si la afirmación del 5 por ciento es real o si sólo parece real porque la prueba se detuvo en el día de suerte.
La prueba z es sólida cuando se utiliza en el entorno para el que fue creada. El error proviene del uso de una garantía escrita para una mirada fija para justificar miradas repetidas. Elija una regla de parada que coincida con el comportamiento real del equipo y el valor p podrá mantener el significado que se suponía que debía tener.
Referencias
Armitage, P., McPherson, CK y Rowe, BC Pruebas de significancia repetidas sobre la acumulación de datos. Revista de la Royal Statistical Society Serie A, 1969. Wald, A. Análisis secuencial. Wiley, 1947. Pocock, SJ Grupo de Métodos Secuenciales en el Diseño y Análisis de Ensayos Clínicos. Biometrika, 1977. O'Brien, PC y Fleming, TR Un procedimiento de prueba múltiple para ensayos clínicos. Biometrics, 1979. Lan, KKG y DeMets, DL Límites secuenciales discretos para ensayos clínicos. Biometrika, 1983. Johari, R., Koomen, P., Pekelis, L. y Walsh, D. Inferencia siempre válida: monitoreo continuo de pruebas A/B. Investigación de operaciones, 2022. Howard, SR, Ramdas, A., McAuliffe, J. y Sekhon, J. Secuencias de confianza no asintóticas, no paramétricas y uniformes en el tiempo. Annals of Statistics, 2021. Deng, A., Lu, J. y Chen, S. Monitoreo continuo de pruebas A/B sin dolor: parada opcional en las pruebas bayesianas. IEEE DSAA, 2016. Kohavi, R., Tang, D. y Xu, Y. Experimentos controlados en línea confiables. Cambridge University Press, 2020. Simmons, JP, Nelson, LD y Simonsohn, U. Psicología falsa positiva. Ciencia Psicológica, 2011.
Nota de reproducibilidad: las cifras y tasas de este artículo provienen de una simulación de Python inicializada que utiliza numpy, scipy y matplotlib. No se utiliza ningún conjunto de datos externos. Cada experimento se simula a partir de datos reales conocidos, que es la única forma de medir directamente una tasa de falsos positivos. El código clave de simulación y calibración del método se incluye arriba; las tasas informadas son estimaciones de Monte Carlo del ciclo sembrado y pueden variar en unas pocas décimas de punto porcentual entre las semillas.