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.

📚 Este artículo es parte de la guía Significancia Estadística en Tests A/B: La Guía.
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:
- quien entró el día 1 tiene 28 días de seguimiento
- quien entró el día 14 tiene 15
- quien entró el día 27 tiene 2
- quien entró el día 28 tiene 1
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.
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:
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:
- comparar 23,21 por ciento con una meta de 30 por ciento acusa fracaso donde hay éxito
- comparar con el histórico de la empresa, medido con otra duración, compara cosas distintas
- comparar con un benchmark de mercado es pura adivinanza
- proyectar ingresos a partir de una retención subestimada en un 21 por ciento yerra la proyección en un 21 por ciento
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.
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:
- El SRM detecta un reparto desigual que no esperabas. En una rampa planificada, el reparto desigual es el diseño, así que la alarma es esperada y la descartas conscientemente.
- Descartar la alarma de SRM no descarta el problema de madurez. Son cosas distintas. Puedes tener brazos del mismo tamaño y cohortes de edades distintas, si las entradas se distribuyeron de forma diferente a lo largo de los días sin cambiar el total.
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:
- contra la inmadurez de cohorte, más días ayudan, y la tabla de arriba dice cuánto
- contra la varianza de una métrica de conteo, más días no ayudan, y lo que ayuda es más tráfico por día
- contra el efecto novedad, solo más días ayudan, y es esa la razón que Kohavi y coautores dan para correr más de una semana aunque el poder no mejore
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
- 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.
- 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.
- 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.
- 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.
- 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
- Usar el total de inscritos como denominador de una métrica con ventana. El error central. Convierte dato faltante en fracaso.
- Confiar en el lift relativo porque “el sesgo afecta a los dos lados”. Solo afecta por igual si los dos lados reclutaron igual. Una rampa, una liberación por región, una cuota por plan y una corrección de bug a mitad del test rompen esa premisa.
- Creer que la comprobación de SRM cubre esto. Compara tamaños, no edades. Brazos del mismo tamaño pueden tener distribuciones de entrada distintas.
- Reportar D30 de un test de 28 días. No existe. Si aparece un número, vino de otra definición, y esa definición tiene que estar escrita.
- Comparar la retención de un test con la retención del panel de producto. El panel suele usar cohorte cerrada y el test suele no usarla. La diferencia de nivel no es el efecto, es la definición.
- Descartar cohorte inmadura sin decir cuánto se descartó. Cerrar la cohorte es correcto y reduce la muestra; omitirlo del informe convierte un método en magia.
- Tratar esto como sinónimo de retraso de conversión. Son primos y no gemelos: el retraso de conversión es el evento que todavía va a llegar; la madurez de cohorte es la ventana de observación que todavía no cerró. El arreglo se parece, la causa no.
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
- Kohavi, R., Deng, A., Frasca, B., Longbotham, R., Walker, T. y Xu, Y. Trustworthy Online Controlled Experiments: Five Puzzling Outcomes Explained. KDD 2012, Microsoft. Fuente del punto de que los experimentos online reclutan usuarios continuamente, en vez de tener un período de reclutamiento antes del experimento, y de que el tamaño de muestra crece mientras el experimento corre; del hallazgo de que, para métricas como sesiones por usuario, el intervalo de confianza del efecto porcentual no se encoge con el tiempo y el poder estadístico no necesariamente aumenta con la duración; de la explicación de que el ancho del intervalo está gobernado por el coeficiente de variación dividido por la raíz del tamaño de muestra y de que ese coeficiente crece a lo largo del experimento porque la desviación estándar crece más rápido que la media; de la medida de que la razón entre coeficiente de variación y raíz de la muestra varió menos del 10 por ciento a lo largo de 31 días; de la recomendación de correr con más usuarios por día en esos casos; y de la razón para correr más de una semana aun así, que es el riesgo de efecto de primacía y novedad, con una semana como mínimo para ver el efecto de día de la semana. exp-platform.com.
- Chandar, P., St. Thomas, B., Maystre, L., Pappu, V., Sanchis-Ojeda, R., Wu, T., Carterette, B., Lalmas, M. y Jebara, T. Using Survival Models to Estimate User Engagement in Online Experiments. WWW 2022, Spotify. Fuente del diseño de cohorte de entrada cerrada: en cada experimento del corpus 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, de modo que la retención semanal de la semana 2 usa los datos de los 14 días desde la exposición; y del corpus de 51 tests corridos durante al menos 28 días después de ese período de entrada. mounia-lalmas.blog.
- Kohavi, R., Deng, A., Frasca, B., Walker, T., Xu, Y. y Pohlmann, N. Online Controlled Experiments at Large Scale. KDD 2013, Microsoft. Fuente de la regla de que el marcador final del experimento se cierra en un múltiplo de semanas, usualmente dos, que es la restricción de calendario dentro de la cual la cohorte cerrada tiene que caber. exp-platform.com.
- Chapelle, O. Modeling Delayed Feedback in Display Advertising. KDD 2014, Criteo Labs. Fuente del coste de esperar a que cierre la ventana: en su estudio, el tráfico proveniente de campañas nuevas llega al 11,3 por ciento después de 26 días, lo que muestra que la espera no es gratuita porque el entorno medido cambia mientras se espera. wnzhang.net.
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.