Estadística

Métricas de Conteo en Test A/B: Poisson y dispersión

Las métricas de conteo en test A/B casi nunca siguen Poisson. Cómo medir la sobredispersión, dimensionar bien y no subestimar el error a la mitad.

Ilustración plana de varias fichas circulares verdes apiladas en montones de alturas muy desiguales sobre una superficie, con dos pilas bastante más altas que las demás

Sesiones por usuario, ítems por pedido y páginas por sesión son métricas de conteo, y su varianza casi siempre es mayor que la media. Eso se llama sobredispersión, y tiene un precio directo en tamaño de muestra: con índice de dispersión 4, que es un valor común en datos de producto, el test que el modelo de Poisson dimensionaría con 2.011 usuarios por variación necesita en realidad 8.194. Si usted ignora eso y calcula el error estándar como Poisson manda, sale a la mitad del correcto, y el mismo dato que da z de 3,42 en la cuenta correcta da 6,85 en la cuenta ingenua. Esta guía muestra cómo medir la dispersión, cómo dimensionar bien y cuándo cambiar el conteo por un proxy binario. Forma parte de nuestra guía completa de test A/B y es la pareja directa de tamaño de muestra para métricas continuas, que cubre medias e ingreso.

Las métricas de conteo no son proporción ni media común

La mayoría de las herramientas de test A/B solo sabe hacer una cuenta: comparar dos proporciones. Eso cubre tasa de conversión, tasa de clic, tasa de rebote, cualquier cosa en la que cada usuario aporte un cero o un uno.

El conteo es otra cosa. Cada usuario aporta un entero no negativo, y la distribución de esos enteros tiene una cola:

métrica de conteo unidad dónde aparece
sesiones por usuario usuario asignado engagement, retención semanal
páginas por sesión sesión profundidad de navegación, búsqueda interna
ítems por pedido pedido ecommerce, carrito medio
búsquedas por visita visita búsqueda en el sitio, catálogo
mensajes enviados por cuenta cuenta productos de comunicación
tickets abiertos por cliente cliente métrica de guardarraíl de soporte

Todas ellas comparten el mismo comportamiento: un montón de usuarios con cero, uno o dos eventos, y una minoría con decenas. Es la misma cola larga que ya discutimos en outliers y capping, solo que aquí nace de la naturaleza del conteo, no de un valor monetario extremo.

Poisson asume que la varianza es igual a la media

El modelo estándar para conteo es el de Poisson. Tiene un único parámetro, que es al mismo tiempo la media y la varianza de la distribución. Esa es toda la suposición, y casi nunca se cumple en datos de producto.

El motivo es simple y no es estadístico: los usuarios no son iguales entre sí. Un Poisson con media 3,2 describiría una población en la que todo el mundo tiene la misma propensión a generar sesiones y la variación es solo suerte. Su base real tiene un grupo que entra una vez al mes y otro que entra tres veces al día. Esa heterogeneidad entre usuarios entra en la varianza total y no entra en la media.

Poisson contra binomial negativa con la misma mediaGráfico de barras superpuestas que muestra dos distribuciones de conteo de sesiones por usuario, ambas con media 3,2. Las barras oscuras representan el modelo de Poisson, concentradas entre una y seis sesiones, con pico en tres y prácticamente nada por encima de nueve. Las barras claras representan la binomial negativa con varianza 12,8, que tiene mucha más masa en cero y una cola visible que se extiende hasta quince sesiones o más. Las dos distribuciones tienen la misma media, pero la segunda está mucho más dispersa.Misma media de 3,2 sesiones por usuario, dispersión completamente distintasesiones en la semana, por usuarioproporción de usuarios036913 o másPoisson (varianza 3,2)binomial negativa (varianza 12,8)
Las dos distribuciones tienen media 3,2. La binomial negativa acomoda la heterogeneidad entre usuarios: más gente en cero y una cola real de usuarios muy activos.

El modelo que acomoda esto es la binomial negativa, que tiene dos parámetros: la media y un parámetro de dispersión, normalmente escrito como kappa. La relación entre ellos es directa:

varianza = media + kappa por el cuadrado de la media

Con kappa igual a cero, la binomial negativa se vuelve exactamente Poisson. Cuanto mayor el kappa, más dispersa la distribución alrededor de la misma media.

Mida la dispersión antes de dimensionar nada

No necesita ninguna herramienta especial para saber si tiene sobredispersión. Tome los datos de una semana histórica, calcule la media y la varianza del conteo por usuario, y divida una por la otra. Ese es el índice de dispersión:

índice de dispersión = varianza dividida por la media

Bajo Poisson vale 1. En datos de producto suele quedar entre 2 y 8. Y se relaciona con el kappa de forma exacta: el índice de dispersión es igual a 1 más kappa por la media, lo que permite ir de uno al otro sin simulación.

Con media de 3,2 sesiones por usuario en la semana y un objetivo de detectar más 5 por ciento en la tasa, la cuenta cambia así:

varianza observada índice de dispersión kappa usuarios por variación días a 40.000 usuarios por semana
3,2 1,0 (Poisson) 0,0000 2.011 1
6,4 2,0 0,3125 4.072 2
9,6 3,0 0,6250 6.133 3
12,8 4,0 0,9375 8.194 3
19,2 6,0 1,5625 12.315 5

Note que la relación es prácticamente lineal en el índice de dispersión. Ignorar la sobredispersión no es un redondeo, es un error de factor entero. Quien dimensionó por Poisson un test con índice de dispersión 4 está corriendo con un cuarto de la muestra necesaria, y va a leer el resultado como “no dio nada” cuando el test en realidad nunca tuvo poder.

La fórmula, y la prueba de que está correcta

La referencia para dimensionar la razón entre dos tasas de conteo es Zhu y Lakkis, publicada en Statistics in Medicine en 2014. Es la fórmula implementada en software de dimensionamiento y la que la documentación de PASS describe como método 3, la versión que estima la varianza nula por máxima verosimilitud. Zhu y Lakkis registran que sus simulaciones indican que los métodos 2 y 3 son más precisos que el método 1.

Aquí está, en JavaScript, exactamente como la usamos para generar las tablas de este artículo:

// Zhu y Lakkis (2014), metodo 3 (maxima verosimilitud bajo la nula).
// lambda1 = tasa del control | RR = razon de tasas objetivo
// kappa   = parametro de dispersion | mut = tiempo medio de exposicion
function nbSampleSize({ lambda1, RR, kappa, mut = 1, R = 1, alpha = 0.05, power = 0.8 }) {
  const lambda2 = lambda1 * RR;
  const VA = (1 / mut) * (1 / lambda1 + 1 / (R * lambda2)) + ((1 + R) * kappa) / R;
  const V0 = Math.pow(1 + R, 2) / (mut * R * (lambda1 + R * lambda2)) + ((1 + R) * kappa) / R;
  const za = zCritical(alpha, 2);   // 1,9600 en el bilateral al 5%
  const zb = normInv(power);        // 0,8416 para 80% de poder
  return Math.ceil(
    Math.pow(za * Math.sqrt(V0) + zb * Math.sqrt(VA), 2) / Math.pow(Math.log(RR), 2)
  );
}

Una fórmula publicada sin verificación es solo una afirmación. Corrimos nuestra implementación contra el escenario de referencia que Zhu y Lakkis publican en la Tabla I del artículo (tasa de control 0,8 evento por unidad de tiempo, razón de tasas de 0,85, tiempo medio de exposición 0,75, alfa 0,05, poder 80 por ciento, asignación balanceada) y comparamos línea a línea:

parámetro de dispersión nuestra implementación valor publicado diferencia
0,4 1.311 1.311 0,000%
0,7 1.490 1.490 0,000%
1,0 1.668 1.668 0,000%
1,5 1.965 1.965 0,000%

Reproducción exacta en las cuatro líneas. Es ese mismo bloque de código el que generó la tabla del índice de dispersión de la sección anterior y la comparación de la próxima.

Cuánto miente Poisson, por tamaño de efecto

Con el parámetro de dispersión fijado en 0,9375 (lo que corresponde a varianza 12,8 sobre media 3,2, o índice de dispersión 4), la diferencia entre dimensionar por Poisson y dimensionar bien es constante y grande:

efecto objetivo en la tasa binomial negativa días Poisson (kappa cero) días razón
más 2 por ciento 49.915 18 12.387 5 4,0 veces
más 3 por ciento 22.376 8 5.532 2 4,0 veces
más 5 por ciento 8.194 3 2.011 1 4,1 veces
más 8 por ciento 3.282 2 797 1 4,1 veces
más 10 por ciento 2.135 1 515 1 4,1 veces

Días calculados a 40.000 usuarios por semana, con dos brazos. La razón entre las dos columnas queda atrapada alrededor de 4, que es exactamente el índice de dispersión: el factor de corrección es el índice de dispersión, y no depende del tamaño del efecto que usted quiere detectar. Esa es la regla práctica que vale llevarse: mida el índice de dispersión una vez, multiplique la cuenta de Poisson por él, y tendrá una buena aproximación incluso antes de abrir la fórmula.

El error más caro es anterior a la fórmula

Existe un error peor que dimensionar por Poisson, y ocurre en la lectura, no en el diseño: contar el evento como si fuera la unidad de observación.

El escenario: 30.000 usuarios asignados, 96.000 sesiones generadas. La tentación es analizar las 96.000 sesiones como observaciones independientes, o calcular el error estándar de la media asumiendo varianza igual a la media, como Poisson manda. Los dos errores llevan al mismo lugar.

cuenta error estándar de la media por brazo z de la diferencia entre los dos brazos, para un efecto de más 0,10 sesión por usuario
correcta (varianza 12,8 sobre 30.000 usuarios) 0,020656 3,4233
ingenua (varianza asumida igual a la media, 3,2) 0,010328 6,8465

Para rehacer la cuenta: el error estándar de la diferencia entre dos brazos del mismo tamaño es la raíz de 2 por el error estándar de un brazo, entonces el z correcto es 0,10 dividido por 0,020656 por la raíz de 2, lo que da 3,4233.

El error estándar sale exactamente a la mitad, el intervalo de confianza sale 50 por ciento más estrecho de lo que debería y el z se duplica. En este caso específico las dos cuentas coinciden sobre el veredicto (las dos pasan de 1,96), pero la que produce z de 6,85 va a ser descrita como “resultado aplastante” en una reunión, y no lo es. En un efecto menor, la misma distorsión se vuelve falso positivo directo.

La raíz del problema es la misma que describimos en unidad de aleatorización: la unidad de análisis tiene que ser la unidad de asignación. Si usted asignó usuarios, la observación es el usuario y su métrica es el conteo total, con toda la varianza que carga. Las sesiones del mismo usuario están correlacionadas entre sí, y tratarlas como independientes es inventar información que no existe.

Contar usuarios contra contar eventosDiagrama que compara dos lecturas de los mismos datos. A la izquierda, la lectura correcta: cinco círculos representan usuarios asignados, cada uno con un número distinto de puntitos ligados a él que representan sus sesiones, y el resumen indica 30 mil usuarios con error estándar de 0,0207. A la derecha, la lectura ingenua: los mismos puntitos aparecen sueltos, sin ligadura con ningún usuario, y el resumen indica 96 mil eventos tratados como independientes con error estándar de 0,0103, la mitad del valor correcto.El mismo dato, dos unidades de análisis, dos errores estándarlectura correcta: la unidad es el usuario30.000 observacionesvarianza 12,8error estándar 0,0207z del efecto: 3,42lectura ingenua: la unidad es el evento96.000 observaciones supuestaserror estándar 0,0103, la mitad del correctoz del efecto: 6,85
Las sesiones del mismo usuario están correlacionadas. Tratarlas como observaciones independientes divide el error estándar por dos y duplica el estadístico de prueba.

¿Vale la pena cambiar el conteo por un proxy binario?

Una salida pragmática es convertir el conteo en un indicador: en vez de “sesiones por usuario”, medir “usuario con al menos 4 sesiones en la semana”. Eso devuelve el problema a la calculadora binaria, que toda herramienta tiene, y a la cuenta de dos proporciones.

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.

Con la base del proxy en 35 por ciento de los usuarios, la calculadora de arriba devuelve:

efecto relativo en el proxy usuarios por variación días a 40.000 por semana
más 2 por ciento 73.214 26
más 3 por ciento 32.612 12
más 5 por ciento 11.791 5
más 8 por ciento 4.635 2

Compare con la columna de la binomial negativa: detectar más 5 por ciento en la tasa de sesiones pedía 8.194 usuarios por variación, y detectar más 5 por ciento relativos en el proxy pide 11.791. Es decir, en este escenario el proxy salió más caro, no más barato.

Eso no es una regla general, y ahí está el cuidado. Las dos líneas no miden lo mismo: una pregunta si el conteo medio subió 5 por ciento, la otra pregunta si la proporción de usuarios por encima de un umbral subió 5 por ciento. No existe conversión automática entre las dos, y suponer que un efecto de más 5 por ciento en la media produce más 5 por ciento en el proxy es una hipótesis suya, no un hecho. Los criterios honestos para elegir el proxy son:

Y la normalidad de la media

Falta una última verificación, que es independiente del dimensionamiento por el efecto: la media del conteo necesita ser aproximadamente normal para que el test z valga. La regla es la de Kohavi, Deng, Longbotham y Xu, que pide al menos 355 veces el cuadrado del coeficiente de asimetría y se recomienda cuando el módulo de la asimetría pasa de 1.

varianza (media 3,2) asimetría mínimo por la regla del TCL mínimo por el efecto de más 5 por ciento cuál manda
3,2 0,56 111 2.011 el efecto
6,4 1,19 500 4.072 el efecto
12,8 1,96 1.359 8.194 el efecto
19,2 2,51 2.238 12.315 el efecto

En conteos típicos, el dimensionamiento por el efecto manda con holgura, y la regla del teorema central del límite nunca llega a ser el cuello de botella. Por eso el conteo es un caso más cómodo que el ingreso: en las métricas de Bing que Kohavi y coautores publican, sesiones por usuario tiene asimetría 3,6 y pide 4,70 mil observaciones, mientras que ingreso por usuario tiene 17,9 y pide 114 mil. La cola del conteo es larga, pero la cola del dinero es mucho peor.

Dos salvedades honestas sobre la tabla de arriba. La primera: las asimetrías vienen de la fórmula cerrada de la binomial negativa con aquellas media y varianza, no de datos suyos. La segunda: si su conteo tiene un puñado de usuarios con centenas de eventos, lo que es común cuando los bots entran en la cuenta, la asimetría real va a pasar mucho de la tabla. Antes de dimensionar, limpie el tráfico de bots y considere aplicar un techo.

Checklist

  1. Mida la varianza antes que nada. Una semana de datos históricos, conteo por usuario, media y varianza. Divida una por la otra.
  2. Si el índice de dispersión pasa de 1,5, olvide Poisson. Use la binomial negativa y el kappa correspondiente.
  3. Como aproximación rápida, multiplique la cuenta de Poisson por el índice de dispersión. El factor quedó atrapado en 4,0 a 4,1 en todo el rango de efecto probado.
  4. La unidad de análisis es la unidad de asignación. Nunca calcule error estándar sobre el conteo de eventos.
  5. Limpie bots y considere techo antes de estimar la varianza, si no, dimensiona para la cola equivocada.
  6. Si va a usar un proxy binario, declare la hipótesis de traducción. Y no presuma que es más barato: en este escenario no lo fue.
  7. Verifique la regla de los 355 por la asimetría al cuadrado. En conteo raramente manda, pero confirmarlo lleva un minuto.

Haga esto automático en Donnu

Casi toda herramienta de test A/B del mercado solo sabe comparar proporciones. Cuando el equipo quiere probar “sesiones por usuario” o “ítems por pedido”, la salida estándar es inventar un proxy binario y cruzar los dedos, o exportar todo a una planilla y hacer la cuenta a mano, sin dimensionamiento previo.

Donnu guarda el conteo por usuario asignado, así que el índice de dispersión es algo que usted lee antes de empezar el test, y no descubre después. Eso cambia la pregunta a la hora de planificar: en vez de “cuántos visitantes necesito”, que es la pregunta binaria, usted consigue responder “cuánto varía esa métrica entre mis usuarios y qué cuesta eso en días de test”. Si su caso todavía es binario, empiece por la calculadora de tamaño de muestra; si ya es de conteo, mida la varianza primero y use la fórmula publicada arriba.

Referencias

Lee también: Tamaño de muestra para métricas continuas · Outliers y capping · Unidad de aleatorización · Métricas de ratio · Tráfico de bots · Calculadora de tamaño de muestra · Leia em português

Preguntas frecuentes

¿Qué es una métrica de conteo en un test A/B?
Es toda métrica en la que cada usuario aporta un número entero de eventos en lugar de un sí o un no: sesiones por usuario, páginas por sesión, ítems por pedido, búsquedas por visita, mensajes enviados por cuenta. No es una proporción, así que ni la calculadora de significancia binaria ni la fórmula de dos proporciones se le aplican sin traducción. La media es una tasa de eventos por unidad, y lo que gobierna el tamaño de muestra es la varianza de ese conteo, no la tasa en sí.
¿Qué es la sobredispersión y por qué importa?
Sobredispersión es que la varianza del conteo sea mayor que la media. El modelo de Poisson asume que las dos son iguales, y en datos de producto eso prácticamente nunca ocurre, porque los usuarios son heterogéneos: algunos visitan una vez al mes y otros diez veces al día. La medida directa es el índice de dispersión, la varianza dividida por la media. Si da 4, la varianza es cuatro veces la que Poisson asumiría, y la muestra necesaria crece en la misma proporción. En el ejemplo de este artículo, un índice de dispersión de 4 llevó la muestra de 2.011 a 8.194 usuarios por variación.
¿Cómo calcular el tamaño de muestra de una métrica de conteo?
Use la fórmula de Zhu y Lakkis para la razón de dos tasas bajo el modelo binomial negativo, que es el estándar de la literatura clínica y está implementada en software de dimensionamiento. Pide la tasa del control, la razón de tasas que quiere detectar, el parámetro de dispersión y el tiempo medio de exposición. El parámetro de dispersión sale de la varianza observada: es la varianza menos la media, dividida por el cuadrado de la media. La fórmula publicada en este artículo reproduce exactamente la tabla de referencia publicada por Zhu y Lakkis, en las cuatro líneas probadas.
¿Cuál es el error más caro en una métrica de conteo?
Tratar cada evento como observación independiente. Si 30.000 usuarios generaron 96.000 sesiones y usted calcula el error estándar como si tuviera 96.000 observaciones independientes, o como si la varianza fuera igual a la media, el error estándar sale a la mitad del correcto. En el ejemplo de este artículo, el mismo efecto de más 0,10 sesión por usuario produce z de 3,42 en la cuenta correcta y 6,85 en la cuenta ingenua. El intervalo de confianza sale 50 por ciento más estrecho de lo que debería y el valor p se vuelve ficción.
¿Puedo transformar la métrica de conteo en una métrica binaria?
Puede, y a veces vale la pena. Cambiar "sesiones por usuario" por "usuario con al menos 4 sesiones en la semana" devuelve el problema a la calculadora binaria, que todo el mundo ya sabe usar. El costo es que el efecto medido deja de ser el mismo: usted pasa a medir si los usuarios cruzaron un umbral, no cuánto cambió el conteo, y necesita una hipótesis propia sobre cómo el efecto del conteo se traduce en ese umbral. En el escenario de este artículo el proxy no salió más barato: detectar más 5 por ciento en el conteo pedía 8.194 usuarios por variación, y detectar más 5 por ciento relativos en el proxy pedía 11.791.
¿La regla de los 355 por la asimetría al cuadrado se aplica a los conteos?
Sí, y en los conteos suele quedar holgada. La regla de Kohavi y coautores pide al menos 355 veces el cuadrado del coeficiente de asimetría para que la media sea aproximadamente normal, y se recomienda cuando el módulo de la asimetría pasa de 1. Una binomial negativa con media 3,2 y varianza 12,8 tiene asimetría 1,96, lo que pide 1.359 observaciones por brazo. Como el dimensionamiento por el efecto ya pidió 8.194, es el dimensionamiento el que manda. En ingreso por usuario el orden se invierte: la asimetría puede pasar de 15 y la regla del teorema central del límite pasa a ser el cuello de botella.