Módulo 6: Statistical Significance
Significancia estadística vs. importancia práctica
Descripción
abTest() ya está construida y verificada (lección 6): dado un control y un variant, devuelve un veredicto confiable de significant: true o false. Podría parecer que ahí termina el trabajo de este módulo — pero esta lección muestra, con un caso hipotético construido a propósito, que "significativo" no es sinónimo de "importante". Vas a correr la misma función, sin cambiarle una sola línea, sobre un escenario donde el veredicto es significant: true y, sin embargo, ningún equipo de producto razonable debería emocionarse por el resultado.
Conexión con el módulo. Este es el error 3 de la lección 4, retomado ahora con números concretos en vez de solo en prosa. Es también la última pieza conceptual que el proyecto de la lección 8 necesita: al reportar el resultado de recommendations, no basta con citar significant: true — hace falta argumentar, además, que el tamaño del efecto (0.135pp a 1.065pp, un +18.75% relativo) es lo bastante grande como para justificar la decisión de lanzar.
Una analogía: la pluma que pesa una milésima de gramo más
Imagina una balanza de laboratorio tan precisa que puede distinguir el peso de dos plumas casi idénticas con una confianza estadística absoluta: la pluma A pesa, en promedio, 0.001 gramos más que la pluma B, medido sobre miles de repeticiones, con un intervalo de confianza que no cruza cero en ningún punto. El resultado es, en el sentido más estricto, estadísticamente significativo — hay evidencia sólida y repetible de que la diferencia es real, no ruido de medición.
Y aun así, la pregunta obvia es: ¿a quién le importa? Ninguna persona puede sentir 0.001 gramos de diferencia sosteniendo una pluma en la mano. Ningún proceso de fabricación necesita distinguir ese nivel de precisión. La diferencia es real —la balanza no está mintiendo—, pero es irrelevante para cualquier decisión que alguien vaya a tomar con esa información. Ese es exactamente el problema que esta lección resuelve: la significancia estadística contesta "¿la diferencia es real, o es ruido?"; la importancia práctica contesta una pregunta completamente distinta: "¿la diferencia es lo bastante grande como para que hacer algo al respecto valga la pena?". abTest() solo contesta la primera.
Ejemplo trabajado: la misma función, un caso donde "significativo" no alcanza
abTest() no cambia entre esta lección y la anterior — es exactamente la misma función de la lección 6, copiada sin modificar una sola línea. Lo que cambia es el caso que se le pasa: en vez de los 12,000 usuarios por variante de Mercado, imagina una empresa mucho más grande, con 5 millones de usuarios por variante, probando un cambio menor —digamos, un ajuste de copy en un botón secundario— que produce un lift de apenas un punto porcentual relativo, de 3.01% a 3.04% de conversión:
// La MISMA abTest() de la leccion 6, sin cambios, aplicada a un caso hipotetico -- una
// empresa con 5 millones de usuarios por variante y un lift de apenas 0.03 puntos
// porcentuales -- para contrastar significancia ESTADISTICA con importancia PRACTICA.
function erf(x) {
const sign = x < 0 ? -1 : 1;
x = Math.abs(x);
const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741,
a4 = -1.453152027, a5 = 1.061405429, p = 0.3275911;
const t = 1 / (1 + p * x);
const y = 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
return sign * y;
}
function normalCdf(x) {
return 0.5 * (1 + erf(x / Math.sqrt(2)));
}
function abTest({ control, variant }) {
const { n: n1, conv: conv1 } = control;
const { n: n2, conv: conv2 } = variant;
const p1 = conv1 / n1;
const p2 = conv2 / n2;
const lift = (p2 - p1) / p1;
const pooled = (conv1 + conv2) / (n1 + n2);
const sePooled = Math.sqrt(pooled * (1 - pooled) * (1 / n1 + 1 / n2));
const z = (p2 - p1) / sePooled;
const pValue = 2 * (1 - normalCdf(Math.abs(z)));
const seDiff = Math.sqrt((p1 * (1 - p1)) / n1 + (p2 * (1 - p2)) / n2);
const diff = p2 - p1;
const ci = [diff - 1.96 * seDiff, diff + 1.96 * seDiff];
return { rateControl: p1, rateVariant: p2, lift, z, pValue, ci, significant: pValue < 0.05 };
}
// Caso hipotetico: 5,000,000 usuarios por variante, control 3.01%, variant 3.04%.
const huge = abTest({
control: { n: 5_000_000, conv: 150_500 },
variant: { n: 5_000_000, conv: 152_000 },
});
console.log('=== Caso hipotetico: N gigante, lift minusculo ===\n');
console.log('rateControl = ' + (huge.rateControl * 100).toFixed(3) + '%');
console.log('rateVariant = ' + (huge.rateVariant * 100).toFixed(3) + '%');
console.log('lift = ' + (huge.lift * 100).toFixed(2) + '% (relativo)');
console.log('diferencia = ' + ((huge.rateVariant - huge.rateControl) * 100).toFixed(3) + ' puntos porcentuales (absoluta)');
console.log('z = ' + huge.z.toFixed(4));
console.log('pValue = ' + huge.pValue.toFixed(6));
console.log('CI 95% = [' + (huge.ci[0] * 100).toFixed(4) + 'pp, ' + (huge.ci[1] * 100).toFixed(4) + 'pp]');
console.log('significant = ' + huge.significant);
Qué esperar. Al correr el archivo con Node, la salida es exactamente esta:
=== Caso hipotetico: N gigante, lift minusculo ===
rateControl = 3.010%
rateVariant = 3.040%
lift = 1.00% (relativo)
diferencia = 0.030 puntos porcentuales (absoluta)
z = 2.7695
pValue = 0.005615
CI 95% = [0.0088pp, 0.0512pp]
significant = true
Ahí está la contradicción aparente, resuelta con números reales: significant = true, con un p-value (0.0056) incluso más chico que el de Mercado (0.0114), y un CI que no cruza cero. Por la definición estricta de este módulo, es un resultado tan sólido —o más— que el de recommendations. Y sin embargo, la diferencia absoluta es de apenas 0.03 puntos porcentuales — treinta veces más chica que los 0.6pp de Mercado—. Con 5 millones de usuarios por variante, la muestra es tan enorme que hasta una diferencia minúscula, del tamaño de la pluma de la analogía, se vuelve detectable con total confianza estadística. La pregunta que significant: true nunca contesta es si a alguien le conviene actuar sobre esos 0.03 puntos: ¿justifica el costo de ingeniería, coordinación entre equipos y riesgo de romper algo, por un efecto tan chico? Esa pregunta no la responde ninguna fórmula estadística — la responde el negocio.
Por qué el N gigante hace esto posible
No es casualidad que este ejemplo use 5 millones de usuarios por variante en vez de 12,000. El z-score depende de dividir la diferencia observada entre el error estándar, y el error estándar se achica con la raíz cuadrada de n — cuanto más grande la muestra, más chico el error estándar, y más fácil se vuelve que hasta una diferencia diminuta cruce el umbral de significancia. Llevado al extremo: con una muestra lo bastante grande, casi cualquier diferencia distinta de cero, por microscópica que sea, eventualmente se vuelve "estadísticamente significativa" — porque la significancia solo pregunta "¿es distinto de cero?", nunca "¿es distinto de cero por una cantidad que le importa a alguien?". Esta es la razón por la que las empresas más grandes de internet, con centenas de millones de usuarios, necesitan un criterio adicional al p-value para decidir qué lanzar — y ese criterio adicional es, precisamente, el tamaño del efecto y su relevancia de negocio, no la significancia por sí sola.
Cómo se decide "vale la pena", en la práctica
No hay una fórmula universal para "importancia práctica" —a diferencia de la significancia estadística, que sí tiene un umbral matemático preciso—, pero hay preguntas concretas que reemplazan la intuición vaga por un criterio explícito:
- ¿Cuánto representa el efecto en unidades de negocio, no solo en puntos porcentuales? Un lift de 0.6pp sobre 24,000 usuarios/semana son ~144 compras adicionales por semana —un número que se puede comparar contra el costo de construir y mantener la función—. Un lift de 0.03pp sobre esa misma base serían apenas ~7 compras adicionales por semana: probablemente no cubre ni el costo de coordinación del cambio.
- ¿El extremo inferior del intervalo de confianza sigue siendo relevante? El CI de Mercado va de 0.135pp a 1.065pp — incluso en el escenario más conservador (el extremo bajo), el efecto sigue siendo sustancial. El CI del caso hipotético va de 0.0088pp a 0.0512pp — ni el extremo alto es grande.
- ¿Este efecto se sostiene frente al costo de oportunidad? El tiempo de ingeniería que costó construir, lanzar y medir el experimento podría haberse invertido en otra apuesta con mayor potencial — la pregunta no es solo "¿funcionó?", sino "¿funcionó lo suficiente como para haber sido la mejor apuesta posible?".
Estas preguntas no reemplazan el z-test — lo complementan. Mercado responde bien a las tres: el efecto es significativo, se traduce en un número de negocio concreto, y se sostiene incluso en el escenario conservador del CI.
Errores comunes
Usar el p-value como proxy del tamaño del efecto. Qué pasa: alguien compara el resultado de Mercado (p = 0.0114) con el caso hipotético de esta lección (p = 0.0056) y concluye que el segundo "es un efecto más fuerte" porque su p-value es más chico. Por qué pasa: es tentador ordenar resultados por p-value, como si fuera una escala de "qué tan importante es el hallazgo" — es el mismo error que ya advirtió la lección 3, ahora con un ejemplo concreto que lo hace evidente. Cómo detectarlo: si se comparan dos experimentos por su p-value sin mirar el tamaño del efecto (el lift absoluto, el CI), la comparación está mal fundamentada. Cómo corregirlo: el p-value depende tanto del tamaño del efecto como del tamaño de la muestra — un efecto chico con muestra gigante puede dar un p-value más chico que un efecto grande con muestra modesta, exactamente como en el ejemplo de esta lección. Para comparar "qué tan importante" es un hallazgo, mira el lift y el CI, no el p-value.
Rechazar cualquier resultado con lift chico, sin calcular el impacto de negocio real. Qué pasa: el equipo ve un lift relativo del 1% (como el caso hipotético) y lo descarta de plano como "insignificante", sin traducirlo a unidades de negocio concretas. Por qué pasa: un 1% relativo suena chico en el vacío, pero "chico" o "grande" depende por completo de la escala del negocio — 1% de una base de millones de usuarios puede seguir siendo un número relevante en algunos contextos. Cómo detectarlo: si la conversación usa la palabra "chico" o "insignificante" sin haber calculado cuántas conversiones, cuánto GMV o cuánto ingreso representa ese porcentaje sobre la base real de tráfico, el juicio es más intuición que análisis. Cómo corregirlo: siempre traduce el lift a una unidad de negocio concreta antes de descartarlo o celebrarlo —como se hizo en esta lección con "compras adicionales por semana"— y compara ese número contra el costo real de construir y mantener el cambio.
Ejercicios
Ejercicio 1 — Compara los dos casos lado a lado. Completa la tabla con los datos de Mercado (lección 6) y del caso hipotético de esta lección: pValue, diferencia absoluta en puntos porcentuales, y si el resultado, en tu opinión, vale la pena lanzar. Justifica tu decisión en un par de frases.
Ver solución
| Mercado | Caso hipotético | |
|---|---|---|
| pValue | 0.0114 | 0.005615 |
| Diferencia absoluta | 0.600pp | 0.030pp |
| ¿Significativo? | Sí | Sí |
| ¿Vale la pena lanzar? | Sí | Probablemente no |
Mercado vale la pena porque, además de ser significativo, el efecto se traduce en un número de negocio concreto y sustancial (~144 compras adicionales por semana, sobre la base de tráfico del experimento) y el CI, incluso en su extremo más conservador, sigue siendo relevante. El caso hipotético, aunque igual de significativo (de hecho con un p-value más chico), representa una diferencia veinte veces menor en términos absolutos — el tipo de efecto que probablemente no justifica el costo de coordinar un lanzamiento, salvo que la empresa opere a una escala donde incluso fracciones de centésima de punto representen sumas relevantes.
Ejercicio 2 — Encuentra el punto de quiebre. Sin correr Node todavía, ¿qué esperarías que pasara con el pValue del caso hipotético si la muestra fuera de 50,000 usuarios por variante en vez de 5,000,000 (cien veces más chica), manteniendo las mismas tasas (3.01% y 3.04%)? Verifica corriendo el código con ese cambio.
Ver solución
El pValue debería crecer considerablemente, probablemente muy por encima de 0.05 — con una muestra cien veces más chica, el error estándar crece (aproximadamente en un factor de √100 = 10), lo que reduce el z-score en ese mismo orden de magnitud, y un z-score mucho más chico corresponde a un p-value mucho más grande. Al correr el código con n: 50_000 y las mismas tasas, el resultado da significant: false — la misma diferencia relativa de 1%, con menos muestra, deja de ser distinguible del ruido. Esto confirma la explicación de la sección "Por qué el N gigante hace esto posible": la significancia de este caso dependía casi por completo del tamaño descomunal de la muestra, no de que el efecto fuera particularmente fuerte.
Ejercicio 3 — Diseña el argumento contrario. Describe, en un par de frases, un escenario donde un lift chico en términos relativos (menor al 2%) SÍ justifique lanzar, a pesar de sonar poco impresionante a primera vista. Pista: piensa en el tamaño absoluto de la base de usuarios sobre la que se aplica.
Ver solución
No hay una única respuesta correcta. Un ejemplo razonable: una plataforma de pagos que procesa $10,000 millones de dólares al año en transacciones detecta, con un experimento bien diseñado, que un cambio en el flujo de checkout produce un lift de apenas 0.5% en la tasa de conversión de pagos. Sobre una base tan grande, ese 0.5% relativo se traduce en decenas de millones de dólares adicionales de volumen procesado al año — un impacto de negocio enorme, aunque el porcentaje en sí suene modesto. El punto central de esta lección no es que "los lifts chicos nunca importan" — es que el porcentaje relativo, por sí solo, no dice si algo importa: hace falta traducirlo a la escala real del negocio, como pide la sección anterior.
Resumen y siguiente paso
En esta lección corriste abTest() —sin cambiarla— sobre un caso hipotético de N gigante y lift minúsculo, y confirmaste que un resultado puede ser significant: true, con un p-value incluso más chico que el de Mercado, y aun así representar un efecto tan pequeño (0.03pp) que probablemente no justifica actuar. Aprendiste que la significancia estadística responde "¿es real?" mientras que la importancia práctica responde "¿vale la pena?" — dos preguntas distintas que requieren, cada una, su propio criterio: el p-value y el CI para la primera, la traducción a unidades de negocio concretas para la segunda.
Antes de avanzar deberías poder: explicar, con la analogía de la pluma, por qué un resultado puede ser significativo y trivial a la vez; calcular el impacto de negocio de un lift dado, traduciéndolo a una unidad concreta; y argumentar, con criterio propio, por qué el lift de Mercado sí vale la pena mientras que el caso hipotético de esta lección probablemente no.
Con las seis lecciones de contenido del módulo completas —el ruido de muestreo, la hipótesis nula y el p-value, sus malentendidos más comunes, el intervalo de confianza, el z-test verificado, y ahora la diferencia entre significativo e importante—, la lección 8 junta todo en el proyecto final: el reporte completo de significancia del lanzamiento de recommendations, con la decisión de enviar, revertir o iterar.
Recursos
- Ron Kohavi, Diane Tang y Ya Xu, Trustworthy Online Controlled Experiments — experimentguide.com. El libro dedica un capítulo entero a la distinción entre significancia estadística y relevancia práctica en el contexto de experimentación a gran escala en la industria. En inglés.
- Ronald L. Wasserstein y Nicole A. Lazar, "The ASA Statement on p-Values: Context, Process, and Purpose" — tandfonline.com/doi/full/10.1080/00031305.2016.1154108. Uno de sus principios centrales advierte explícitamente contra confundir significancia estadística con importancia científica o práctica del efecto. 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 usada por empresas de escala masiva, por qué el tamaño de muestra puede volver "significativo" casi cualquier efecto. En inglés.