Estadística

Unidad de Aleatorización en Test A/B: usuario o sesión

La unidad de aleatorización decide qué mide el test y cuánta muestra tienes de verdad. Cómo elegir entre usuario, sesión y pageview sin inflar el valor p.

Ilustración plana de tres recipientes redondeados en fila, cada uno con pequeños círculos dentro, con una línea vertical fina que separa los recipientes enteros en dos grupos, en verde profundo y verde menta

La unidad de aleatorización es el nivel en el que ocurre el sorteo entre control y tratamiento, y decide dos cosas a la vez: qué tipo de efecto puede medir el test y cuánta muestra estadística tienes en realidad. Cambiar de unidad no es un detalle de implementación, es un intercambio entre poder y validez, y la versión que produce el valor p más bonito casi siempre es la equivocada. Esta guía cubre la diferencia entre unidad de aleatorización y unidad de análisis, un ejemplo trabajado en el que el mismo test sale con z igual a 3,680 o 6,374 según la unidad elegida para leerlo, el efecto de diseño que explica la diferencia, y una regla de decisión para elegir entre usuario, sesión, pageview y conglomerado. Forma parte de nuestra guía completa de test A/B y continúa el razonamiento de métricas de ratio en tests A/B.

Las dos unidades que tiene todo test

Todo experimento online carga dos unidades diferentes, y la mayoría de las discusiones confusas sobre resultados nace de tratarlas como si fueran una sola.

Deng, Knoblich y Lu definen ambas con precisión en el artículo de KDD 2018 sobre el método delta en análisis de métricas. La unidad de aleatorización es el nivel de granularidad en el que se hace el muestreo o el sorteo. La unidad de análisis es el nivel de agregación en el que se calcula la métrica. Según los autores, el análisis es directo cuando ambas coinciden, por ejemplo cuando se aleatoriza por usuario y también se calcula el ingreso medio por usuario.

El problema aparece cuando no coinciden, y eso es más común de lo que parece. También según los autores, para el mismo experimento normalmente existen métricas con unidades de análisis diferentes: relatan que la mayoría de los experimentos aleatorizados por usuario ejecutados en la plataforma de experimentación de Microsoft contiene tanto métricas a nivel de usuario como métricas a nivel de página.

Existe una restricción dura en esa relación, y es lo primero que hay que entender antes de elegir cualquier unidad. La unidad de aleatorización no puede ser más granular que la unidad de análisis. Los autores explican por qué: si lo fuera, la unidad de análisis contendría observaciones bajo tratamiento y bajo control al mismo tiempo, lo que anula el propósito de diferenciar los dos grupos. Aleatorizar por pageview y después reportar “tasa de conversión por usuario” significa que casi todo usuario habrá visto los dos lados, y la diferencia medida entre brazos se encoge por construcción, no por ausencia de efecto.

Jerarquía de unidades y dónde puede caer la línea de aleatorizaciónTres niveles apilados de granularidad. Arriba, dos usuarios, cada uno representado por un rectángulo ancho. En el medio, tres sesiones dentro de cada usuario. Abajo, varias páginas dentro de cada sesión. Una línea de corte marca el nivel de la aleatorización arriba, mostrando que usuarios enteros van a un brazo o al otro, mientras sesiones y páginas heredan la asignación de quien está encima. Una marca de prohibido indica que la línea de aleatorización no puede quedar por debajo de la unidad que la métrica usa como denominador.La línea de aleatorización baja hasta donde la métrica permite, nunca másusuarioasignado a Basignado a Asesiónpáginalínea de la aleatorizaciónAleatorizando arriba, cada sesión y cada página heredan el brazo del usuario: la experiencia queda consistente.Bajar la línea hasta la página y aun así medir por usuario pone al mismo usuario en los dos brazos y borra el efecto.La métrica elige el suelo: la unidad de aleatorización nunca puede ser más fina que su denominador.
La jerarquía es siempre la misma. Lo que cambia de test a test es a qué altura se traza la línea de la aleatorización, y esa altura tiene consecuencias que aparecen en el informe.

Ejemplo trabajado: el mismo test, dos lecturas

Una tienda ejecuta un test aleatorizando por usuario. Son 100.000 usuarios por brazo, y cada usuario hace en promedio 3 sesiones durante el período. La métrica de interés es “convirtió al menos una vez”.

Pega los números de abajo en la calculadora para reproducir el cálculo línea por línea.

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.

Primero, la lectura correcta, con la unidad de análisis igual a la unidad de aleatorización:

Lectura por usuario Usuarios Conversiones Tasa
Control 100.000 12.000 12,000 por ciento
Tratamiento 100.000 12.540 12,540 por ciento

En pantalla, la calculadora muestra tasas de 12,00 y 12,54 por ciento, lift de más 4,5 por ciento, valor p de 0,0002 e intervalo del 95 por ciento de más 0,3 a más 0,8 punto porcentual, con veredicto de victoria de B. La interfaz redondea la visualización y no muestra el puntaje z, así que los valores exactos del motor, que son los usados en este artículo, quedan así: más 0,540 punto porcentual, más 4,500 por ciento relativo, z = 3,680, valor p de 0,00023, intervalo de más 0,252 a más 0,828 punto porcentual. Un resultado sólido y nada espectacular.

Ahora lo mismo leído por sesión. Como cada usuario hizo 3 sesiones, el panel muestra 300.000 sesiones por brazo, y la tasa de conversión por sesión es la misma:

Lectura por sesión Sesiones Conversiones Tasa
Control 300.000 36.000 12,000 por ciento
Tratamiento 300.000 37.620 12,540 por ciento

La calculadora muestra las mismas tasas y el mismo lift de más 4,5 por ciento, y el valor p cae al rango que ella exhibe como menor que 0,0001. En precisión completa: mismo lift de más 4,500 por ciento relativo, z = 6,374, valor p de 0,00000000018, intervalo de más 0,374 a más 0,706 punto porcentual. Nada cambió en el experimento. El único movimiento fue cambiar el denominador de la métrica de usuario a sesión.

La razón entre los dos valores de z es exactamente la raíz de 3, el número de sesiones por usuario: 6,374 dividido por 3,680 da 1,7321. Eso no es coincidencia, es la firma de un error estándar calculado como si cada sesión fuera una observación independiente nueva.

El efecto de diseño: cuánto de la muestra es real

Las sesiones de un mismo usuario no son independientes. Quien compra en una visita tiende a comprar en otra; quien nunca convierte tiende a no convertir en ninguna. La cantidad que mide esto es la correlación intraclase, y en el artículo de Deng, Knoblich y Lu aparece definida como la fracción de la varianza total que viene de la varianza entre conglomerados.

Para conglomerados de tamaño igual, los autores registran la forma cerrada de la varianza, y de ella sale el factor conocido como efecto de diseño: 1 más el producto de la correlación intraclase por el tamaño del conglomerado menos 1. Ellos describen los dos extremos con claridad. Cuando la varianza dentro del conglomerado es cero, todas las observaciones del conglomerado son idénticas, la correlación intraclase vale 1 y la varianza pasa a depender solo del número de conglomerados. Cuando la varianza entre conglomerados es cero, las observaciones son de hecho independientes, la correlación intraclase vale 0, y la fórmula colapsa en el caso simple.

Aplicando esto a nuestro test, con conglomerados de 3 sesiones por usuario:

Correlación intraclase Efecto de diseño z corregido Valor p Sesiones efectivas por brazo
0,00 1,000 6,374 0,00000000018 300.000
0,25 1,500 5,205 0,00000019 200.000
0,50 2,000 4,507 0,0000066 150.000
0,60 2,200 4,298 0,000017 136.364
1,00 3,000 3,680 0,00023 100.000

Fíjate en la última fila: con correlación intraclase igual a 1, el z corregido vuelve a ser exactamente el 3,680 de la lectura por usuario, y la muestra efectiva vuelve a ser exactamente los 100.000 usuarios. La fórmula degrada al caso correcto, lo que es una buena verificación de sanidad.

Y fíjate en lo que dice de hecho. Las 300.000 sesiones nunca valieron 300.000 unidades. Valen algo entre 100.000 y 300.000, dependiendo de cuánto del comportamiento es propiedad del usuario y cuánto es propiedad de la visita. Sesión extra del mismo visitante no es muestra nueva, es información parcialmente repetida.

Muestra efectiva por brazo según la correlación intraclaseCinco barras horizontales a escala que representan las sesiones efectivas por brazo. Con correlación intraclase cero, la barra ocupa todo el ancho, correspondiendo a 300 mil sesiones. Conforme la correlación sube a 0,25, 0,5, 0,6 y 1, las barras se acortan a 200 mil, 150 mil, 136 mil y 100 mil, hasta coincidir con el número de usuarios realmente aleatorizados.Sesiones nominales: 300.000. Sesiones que el test realmente usa: dependerho 0,00300.000rho 0,25200.000rho 0,50150.000rho 0,60136.364rho 1,00100.000 (igual al nº de usuarios)La línea naranja marca el suelo: el número de unidades que de hecho fueron aleatorizadas.Ninguna elección de denominador logra producir más información de la que creó la aleatorización.
La ganancia de contar sesiones existe, pero siempre es menor que la razón de conteos. Cuanto más pertenece el comportamiento al usuario, menor se vuelve.

Una salvedad honesta de los propios autores: esa fórmula cerrada, pese a ser teóricamente correcta, tiene valor práctico limitado, porque asume que todos los conglomerados tienen el mismo tamaño y la misma distribución, lo que no ocurre en la vida real. Los usuarios hacen números muy distintos de sesiones. La salida que proponen es el método delta, aplicado directamente a la definición de la métrica como razón de dos medias a nivel de la unidad aleatorizada, y la misma lógica que sustenta el tratamiento de métricas de ratio.

Vale saber el tamaño del error que se comete al ignorar esto. En la simulación publicada en el mismo artículo, con mil conglomerados de tamaños heterogéneos, la desviación estándar verdadera del estimador era 0,00895 y el error estándar calculado por el método ingenuo salió 0,00522, es decir, cerca de 42 por ciento menor que el real. El método delta devolvió 0,00908, próximo al verdadero.

Cómo elegir la unidad de aleatorización

La elección no es una cuestión de preferencia técnica, es una secuencia de restricciones. Recórrela en orden.

Árbol de decisión para elegir la unidad de aleatorizaciónFlujo con cuatro preguntas en secuencia. La primera pregunta es si la exposición se filtra más allá de quien fue aleatorizado; si es así, la unidad es conglomerado, región o bloque de tiempo. La segunda es si existe identificador estable de usuario; si no, la unidad es sesión o dispositivo, con la salvedad de que el efecto medido queda limitado a una visita. La tercera es si el efecto depende de consistencia o de acumulación entre visitas; si es así, la unidad tiene que ser usuario. Si ninguna de las anteriores obliga, la respuesta por defecto sigue siendo usuario.Cuatro preguntas, en orden. La primera que responda sí decide.1. ¿La exposición se filtra a quien no fue aleatorizado?conglomerado, región o bloque de tiempo2. ¿Existe identificador estable de usuario?no: sesión o dispositivo, con salvedad3. ¿El efecto depende de consistencia entre visitas?usuario, obligatoriamente4. ¿Ninguna de las anteriores obliga?usuario, por defectoLa pregunta 2 es la única que empuja hacia abajo en la jerarquía, y es una limitación de infraestructura,no una elección de diseño. Las preguntas 1 y 3 empujan hacia arriba, y empujan por motivos de validez.Ninguna de las cuatro preguntas es “dónde consigo el valor p menor”.
Fíjate en que la búsqueda de poder estadístico no entra en el árbol. El poder es consecuencia de la unidad elegida, nunca criterio para elegirla.

Detallando las opciones:

Unidad de aleatorización Cuándo es la elección correcta Qué pierdes
Usuario (cookie, cuenta, dispositivo) Por defecto. Cualquier cambio que el visitante pueda percibir entre visitas Nada, más allá de necesitar identificador estable
Sesión El cambio solo existe dentro de la visita y no deja memoria, o no hay identificador estable Consistencia entre visitas, y cualquier efecto que se acumule
Pageview Prácticamente nunca, en test de producto Consistencia dentro de la propia visita; contamina la lectura
Cuenta u organización Producto B2B en el que colegas no pueden ver pantallas diferentes Poder, porque la cuenta se vuelve el conglomerado
Región geográfica Intervención que no es entregable por usuario, como medios offline Mucho poder, ver experimento geográfico
Bloque de tiempo Marketplace con oferta compartida entre los brazos Poder, y exige tratamiento de dependencia temporal, ver test switchback

Dos de las filas de esa tabla merecen nota. Deng, Knoblich y Lu citan como razones reales para aleatorizar a nivel de conglomerado tanto política corporativa que prohíbe que usuarios de la misma organización reciban experiencias diferentes, como la necesidad de reducir sesgo en presencia de interferencia de red, que es exactamente el problema tratado en interferencia entre variantes.

El costo en muestra de subir la unidad

Subir la unidad de aleatorización cuesta poder, y el cálculo se puede hacer antes de empezar. Con base de conversión del 12 por ciento y efecto mínimo detectable del 4,5 por ciento relativo, el motor de tamaño de muestra devuelve 57.948 usuarios por variación al 95 por ciento de confianza y 80 por ciento de poder.

Si fueras a aleatorizar por sesión en vez de por usuario, necesitarías ese mismo número en sesiones, lo que en principio parece 3 veces más barato. Pero esas sesiones correlacionadas no valen una unidad cada una. Aplicando el efecto de diseño al número necesario:

Escenario Unidades necesarias por variación Equivalente en usuarios
Aleatorización por usuario 57.948 usuarios 57.948
Aleatorización por sesión, correlación intraclase 0 (irreal) 57.948 sesiones 19.316
Aleatorización por sesión, correlación intraclase 0,25 86.922 sesiones 28.974
Aleatorización por sesión, correlación intraclase 0,50 115.896 sesiones 38.632

El descuento existe, pero es menor que la razón de conteos y disminuye rápido conforme sube la correlación. Y, más importante, el descuento solo es real si el efecto que quieres medir cabe dentro de una única sesión. Si no cabe, no estás ahorrando muestra, estás midiendo otra cosa.

Cuándo aleatorizar por sesión es legítimo

Existe un caso honesto, y vale nombrarlo para que no parezca que la sesión es siempre pecado:

Fuera de eso, el precio es alto. Aleatorizar por sesión significa que el mismo visitante ve el control el lunes y el tratamiento el miércoles, y cualquier efecto que dependa de reconocimiento, hábito o aprendizaje queda diluido entre los brazos. También significa contaminación: parte de la experiencia del brazo A ya está en la cabeza de quien está siendo medido en el brazo B. El pariente cercano de ese problema aparece en efecto novedad en tests A/B.

Checklist antes de ejecutar

  1. ¿La unidad de aleatorización está declarada en algún lugar? Si nadie lo escribió, nadie va a verificarlo a la hora de leer el resultado.
  2. ¿La métrica primaria tiene la misma unidad en el denominador? Si no, el intervalo de confianza necesita método delta o corrección por efecto de diseño.
  3. ¿La unidad de aleatorización es igual o más gruesa que la unidad de análisis? Nunca más fina.
  4. ¿El identificador de la unidad es estable durante todo el test? Una cookie que rota transforma la aleatorización por usuario en aleatorización por sesión sin avisar a nadie.
  5. ¿El reparto por brazo coincide con lo planificado en la unidad aleatorizada? Compruébalo con el verificador de SRM, en la unidad correcta.
  6. ¿El informe muestra en qué unidad se calculó cada número? Dos métricas en unidades diferentes en la misma tabla necesitan estar etiquetadas.
  7. ¿El cálculo de poder se hizo en la unidad aleatorizada? No en la más numerosa.

Errores comunes

Hazlo automático en Donnu

El error caro aquí no es elegir la unidad equivocada al inicio, es elegir una unidad al inicio y leer el resultado en otra al final, sin que nada en el informe señale el cambio.

En Donnu, la unidad de aleatorización forma parte de la declaración del experimento, y cada métrica del informe carga la etiqueta de la unidad en la que se calculó su denominador. Cuando el denominador es más fino que la unidad aleatorizada, el aviso de dependencia aparece junto al intervalo de confianza en vez de quedar escondido en una nota al pie. Y si quieres rehacer cualquier cálculo a mano, la calculadora de valor p y la calculadora de tamaño de muestra aceptan los conteos brutos en la unidad que elijas.

Referencias

Lee también: Métricas de ratio en tests A/B · Interferencia entre variantes · Test switchback · SRM: reparto desigual de tráfico · Análisis por disparo y dilución · Calculadora de valor p · Leia em português

Preguntas frecuentes

¿Qué es la unidad de aleatorización en un test A/B?
Es el nivel de granularidad en el que ocurre el sorteo entre control y tratamiento. Deng, Knoblich y Lu definen la unidad de aleatorización como el nivel de granularidad en el que se hace el muestreo o la aleatorización, y la unidad de análisis como el nivel de agregación en el que se calcula la métrica. En la práctica, la unidad de aleatorización es quien recibe un lado del test y se queda en él: un usuario identificado por cookie, una sesión, un dispositivo, una cuenta, una región o un bloque de tiempo.
¿Cuál es la diferencia entre unidad de aleatorización y unidad de análisis?
La unidad de aleatorización es lo que el sorteo asigna; la unidad de análisis es lo que la métrica cuenta en el denominador. Cuando ambas coinciden, el análisis es directo: aleatorizas por usuario y calculas ingreso medio por usuario. Cuando el denominador de la métrica es más fino que la unidad aleatorizada, como aleatorizar por usuario y medir tasa de clic por página, cada unidad aleatorizada se convierte en un conglomerado de varias observaciones correlacionadas, y el error estándar calculado como si fueran independientes sale menor que el verdadero.
¿Puedo aleatorizar por sesión en vez de por usuario?
Puedes, y a veces es la elección correcta, pero el precio es alto y tiene que ser consciente. Al aleatorizar por sesión, el mismo visitante ve el control en una visita y el tratamiento en la siguiente, lo que rompe cualquier efecto que dependa de consistencia o de acumulación entre visitas y contamina la lectura entre los brazos. Aleatorizar por sesión tiene sentido sobre todo cuando la decisión testeada solo existe dentro de una visita y no deja memoria, o cuando no existe un identificador estable de usuario.
¿La unidad de aleatorización puede ser más fina que la unidad de análisis?
No. Deng, Knoblich y Lu son explícitos: la unidad de aleatorización no puede ser más granular que la unidad de análisis, porque en ese caso la unidad de análisis contendría observaciones bajo tratamiento y bajo control al mismo tiempo, anulando el propósito de diferenciar los dos grupos. Aleatorizar por pageview y reportar una métrica por usuario significa que casi todo usuario está en los dos brazos, y la diferencia medida entre brazos tiende a cero por construcción.
¿Cómo corregir el valor p cuando el análisis es más fino que la aleatorización?
Estimando el efecto de diseño e inflando la varianza por él. Para conglomerados de tamaño igual a m, el factor vale 1 más el producto del coeficiente de correlación intraclase por el tamaño del conglomerado menos 1, con la correlación intraclase midiendo cuánto de la varianza total viene de la varianza entre conglomerados. Los propios autores advierten que esa fórmula cerrada tiene valor práctico limitado porque asume conglomerados de tamaño igual, algo que no ocurre en la vida real; la salida que proponen es el método delta aplicado directamente a la definición de la métrica.
¿Aleatorizar por sesión da más poder estadístico que aleatorizar por usuario?
Menos de lo que sugiere el conteo. El número de sesiones es mayor que el número de usuarios, pero las sesiones del mismo visitante no son independientes, así que cada sesión extra vale menos que una unidad nueva. En el límite en que el comportamiento está totalmente determinado por el usuario, la ganancia es cero: la muestra efectiva vuelve a ser el número de usuarios. El poder real queda entre esos dos extremos, y depende de la correlación intraclase de tu propio dato, no de un valor de referencia genérico.