Módulo 5: Ab Testing Fundamentals

La hipótesis nula

Descripción

Ya tienes control y variant bien definidos (lección 3), corriendo al mismo tiempo, con usuarios asignados al azar (lección 4). Antes de calcular un solo número, hace falta escribir, con precisión, qué es exactamente lo que el experimento va a poner a prueba. Esa afirmación tiene un nombre formal: la hipótesis nula (null hypothesis, casi siempre escrita H0), y dice, en su forma más simple, "no hay diferencia entre control y variant".

Suena casi anticlimático — después de tanto trabajo diseñando el experimento, ¿el punto de partida es asumir que el cambio no sirvió para nada? Sí, exactamente. Y esa es la parte más importante de toda esta lección: un A/B test no arranca tratando de confirmar que recommendations funciona. Arranca asumiendo, de forma deliberadamente escéptica, que no funciona —que cualquier diferencia que aparezca entre control y variant es, hasta que se demuestre lo contrario, producto del azar—, y solo cede esa posición si la evidencia recolectada es lo bastante fuerte como para hacerlo. Esa evidencia —cuánta hace falta, y cómo se mide— es exactamente el trabajo del módulo 6. Esta lección se detiene en el paso anterior: formular con precisión qué es lo que se está poniendo a prueba, antes de mirar un solo dato.

Conexión con el módulo. La hipótesis nula es la pieza conceptual que conecta la randomización de la lección 4 con el cálculo del lift de la lección 6: sin H0 formulada con precisión, no hay ninguna base sobre la cual interpretar el número que abTest() va a calcular. La lección 6 va a calcular el lift; esta lección explica contra qué, exactamente, se está comparando ese lift.

Una analogía: la presunción de inocencia en un juicio

En casi cualquier sistema judicial moderno, un acusado empieza el juicio bajo la presunción de inocencia: el punto de partida oficial es que no cometió el delito, y esa posición se mantiene hasta que la fiscalía presenta evidencia lo bastante fuerte como para convencer al jurado de lo contrario. El jurado no empieza el juicio en blanco, sopesando 50/50 si el acusado es culpable o inocente; empieza asumiendo la inocencia, y solo se mueve de ahí si la evidencia lo justifica.

Fíjate en un matiz importante, que muchas personas pasan por alto: si el jurado declara "no culpable" al final del juicio, eso no significa que probó que el acusado es inocente. Significa que la evidencia presentada no fue suficiente para superar el estándar necesario para condenar. Pudo haber ocurrido el delito de todas formas, solo que sin evidencia suficiente para demostrarlo más allá de duda razonable. "No culpable" y "inocente comprobado" son, técnicamente, veredictos distintos —aunque el lenguaje cotidiano a veces los use como sinónimos—.

La hipótesis nula funciona exactamente igual. H0 es la presunción de inocencia de recommendations: "no tiene ningún efecto sobre checkoutConversionRate", el punto de partida por defecto. El experimento —y, específicamente, el análisis de significancia del módulo 6— juega el papel de la evidencia: si es lo bastante fuerte, el equipo puede "condenar" a H0 (rechazarla, y concluir que sí hay un efecto real). Pero si la evidencia no alcanza, la conclusión correcta no es "confirmamos que recommendations no tiene ningún efecto" — es, con la misma cautela del jurado, "no encontramos evidencia suficiente para descartar que no tenga efecto". La diferencia entre esas dos frases —aunque suenen parecidas— es exactamente el primer error común de esta lección.

Ejemplo trabajado: formulando H0 para el experimento de recommendations

Formular una hipótesis nula con precisión no es una frase suelta como "recommendations probablemente no hace nada" — tiene una estructura formal, atada a una métrica primaria específica, la misma disciplina que la lección 3 exigió para definir variant sin ambigüedad:

ElementoDefinición para el experimento de Mercado
Métrica primariacheckoutConversionRate (la que decide el resultado del experimento)
H0 (hipótesis nula)conversionRate(variant) = conversionRate(control)recommendations no tiene ningún efecto sobre la conversión
H1 (hipótesis alternativa)conversionRate(variant) ≠ conversionRate(control)recommendations sí tiene un efecto (en cualquier dirección)
Momento en que se escribeAntes de que el experimento empiece a correr, antes de ver un solo dato

Fíjate en dos decisiones que están incrustadas en esta tabla, ambas hechas con anticipación:

  1. Una sola métrica primaria. H0 está atada a checkoutConversionRate, y solo a esa métrica. Si el experimento terminara moviendo retentionD30 o weeklyGMV pero no checkoutConversionRate, eso no "rechaza" la H0 de este experimento —esas serían preguntas de otros experimentos, o análisis secundarios, pero no la pregunta que este experimento se comprometió a contestar—.
  2. H1 como "diferencia en cualquier dirección" (dos colas), no "variant es mejor" (una cola). Aunque el equipo espera —y probablemente desea— que recommendations mejore la conversión, H1 se formula de forma neutral: "hay una diferencia", sin presuponer la dirección. Esto es más riguroso que asumir de antemano que el cambio solo puede ayudar; un cambio de producto también puede, sin que nadie lo planee, empeorar una métrica —y una H1 de dos colas está preparada para detectar esa posibilidad también, no solo la que el equipo esperaba.

Por qué el orden importa: formular antes, no después

La fila más importante de la tabla de arriba, aunque parezca la más aburrida, es la última: H0 se escribe antes de correr el experimento. Esto no es una formalidad burocrática — es lo que le da a H0 su poder como punto de comparación neutral. Si el equipo escribiera la hipótesis después de ver que variant convirtió mejor, la "hipótesis" ya no sería una predicción puesta a prueba: sería una descripción de lo que ya se observó, disfrazada de método científico. Esta trampa tiene un nombre en la literatura de investigación —HARKing (Hypothesizing After the Results are Known)—, y es sorprendentemente común precisamente porque, después de ver un resultado que se ve bien, es muy tentador escribir la hipótesis que ese resultado "confirmaría", en vez de la que se planteó desde el principio.

Errores comunes

Confundir "no rechazar H0" con "probar que H0 es verdadera". Qué pasa: al terminar un experimento donde la diferencia entre control y variant no fue lo bastante grande (el módulo 6 explica exactamente qué significa "lo bastante grande"), un reporte concluye "confirmamos que recommendations no tiene ningún efecto". Por qué pasa: "no encontramos evidencia de un efecto" y "confirmamos que no hay efecto" suenan casi idénticos en el lenguaje cotidiano, aunque sean afirmaciones lógicamente distintas —exactamente la diferencia entre "no culpable" y "inocente comprobado" de la analogía—. Cómo detectarlo: el reporte usa una palabra tan fuerte como "confirmamos", "probamos" o "demostramos que no hay efecto", en vez de un lenguaje más cauteloso. Cómo corregirlo: la conclusión correcta cuando no hay evidencia suficiente es "no encontramos evidencia suficiente para rechazar H0" — puede ser que de verdad no haya efecto, o puede ser que el experimento no tuviera el tamaño de muestra necesario para detectarlo (un tema que retoma el módulo 7). Nunca es, por sí sola, prueba de que el efecto no existe.

Formular (o reformular) la hipótesis después de ver los datos. Qué pasa: el equipo diseñó el experimento con H0 sobre checkoutConversionRate, pero al ver que esa métrica no se movió mucho, cambia el foco y presenta el resultado como "recommendations mejora el averageOrderValue" —una métrica que sí se movió, pero que nunca fue la hipótesis original—. Por qué pasa: cuando la métrica planeada no da el resultado esperado, es tentador buscar en los datos alguna otra métrica que sí se haya movido en la dirección deseada, y presentarla como si siempre hubiera sido el foco. Cómo detectarlo: la métrica que se reporta como "el resultado" del experimento no coincide con la métrica primaria que se documentó antes de arrancar. Cómo corregirlo: como en la tabla de hoy, la métrica primaria y H0 se escriben antes de correr el experimento, y se respetan al final, se vea o no favorable el resultado. Cualquier otra métrica que se mueva de forma interesante puede anotarse como una observación exploratoria para un futuro experimento —pero nunca como el resultado oficial de este.

No definir de antemano cuál es la métrica primaria que decide el experimento. Qué pasa: el experimento de recommendations se lanza sin que nadie haya escrito, por adelantado, cuál es la métrica que decide si ganó o perdió — el equipo mide checkoutConversionRate, retentionD30, y weeklyGMV a la vez, y al final del experimento se declara "éxito" mirando la que más subió. Por qué pasa: medir varias métricas a la vez se siente más completo y menos arriesgado que comprometerse con una sola de antemano — si una no sube, siempre hay otra que sí—. Cómo detectarlo: nadie puede señalar, antes de ver ningún resultado, un documento o mensaje donde se haya definido cuál era la métrica primaria. Cómo corregirlo: exactamente como en la tabla de este ejemplo, define una sola métrica primaria (aquí, checkoutConversionRate) antes de arrancar. Las demás métricas pueden seguir midiéndose como guardrails o señales secundarias (el módulo 4 ya te dio ese vocabulario), pero solo la primaria decide si H0 se rechaza o no. Mirar varias métricas y quedarte con la que más convenga después del hecho es una trampa relacionada —comparaciones múltiples— que el módulo 7 desarrolla a fondo.

Ejercicios

Ejercicio 1 — Formula H0 y H1 para un experimento nuevo. Mercado quiere probar si cambiar el texto del botón de checkout de "Comprar" a "Comprar ahora" mejora checkoutConversionRate. Usando el mismo formato de la tabla de hoy, escribe la métrica primaria, H0, y H1 para este experimento.

Ver solución

Métrica primaria: checkoutConversionRate. H0: conversionRate(variant) = conversionRate(control) — cambiar el texto del botón no tiene ningún efecto sobre la conversión. H1: conversionRate(variant) ≠ conversionRate(control) — el cambio de texto sí tiene un efecto (en cualquier dirección), donde control es el botón con el texto "Comprar" y variant es el botón con el texto "Comprar ahora". Nota que la estructura es idéntica a la del experimento de recommendations — solo cambia cuál es, concretamente, el cambio que distingue a variant de control — exactamente el patrón que la lección 3 ya estableció.

Ejercicio 2 — Detecta el HARKing. Un reporte de experimento dice: "definimos la hipótesis de que recommendations mejoraría el tiempo que los usuarios pasan navegando el catálogo (timeOnCatalog), y efectivamente lo confirmamos: subió un 12%". Investigando un poco más, descubres que el documento de diseño del experimento, escrito antes de lanzarlo, decía que la métrica primaria era checkoutConversionRate, sin ninguna mención de timeOnCatalog. ¿Qué está pasando aquí, y por qué es un problema?

Ver solución

Esto es un caso claro de HARKing (formular, o en este caso reformular, la hipótesis después de ver los resultados). El documento de diseño original comprometía al equipo con checkoutConversionRate como métrica primaria, pero el reporte final presenta una hipótesis distinta (timeOnCatalog) que, aparentemente, sí dio un resultado favorable —probablemente porque checkoutConversionRate, la métrica que realmente se planeó medir, no se movió lo suficiente—. El problema es que esto rompe la disciplina completa del método: cuando examinas suficientes métricas después del hecho, es casi garantizado que alguna se mueva por pura casualidad, sin que eso signifique nada real sobre el efecto de recommendations. Presentar esa métrica encontrada después como si siempre hubiera sido la hipótesis original oculta ese riesgo, y le da al resultado una credibilidad que no se ganó.

Ejercicio 3 — Aplica la analogía del juicio a un caso real. El experimento de recommendations corre sus seis semanas planeadas, y al final la diferencia entre control y variant no es lo bastante grande como para rechazar H0 (el criterio exacto para decidir esto es del módulo 6, pero por ahora asume que el equipo llega a esa conclusión). Usando el vocabulario de la analogía del juicio, redacta en 2-3 frases el mensaje correcto —ni exagerado ni derrotista— que el equipo debería comunicarle al resto de la organización.

Ver solución

Un mensaje razonable: "El experimento de recommendations no encontró evidencia suficiente para rechazar la hipótesis nula sobre checkoutConversionRate — la diferencia observada entre control y variant no fue lo bastante grande como para descartar que se deba al azar. Esto no significa que recommendations no tenga ningún efecto real; puede que el efecto exista pero sea más chico de lo que este experimento tenía poder para detectar (el módulo 7 explica cómo dimensionar esto correctamente la próxima vez), o puede que, en efecto, no haya ningún efecto real sobre esta métrica. Antes de descartar la idea por completo, vale la pena revisar el tamaño de muestra usado y considerar correr una versión más larga o con más usuarios." El mensaje evita las dos exageraciones simétricas: ni "funcionó" (no hay evidencia de eso) ni "está probado que no funciona" (tampoco hay evidencia de eso) — exactamente el mismo cuidado con el que un jurado declara "no culpable" sin declarar "inocencia comprobada".

Resumen y siguiente paso

En esta lección formulaste la hipótesis nula (H0) del experimento de recommendations — "no hay diferencia entre control y variant en checkoutConversionRate" — y su alternativa (H1), ambas atadas a una sola métrica primaria y escritas antes de correr el experimento. Viste, con la analogía del juicio, por qué "no rechazar H0" nunca es lo mismo que "probar que H0 es verdadera" — la misma distinción entre "no culpable" y "inocencia comprobada" —, y por qué formular la hipótesis después de ver los datos (HARKing) rompe la disciplina completa del método.

Antes de avanzar deberías poder: escribir H0 y H1 con precisión para un experimento nuevo, explicar por qué la métrica primaria se define antes de correr el experimento, y detectar cuándo un reporte está reformulando su hipótesis después del hecho.

Con control, variant, randomización, y H0 ya en su lugar, llega el momento de calcular el primer número real del experimento: la lección 6 construye abTest() y calcula el lift — la diferencia relativa entre las tasas de control y variant — sobre los datos reales del lanzamiento de recommendations. Pero con una advertencia importante desde ya: calcular el lift todavía no es lo mismo que decidir si H0 se rechaza — esa evidencia es el trabajo del módulo 6.

Recursos

  • CXL, "A/B Testing Statistics: An Easy-to-Understand Guide" — cxl.com/blog/ab-testing-statistics. Explica la hipótesis nula con la misma analogía de "presunción de inocencia" que esta lección desarrolla, orientado a practicantes de producto sin formación estadística formal. En inglés.
  • Ron Kohavi, Diane Tang y Ya Xu, Trustworthy Online Controlled Experiments: A Practical Guide to A/B Testingexperimentguide.com. El capítulo sobre el diseño de hipótesis del libro desarrolla, con mayor rigor estadístico, la formulación de H0/H1 y por qué precomprometerse con una métrica primaria antes de lanzar el experimento es una práctica no negociable en experimentación seria. En inglés.
  • Evan Miller, "How Not To Run An A/B Test" — evanmiller.org/how-not-to-run-an-ab-test.html. Aunque su tema central es el peeking (módulo 7), el artículo parte de la misma idea de esta lección: decidir de antemano qué se va a medir y cuándo se va a decidir, en vez de ir ajustando el criterio sobre la marcha según lo que se va viendo. En inglés.