Estadística

Madurez de Cohorte en Test A/B: leer D7 y D30

Quien entró ayer no tuvo 7 días para quedarse. Cómo la madurez de cohorte distorsiona la retención D7 y D30, y cómo cerrar la cohorte sin frenar el test.

Ilustración plana de seis barras horizontales de largos distintos que empiezan en puntos escalonados a la izquierda, todas cortadas por una única línea vertical cerca del borde derecho

En un test con entrada continua de tráfico, el usuario que entró ayer no tuvo siete días para quedarse, y aun así entra en la cuenta de retención D7 como si los hubiera tenido. En la simulación de esta guía eso hundió la retención leída de 29,5404 a 23,2103 por ciento, y en un escenario con lanzamiento en rampa llegó a invertir al ganador: menos 5,99 por ciento en la lectura ingenua contra más 8,22 por ciento en la lectura correcta. Esta guía muestra cómo se forma la madurez de cohorte, cuándo solo yerra el nivel y cuándo yerra el veredicto, y cómo cerrar la cohorte sin hacer inviable el test. Forma parte de nuestra guía completa de test A/B y complementa retraso de conversión y métricas de tiempo hasta el evento.

El problema: el test tiene un comienzo, el usuario tiene otro

Un experimento clínico recluta a los participantes antes de empezar. Todos entran juntos, todos son seguidos durante el mismo período, y la métrica “¿sobrevivió 30 días?” significa lo mismo para todos.

Un test A/B online no funciona así. Kohavi, Deng, Frasca, Longbotham, Walker y Xu registran el punto de forma directa: a diferencia de la mayoría de los experimentos offline, los experimentos online reclutan usuarios continuamente, en vez de tener un período de reclutamiento antes del experimento, y como consecuencia el tamaño de muestra crece mientras el experimento corre.

Eso es una virtud operativa y un problema de medición. Cada usuario tiene un reloj propio, que empieza el día en que entró. En un test de 28 días:

Ahora aplica a eso la métrica más común de producto: retención en D7. Pregunta si el usuario estaba activo siete días después de entrar. Para quien entró el día 27, esa pregunta simplemente no tiene respuesta todavía.

Y ahí ocurre el error que da nombre a este artículo: la consulta estándar suma “usuarios retenidos en D7” en el numerador y “usuarios que entraron en el test” en el denominador. Quien no tuvo siete días entra en el denominador y no puede entrar en el numerador. No se cuenta como dato faltante, se cuenta como fracaso.

Cohortes de entrada escalonadas dentro de un test de 28 díasDiagrama con siete barras horizontales que representan cohortes que entraron en el test en días distintos. Cada barra empieza el día de entrada de la cohorte y llega hasta el día 28, el fin del test. La cohorte del día 1 tiene 28 días de seguimiento, la del día 8 tiene 21, la del día 15 tiene 14, la del día 22 tiene 7, y las cohortes que entraron los días 24, 26 y 28 tienen respectivamente 5, 3 y 1 día. Una línea vertical punteada en el día 22 separa las cohortes que completaron siete días de seguimiento de las que no. Las cuatro barras a la izquierda de la línea son verdes y están rotuladas como maduras para una métrica de siete días. Las tres barras a la derecha son naranjas y están rotuladas como inmaduras, y la leyenda registra que corresponden al 21,43 por ciento de la muestra y entran en la cuenta ingenua como si fueran usuarios no retenidos.Quien entró después del día 22 no puede tener retención D7 medidaúltimo día con D7 completodía 128ddía 821ddía 1514ddía 227ddía 245ddía 263ddía 281ddía 1día 15día 28verde: cohorte madura para D7 (78,57% de la muestra)naranja: cohorte inmadura (21,43%), contada como “no retenida” por la consulta ingenua
Cada cohorte de entrada tiene una ventana de seguimiento distinta dentro del mismo test. La métrica con ventana fija solo es calculable a la izquierda de la línea punteada.

Caso 1: los dos brazos reclutan igual, y solo se rompe el nivel

Simulamos un test de 28 días, con 900 usuarios nuevos por brazo por día, totalizando 25.200 por brazo. La verdad del mundo simulado: retención D7 del 30,00 por ciento en el control y 32,40 por ciento en la variante, es decir, la variante es un 8 por ciento mejor en términos relativos.

Los dos brazos reclutan al mismo ritmo, todos los días, sin rampa.

lectura control variante lift relativo z valor p IC 95% de la diferencia
ingenua (denominador = todos los inscritos) 5.849 / 25.200 (23,2103%) 6.484 / 25.200 (25,7302%) +10,86% 6,5793 por debajo de 1e-10 [1,7695 pp; 3,2702 pp]
cohorte cerrada (denominador = quien tuvo 7 días) 5.849 / 19.800 (29,5404%) 6.484 / 19.800 (32,7475%) +10,86% 6,8908 por debajo de 1e-11 [2,2954 pp; 4,1187 pp]

Comprueba las dos filas en la calculadora, pegando los cuatro números de cada una:

Calculadora de significancia estadística
Control (A)
Variación (B)
Control (A) · Tasa-
Variación (B) · Tasa-
Mejora relativa-
valor-p-
IC 95% de la diferencia-

Test z bilateral de dos proporciones. "Sin significancia" casi siempre significa que falta muestra, no que las versiones sean iguales.

Dos lecturas de la tabla, y la segunda es la que interesa.

El nivel está equivocado por 6,3301 puntos. La lectura ingenua devuelve 23,2103 por ciento de retención D7 donde el valor real es 29,5404 por ciento. Eso es una subestimación del 21,43 por ciento del valor verdadero, y no es coincidencia: 21,43 por ciento es exactamente la fracción de la muestra que está inmadura (5.400 de 25.200). El sesgo de nivel es aritméticamente igual a la fracción inmadura, porque cada usuario inmaduro entra como un cero garantizado.

El lift relativo, en cambio, sobrevivió. Los dos brazos perdieron la misma fracción, así que la razón entre las tasas es la misma en las dos filas: más 10,86 por ciento en ambas. Solo cambia el intervalo de confianza, y para mejor en la lectura cerrada, porque el denominador menor es también más honesto.

Conviene registrar que el lift observado de más 10,86 por ciento queda por encima de la verdad de más 8,00 por ciento. Eso es ruido muestral común, no sesgo: el intervalo de confianza de la lectura cerrada, de 2,2954 a 4,1187 puntos, contiene la diferencia verdadera de 2,40 puntos sin apretar.

Entonces, cuando los dos brazos reclutan igual, la madurez de cohorte es un problema de nivel, no de comparación. Y un problema de nivel sigue siendo un problema:

Caso 2: un brazo en rampa, y el veredicto se invierte

Ahora la versión peligrosa. Mismo test, misma verdad (variante 8 por ciento mejor), con un único cambio: la variante fue liberada en rampa, es decir, con el 10 por ciento del tráfico la primera semana, el 60 por ciento la segunda y el 100 por ciento después.

No es un escenario exótico. Es rollout progresivo, la práctica recomendada para reducir el riesgo de lanzamiento, y la más común en equipos que usan feature flags.

lectura control variante lift relativo z valor p IC 95% de la diferencia
ingenua 5.941 / 25.200 (23,5754%) 3.770 / 17.010 (22,1634%) menos 5,99% menos 3,3808 0,000723 [menos 2,2270 pp; menos 0,5969 pp]
cohorte cerrada 5.941 / 19.800 (30,0051%) 3.770 / 11.610 (32,4720%) más 8,22% 4,5666 0,000005 [1,4025 pp; 3,5314 pp]

Lee con calma, porque las dos filas son el mismo test, los mismos usuarios y los mismos eventos.

La lectura ingenua dice que la variante perdió por 5,99 por ciento, con un valor p de 0,000723. Es significativa. Un equipo disciplinado, con plan de análisis y umbral de 0,05, mataría esa variante con justificación formal.

La lectura de cohorte cerrada dice que la variante ganó por 8,22 por ciento, con un valor p de 0,000005. También significativa, y el valor está prácticamente encima de la verdad de más 8,00 por ciento.

Inversión de signo entre la lectura ingenua y la lectura de cohorte cerradaGráfico con un eje horizontal centrado en el cero y dos barras horizontales. La barra de la lectura ingenua va hacia la izquierda del cero, marcando un lift relativo de menos 5,99 por ciento con valor p de 0,000723, y está pintada en naranja de alerta. La barra de la lectura de cohorte cerrada va hacia la derecha del cero, marcando más 8,22 por ciento con valor p de 0,000005, y está pintada en verde. Una línea punteada vertical marca la verdad del mundo simulado, más 8,00 por ciento, prácticamente pegada al final de la barra verde. La leyenda registra que las dos lecturas usan los mismos usuarios y los mismos eventos, y que la diferencia entre ellas es solamente el denominador.Mismos usuarios, mismos eventos, veredictos opuestos0%verdad: más 8,00%lectura ingenuamenos 5,99%valor p 0,000723, significativa y equivocadacohorte cerradamás 8,22%valor p 0,000005menos 10%más 12%La única diferencia entre las dos filas es el denominador: 25.200 y 17.010 contra 19.800 y 11.610.La rampa dejó el 68,25% de la variante madura contra el 78,57% del control, y la lectura ingenua leyó esadiferencia de edad como diferencia de calidad.
La inversión no viene del ruido: los dos valores p son pequeños. Viene de comparar cohortes de edades distintas como si fueran comparables.

El mecanismo es simple de enunciar una vez visto. La rampa hizo que la variante reclutara más tarde, así que su cohorte es más joven: solo el 68,25 por ciento de los usuarios de la variante llegó a completar siete días, contra el 78,57 por ciento del control. Diez puntos más de usuarios inmaduros, cada uno entrando como un cero, hunden la tasa observada de la variante por debajo de la del control.

El vínculo con SRM, que no sustituye esta comprobación

Un lector atento notará que los brazos tienen tamaños distintos, 25.200 contra 17.010, y que eso dispararía una alarma de reparto desigual de tráfico. Es correcto, y conviene separar las dos cosas con cuidado:

La comprobación correcta no es comparar el número de usuarios por brazo, es comparar la distribución de fechas de entrada por brazo. Si las dos distribuciones no son iguales, y la métrica tiene ventana, cierra la cohorte.

El arreglo de la madurez de cohorte: cerrar la cohorte

La regla es una línea: solo entran en el análisis los usuarios que entraron hasta el día final del test menos la ventana de la métrica. En un test de 28 días con métrica D7, analiza a quienes entraron en los primeros 22 días. Todos los del denominador tuvieron exactamente la misma oportunidad.

Spotify usa exactamente ese diseño en el corpus de validación de la métrica de tiempo hasta la inactividad: Chandar y coautores registran que, en cada experimento, existe un período de entrada de 7 días y solo los usuarios expuestos durante ese período entran en el análisis, con la ventana posterior a la exposición usada para calcular la métrica. Su retención semanal en la semana 2, por ejemplo, usa los datos de los 14 días desde la exposición, no los 14 primeros días del calendario del test.

Lo que esto cuesta en muestra

duración del test fracción aprovechable para métrica D7 fracción aprovechable para métrica D30
10 días 40,00% 0,00%
14 días 57,14% 0,00%
21 días 71,43% 0,00%
28 días 78,57% 0,00%
35 días 82,86% 17,14%
42 días 85,71% 30,95%
56 días 89,29% 48,21%

La fila que más sorprende a los equipos es la de D30: un test de 28 días tiene cero por ciento de muestra aprovechable para una métrica de 30 días. Ningún usuario tuvo treinta días. Si tu informe muestra una retención D30 de un test de cuatro semanas, ese número fue construido de alguna forma que no es la que el nombre sugiere.

Y el coste en reclutamiento, usando el mismo escenario de la simulación (base del 30,00 por ciento, detectar más 8,00 por ciento relativo, 95 por ciento de confianza y 80 por ciento de poder):

duración del test N por variante exigida por la estadística usuarios a reclutar por variante
14 días 5.849 10.236
28 días 5.849 7.445
42 días 5.849 6.824

El patrón es claro y es útil a la hora de negociar plazos: la pérdida por inmadurez cae rápido en los primeros días y después se estanca. Ir de 14 a 28 días ahorra 2.791 usuarios por variante; ir de 28 a 42 ahorra solo 621 más. El punto de inflexión suele estar entre tres y cuatro veces la ventana de la métrica.

Para hacer esa cuenta con tus números, usa la calculadora de tamaño de muestra para obtener la N y después divide por la fracción aprovechable de la tabla de arriba. La calculadora de duración cierra el ciclo con el tráfico semanal real.

¿Correr más tiempo lo resuelve todo? No

Existe una lectura optimista de este artículo que dice “entonces basta con correr más tiempo”. Es parcialmente cierta y vale la pena corregirla, porque Kohavi y coautores midieron exactamente el límite de esa idea.

Para métricas acotadas, como la tasa de clic, el intervalo de confianza del efecto porcentual realmente se encoge con la duración, y correr más tiempo aumenta el poder. Pero para métricas como sesiones por usuario observaron que el intervalo de confianza del efecto porcentual no se encoge con el tiempo. La explicación es que el ancho del intervalo está gobernado por el coeficiente de variación dividido por la raíz del tamaño de muestra, y el coeficiente de variación de esas métricas crece a lo largo del experimento, porque la desviación estándar crece más rápido que la media. En sus datos, la razón entre coeficiente de variación y raíz de la muestra se mantuvo prácticamente constante a lo largo de 31 días, con una variación menor al 10 por ciento.

La traducción práctica, en sus palabras: para métricas como sesiones por usuario, el poder estadístico no necesariamente aumenta conforme el experimento corre más tiempo, y cuando se quiere detectar efecto en esas métricas hay que correr con más usuarios por día, no con más días.

Así que la respuesta correcta es una combinación:

Correr semanas enteras sigue siendo obligatorio por el motivo de siempre, el efecto de día de la semana, tratado en ciclo semanal. Una semana es el mínimo para ver ese efecto.

Guion de madurez de cohorte en cinco pasos

  1. Para toda métrica con ventana, escribe la ventana. “Retención” no es una métrica; “activo entre el día 6 y el día 8 tras la entrada” sí lo es. Sin eso, nadie sabe si la cohorte está madura.
  2. Compara la distribución de fechas de entrada entre los brazos, no solo el total por brazo. Un histograma lo resuelve. Distribuciones distintas con una métrica de ventana significan cohorte cerrada obligatoria.
  3. Fija la regla de corte en el plan de análisis, antes de correr. Elegir entre lectura ingenua y lectura cerrada después de ver las dos es elegir el resultado.
  4. Reporta el denominador junto con la tasa. “29,54 por ciento de retención D7 sobre 19.800 usuarios maduros de 25.200 inscritos” es una frase completa. “23,2 por ciento de retención” no lo es.
  5. Dimensiona el test con la fracción aprovechable ya descontada. La N que devuelve la calculadora es la que necesitas analizar, no la que necesitas exponer.

Errores comunes

Hazlo automático en Donnu

El motivo de que esta distorsión pase desapercibida casi nunca es falta de rigor, es la forma del dato: la mayoría de los paneles de test A/B guarda un indicador de conversión o retención por usuario y no guarda la fecha de entrada de ese usuario en el experimento. Sin la fecha de entrada no existe edad de cohorte, y sin edad de cohorte no hay manera de cerrar la cohorte.

Donnu guarda la fecha de asignación de cada usuario junto con su resultado, lo que convierte la lectura de cohorte cerrada en un filtro y no en una reconstrucción. Si tu montaje actual no la guarda, el paso inmediato es empezar a grabar la fecha de entrada hoy, y mientras tanto adoptar la regla conservadora: para cualquier métrica con ventana, leer el test solo después de transcurrida la ventana contada desde la última entrada. Para dimensionar el test ya con el descuento de la cohorte inmadura, la calculadora de tamaño de muestra da la N y la tabla de este artículo da el divisor.

Referencias

Lee también: Retraso de conversión · Métricas de tiempo hasta el evento · SRM y reparto desigual · Rollout progresivo · Ciclo semanal · Calculadora de tamaño de muestra · Leia em português

Preguntas frecuentes

¿Qué es la madurez de cohorte en un test A/B?
Es cuánto tiempo de seguimiento tuvo cada usuario después de entrar en el test. En un test con entrada continua de tráfico, quien entró el primer día de un test de 28 días tiene 28 días de seguimiento y quien entró el día 27 tiene uno. Una métrica que exige una ventana fija, como la retención en D7, solo es calculable para quien ya completó esa ventana.
¿Por qué la retención D7 aparece menor de lo que es de verdad?
Porque el denominador estándar incluye a todos los que entraron en el test, incluso a quienes todavía no tuvieron siete días, y esas personas entran en el cálculo como no retenidas por falta de dato, no por comportamiento. En la simulación de esta guía, la retención D7 verdadera era del 29,5404 por ciento y la lectura ingenua devolvió 23,2103 por ciento, una subestimación de 6,3301 puntos, o el 21,43 por ciento del valor real.
Si la distorsión afecta a los dos brazos por igual, ¿el test sigue siendo válido?
La comparación relativa sobrevive cuando los dos brazos reclutan al mismo ritmo. Lo que no sobrevive es el nivel, así que cualquier comparación con una meta, con el histórico o con un benchmark de mercado queda mal. Y basta con que un brazo reclute a un ritmo distinto para que la comparación también se rompa.
¿Cómo invierte el resultado un lanzamiento en rampa?
Porque la rampa deja la cohorte del brazo liberado más tarde sistemáticamente más joven. En la segunda simulación de esta guía, la variante era genuinamente un 8 por ciento mejor y la lectura ingenua devolvió menos 5,99 por ciento con un valor p de 0,000723, es decir, una derrota estadísticamente significativa. La misma lectura restringida a la cohorte madura devolvió más 8,22 por ciento con un valor p de 0,000005. El signo se invirtió.
¿Cuál es el arreglo?
Cerrar la cohorte: solo entran en el análisis los usuarios que entraron hasta el día final menos la ventana de la métrica. En un test de 28 días con métrica D7, eso significa analizar a quienes entraron en los primeros 22 días, cada uno con sus siete días completos. El coste es la muestra descartada, que en ese ejemplo es del 21,43 por ciento.
¿Cuánto tiempo más necesita correr el test?
La fracción aprovechable es la duración del test menos la ventana, más uno, dividida por la duración. Para una métrica D7, un test de 14 días aprovecha el 57,14 por ciento de la muestra y uno de 42 días aprovecha el 85,71 por ciento. En la simulación de esta guía, la N de 5.849 por variante se convierte en 10.236 usuarios a reclutar en un test de 14 días y 6.824 en uno de 42.