Módulo 6: Statistical Significance

El intervalo de confianza

Descripción

La lección 4 terminó señalando un hueco: el p-value dice si hay evidencia de un efecto, pero no dice cuánto vale ese efecto ni con qué rango de incertidumbre. Esta lección llena ese hueco con el intervalo de confianza (confidenceInterval) del 95%: en vez de un solo número de "sí o no", un rango completo donde probablemente vive la diferencia real de conversión entre control y variant. Al final de esta lección vas a poder leer un CI y decidir significancia con una regla tan simple como mirar si el rango cruza el cero.

Conexión con el módulo. El z-score y el p-value de la lección 3 y el intervalo de confianza de esta lección son las dos mitades del mismo cálculo, hechas con una diferencia técnica importante que esta lección explica. La lección 6 va a juntar las dos mitades —z-score, p-value y CI— en una sola función abTest() verificada; esta lección es el paso intermedio que asegura que entiendes cada pieza antes de que se combinen.

Una analogía: el clima de mañana, no solo "sí o no va a llover"

Un pronóstico del clima que dice "sí, va a llover mañana" es útil, pero incompleto. Un pronóstico que dice "va a llover entre 5 y 20 milímetros, con 95% de confianza" es mucho más útil — te dice no solo que algo va a pasar, sino cuánto, y qué tan seguro está el meteorólogo de ese rango. Si el rango fuera "entre -3 y 20 milímetros" (un rango que incluye valores negativos, que no tienen sentido para lluvia, pero sirven de ejemplo), la conclusión honesta sería "no estamos seguros de si va a llover para nada" — el rango cruza el punto donde "no pasa nada" (cero milímetros).

El intervalo de confianza del A/B test hace exactamente lo mismo con la diferencia de conversión entre control y variant. En vez de solo "sí, es significativo" o "no, no lo es", te da el rango completo de valores plausibles para esa diferencia real, con 95% de confianza. Si ese rango incluye el cero —"la diferencia real podría ser cero, o incluso negativa"—, no hay evidencia sólida de efecto. Si el rango entero está por encima de cero —"la diferencia real, casi seguro, es positiva, en algún punto entre estos dos valores"—, ahí sí hay evidencia de un efecto real, y además sabes aproximadamente cuánto vale.

Ejemplo trabajado: el CI del 95% de la diferencia en Mercado

El intervalo de confianza se construye alrededor de la diferencia observada (p2 - p1), sumando y restando un margen: 1.96 desviaciones estándar del error de esa diferencia —el 1.96 es la constante que corresponde a un 95% de confianza bajo la distribución normal, la misma que ya viste como Phi(1.96) ≈ 0.975 en la lección anterior—. La diferencia clave frente al cálculo del z-score es el error estándar que se usa: aquí no se usa la proporción pooled, porque el CI no está preguntando "¿qué tan raro sería esto si las dos tasas fueran iguales?" (eso asume la hipótesis nula) — está preguntando "¿cuál es el rango plausible de la diferencia real, sea cual sea?", una pregunta que no necesita asumir que ambas tasas son iguales, así que cada muestra aporta su propia varianza por separado:

// Intervalo de confianza del 95% de la DIFERENCIA (p2 - p1), sobre el A/B de Mercado.
// A diferencia del z-score/p-value (que usan el SE pooled, asumiendo H0), el CI usa el SE
// NO pooled: cada rate aporta su propia varianza, porque el CI no asume que p1 y p2 sean
// iguales -- al contrario, describe el rango plausible de su DIFERENCIA real.
const control = { n: 12000, conv: 384 };
const variant = { n: 12000, conv: 456 };

const p1 = control.conv / control.n;
const p2 = variant.conv / variant.n;
const diff = p2 - p1;

const seDiff = Math.sqrt((p1 * (1 - p1)) / control.n + (p2 * (1 - p2)) / variant.n);
const ci95 = [diff - 1.96 * seDiff, diff + 1.96 * seDiff];

console.log('=== Intervalo de confianza del 95% de la diferencia (Mercado) ===\n');
console.log('diff (p2 - p1) = ' + (diff * 100).toFixed(3) + ' puntos porcentuales');
console.log('seDiff         = ' + seDiff.toFixed(6));
console.log('CI 95%         = [' + (ci95[0] * 100).toFixed(3) + 'pp, ' + (ci95[1] * 100).toFixed(3) + 'pp]');
console.log('\n¿Cruza el 0? ' + (ci95[0] <= 0 && ci95[1] >= 0 ? 'si (no seria significativo)' : 'no (consistente con significativo)'));

Qué esperar. Al correr el archivo con Node, la salida es exactamente esta:

=== Intervalo de confianza del 95% de la diferencia (Mercado) ===

diff (p2 - p1) = 0.600 puntos porcentuales
seDiff         = 0.002372
CI 95%         = [0.135pp, 1.065pp]

¿Cruza el 0? no (consistente con significativo)

Léelo así: con 95% de confianza, la diferencia real de conversión entre tener recomendaciones y no tenerlas está entre 0.135 y 1.065 puntos porcentuales — siempre a favor de variant. El rango entero es positivo: ni el extremo más bajo (0.135pp) llega a cero, mucho menos lo cruza. Eso es exactamente lo que la lección 3 ya había anticipado con el p-value: hay evidencia de un efecto real, y ahora, además, sabes que el tamaño plausible de ese efecto va de "modesto" (0.135pp) a "considerable" (1.065pp) — un rango casi diez veces más ancho en su extremo superior que en el inferior, lo cual es honesto: con esta muestra, no se puede afinar más el tamaño exacto del efecto, solo su rango plausible.

Por qué el CI y el p-value casi siempre coinciden (y qué hacer cuando no)

No es casualidad que el CI de Mercado no cruce cero justo cuando el p-value ya había dado significativo (p = 0.0114 < 0.05) — los dos cálculos están profundamente conectados: un intervalo de confianza del 95% que no cruza cero es, en la práctica, matemáticamente equivalente a un p-value de dos colas por debajo de 0.05. Puedes pensar en el CI como una forma más informativa de hacer la misma pregunta: en vez de "¿el p-value cruza el umbral de 0.05?", "¿el intervalo cruza el valor de 'sin efecto' (cero)?". Ambas preguntas, casi siempre, dan la misma respuesta de sí-o-no — la ventaja del CI es que, además de responder esa pregunta, te dice cuánto.

La pequeña diferencia técnica entre pooled (para z/p) y no-pooled (para el CI) casi nunca cambia la conclusión de significancia en la práctica —con muestras del tamaño de Mercado, ambos enfoques del error estándar dan resultados muy parecidos—, pero vale la pena que la recuerdes: si alguna vez ves un CI y un p-value que parecen contradecirse justo en el borde del umbral (p muy cercano a 0.05, CI con un extremo muy cercano a cero), es señal de que el resultado está exactamente en la frontera, no de que algo esté mal calculado.

Errores comunes

Leer solo si el CI cruza cero, ignorando el ancho del rango. Qué pasa: alguien mira el CI de Mercado, ve que no cruza cero, dice "significativo" y sigue de largo sin fijarse en que el rango va de 0.135pp a 1.065pp — un rango bastante ancho para el tamaño de esta muestra. Por qué pasa: la pregunta de sí/no se resuelve rápido y se siente como la respuesta completa, cuando el ancho del intervalo es información igual de valiosa. Cómo detectarlo: si nadie menciona el ancho del CI al reportar el resultado —solo "es significativo" o "no lo es"—, se está desperdiciando la mitad de la información que el intervalo ofrece. Cómo corregirlo: reporta siempre el intervalo completo, no solo la conclusión binaria — un CI angosto (0.5pp a 0.7pp) inspira mucha más confianza en el tamaño exacto del efecto que uno ancho como el de Mercado (0.135pp a 1.065pp), aunque ambos sean "significativos" por igual.

Usar el error estándar pooled para calcular el intervalo de confianza. Qué pasa: alguien reutiliza sePooled de la lección 3 (calculado bajo la hipótesis nula) para construir el CI, en vez del seDiff no-pooled de esta lección. Por qué pasa: ya existe una variable de error estándar calculada más arriba en el código, y reutilizarla parece más simple que calcular una nueva. Cómo detectarlo: si el CI se calculó con la misma variable de error estándar que el z-score, probablemente se usó sePooled por error — revisa que la fórmula del CI use p1*(1-p1)/n1 + p2*(1-p2)/n2 (cada muestra por separado), no la versión pooled. Cómo corregirlo: recuerda la razón de fondo explicada en esta lección — el z-score/p-value asumen H0 (por eso usan una tasa común, pooled) mientras que el CI describe el rango plausible de la diferencia sin asumir que es cero (por eso cada muestra aporta su propia varianza). Son dos preguntas distintas, y cada una necesita su propio error estándar.

Ejercicios

Ejercicio 1 — Verifica el "no cruza cero" a mano. Con ci95 = [0.00135, 0.01065] (en fracción, no en puntos porcentuales), explica en una frase por qué este intervalo "no cruza cero" y qué tendría que ser distinto para que sí lo cruzara.

Ver solución

El intervalo no cruza cero porque su extremo inferior, 0.00135, ya es positivo — todo el rango, del extremo bajo al alto, está por encima de cero. Para que el intervalo cruzara cero, el extremo inferior tendría que ser negativo (por ejemplo, [-0.001, 0.01]), lo cual pasaría si la diferencia observada (diff) fuera más chica, o si el error estándar (seDiff) fuera más grande —con una muestra más chica, por ejemplo—, de forma que restar 1.96 * seDiff a diff cruzara por debajo de cero.

Ejercicio 2 — Calcula el CI de un caso hipotético. Con control = {n: 12000, conv: 390} y variant = {n: 12000, conv: 396} (una diferencia mucho más chica que la real de Mercado), ¿esperarías que el CI de la diferencia cruce cero o no? Verifica corriendo el código de esta lección con estos números.

Ver solución

Con una diferencia tan chica (diff = 6/12000 = 0.05pp) y el mismo tamaño de muestra que Mercado, es razonable esperar que el CI cruce cero — el margen de error (1.96 * seDiff) con estos tamaños de muestra ronda los 0.46pp, mucho más grande que la diferencia observada de apenas 0.05pp. Al correr el código con estos valores, el CI resultante es aproximadamente [-0.42pp, 0.52pp] — cruza cero claramente, consistente con un resultado no significativo. Esto ilustra el mismo punto que la lección 2: una diferencia chica, con esta muestra, no se distingue del ruido.

Ejercicio 3 — Predicción con criterio. Si Mercado hubiera corrido el mismo experimento con el doble de muestra (24,000 por variante) manteniendo las mismas tasas observadas (3.2% y 3.8%), ¿esperarías que el ancho del CI fuera más angosto, más ancho, o igual? Justifica sin calcular el número exacto.

Ver solución

Más angosto. El ancho del CI depende directamente de seDiff, que a su vez depende de 1/n1 y 1/n2 dentro de la raíz cuadrada — con el doble de muestra, esos términos se reducen a la mitad, y seDiff se reduce en un factor de aproximadamente 1/√2 (no a la mitad exacta, porque está dentro de una raíz cuadrada). Un seDiff más chico significa un margen (1.96 * seDiff) más chico, y por lo tanto un intervalo más angosto alrededor de la misma diferencia observada. Esta es la misma relación entre muestra y precisión que vas a formalizar con la fórmula exacta de sampleSize en el módulo 7.

Resumen y siguiente paso

En esta lección calculaste el intervalo de confianza del 95% de la diferencia de conversión en el A/B de Mercado: [0.135pp, 1.065pp], un rango completamente positivo que no cruza cero — consistente con el p-value significativo de la lección 3. Aprendiste la diferencia técnica entre el error estándar pooled (para z-score y p-value, que asumen la hipótesis nula) y el no-pooled (para el CI, que describe el rango plausible de la diferencia real sin esa suposición), y por qué "el CI no cruza cero" es, en la práctica, la misma conclusión que "p < 0.05", solo que con más información sobre el tamaño del efecto.

Antes de avanzar deberías poder: explicar con la analogía del pronóstico del clima qué agrega un intervalo de confianza sobre un simple "sí o no"; calcular a mano si un CI dado cruza cero o no; y anticipar cómo cambiaría el ancho de un CI si la muestra fuera más grande o más chica.

Con el z-score, el p-value y el intervalo de confianza ya entendidos por separado, la lección 6 los junta en una sola función verificada: abTest(), el z-test de proporciones completo, probado contra casos conocidos antes de confiar en él sobre los datos reales de Mercado.

Recursos

  • Wikipedia, "Confidence interval" — en.wikipedia.org/wiki/Confidence_interval. La definición formal del intervalo de confianza y su interpretación frecuentista correcta —un matiz importante, parecido en espíritu al de la lección 4 sobre el p-value—. En inglés.
  • Evan Miller, "Evan's Awesome A/B Tools" — evanmiller.org/ab-testing. Su calculadora de Chi-Squared Test reporta, junto al resultado de significancia, el intervalo de confianza de la diferencia — la misma pieza que calculó esta lección, en una herramienta lista para usar. En inglés.
  • Optimizely, "Statistical significance" — support.optimizely.com/hc/en-us/articles/4410284003341-Statistical-significance. Explica, desde la perspectiva de una plataforma de experimentación real, cómo se comunica un intervalo de confianza junto al resultado de significancia. En inglés.