Python & Data Science
Inferencia Causal En revisión

La paradoja de Simpson: cuando los datos agregados cuentan la historia opuesta

Imagina que estás comparando las tasas de éxito de dos tratamientos médicos. El Tratamiento A supera al Tratamiento B con todos los pacientes combinados. Recomendarías el Tratamiento A. Sencillo.

Pero luego divides los datos por el tamaño del cálculo renal. El Tratamiento B funciona mejor para los cálculos pequeños y mejor para los cálculos grandes.

¿Cómo puede el Tratamiento B ganar en cada subgrupo y, sin embargo, perder en el total? Esto no es un error de cálculo — es la Paradoja de Simpson. Un fenómeno real, y una de las trampas más engañosas en la ciencia de datos, porque los datos son precisos pero la decisión a la que te llevan es incorrecta.

1. La paradoja que rompe tu intuición

En 1973, la Universidad de California, Berkeley tenía un problema. Sus datos de admisión mostraban que los hombres eran admitidos a una tasa significativamente mayor que las mujeres. A primera vista, parecía un claro caso de sesgo de género.

Estos son los datos brutos. Usaremos una versión simplificada de este famoso conjunto de datos para ver qué ocurrió.

import pandas as pd

# Creating the Berkeley-style dataset
data = {
    'Department': ['A', 'A', 'B', 'B'],
    'Gender': ['Male', 'Female', 'Male', 'Female'],
    'Applied': [800, 100, 100, 800],
    'Admitted': [500, 80, 10, 80]
}

df = pd.DataFrame(data)

# 1. Calculate Aggregate Admission Rates
aggregate = df.groupby('Gender').sum(numeric_only=True)
aggregate['Rate'] = aggregate['Admitted'] / aggregate['Applied']
print("--- Aggregate Admission Rates ---")
print(aggregate[['Applied', 'Admitted', 'Rate']])

# 2. Calculate Department-level Rates
df['Rate'] = df['Admitted'] / df['Applied']
print("\n--- Department-level Rates ---")
print(df[['Department', 'Gender', 'Rate']])

Lo que esto realmente significa: Al observar las Aggregate Admission Rates, los hombres tienen una tasa de éxito de 56.6% (510/900), mientras que las mujeres tienen una de 17.7% (160/900). Es una gran brecha.

Pero miremos las Department-level Rates. En el Departamento A, las mujeres tienen una tasa de 80% frente al 62.5% de los hombres. En el Departamento B, las mujeres tienen una tasa de 10% frente al 10% de los hombres. En ambos departamentos, las mujeres lo hicieron igual o mejor que los hombres. El panorama a nivel agregado es exactamente opuesto al del subgrupo.

2. Qué sucede realmente: la intuición

¿Cómo pueden los mismos datos contar dos historias opuestas? Esta es la parte más difícil de comprender, pero se reduce a los pesos.

La tasa agregada es un “promedio ponderado”. En nuestro ejemplo de Berkeley, es muy fácil ingresar al Departamento A, y muy difícil al Departamento B.

  • La mayoría de los hombres solicitó el Departamento A (el fácil).
  • La mayoría de las mujeres solicitó el Departamento B (el difícil).

Como los hombres estaban en su mayoría en el grupo “fácil”, su promedio general parece alto. Como las mujeres estaban en su mayoría en el grupo “difícil”, su promedio general parece bajo. La variable “Departamento” es el motor oculto aquí. En estadística, llamamos a esto una variable de confusión.

3. Verlo en código: un recorrido paso a paso

Python puede mostrarnos cómo se invierten estas tendencias. El conjunto de datos sintético a continuación compara las “Horas de Estudio” con los “Puntajes del Test” para dos clases.

import matplotlib.pyplot as plt
import numpy as np

# Create two groups of students
# Group 1: High achievers who study a lot but have a hard test
np.random.seed(42)
class_a_study = np.random.normal(10, 2, 50)
class_a_score = 0.5 * class_a_study + 50  # Positive trend

# Group 2: Struggling students who study less and have an easy test
class_b_study = np.random.normal(5, 2, 50)
class_b_score = 0.5 * class_b_study + 70  # Positive trend

plt.figure(figsize=(10, 6))
plt.scatter(class_a_study, class_a_score, label='Class A (Hard Test)', alpha=0.6)
plt.scatter(class_b_study, class_b_score, label='Class B (Easy Test)', alpha=0.6)

# Plot the aggregate trend line
all_study = np.concatenate([class_a_study, class_b_study])
all_score = np.concatenate([class_a_score, class_b_score])
m, b = np.polyfit(all_study, all_score, 1)
plt.plot(all_study, m*all_study + b, color='red', label='Aggregate Trend')

plt.xlabel('Study Hours')
plt.ylabel('Test Score')
plt.title("Simpson's Paradox: Individual vs. Aggregate Trends")
plt.legend()
plt.show()

print(f"Aggregate Correlation Slope: {m:.2f}")

Verificando esto con los datos: Dentro de cada clase, la pendiente es +0.5 — a más estudio, mayor puntaje. Pero la línea roja (el agregado) tiene una pendiente negativa. Si miras solo esa línea, concluirías que estudiar disminuye tu puntaje. Esta es la razón: la Clase B tiene puntajes más altos en general (el examen fácil) pero menos horas de estudio. Esos puntos elevan el lado izquierdo del gráfico, inclinando toda la línea hacia abajo.

4. Por qué ocurre esto: el rol de las variables de confusión

La paradoja de Simpson señala una variable de confusión en tus datos. Una variable de confusión es una variable que influye tanto en la “causa” como en el “efecto”.

En el caso de Berkeley:

  1. El Género (Causa) influyó en a qué Departamento postulaban las personas.
  2. El Departamento (Variable de confusión) influyó en la Tasa de Admisión (Efecto).

Si ignoras el Departamento, mezclas los resultados “fáciles” y “difíciles”. El resultado es una correlación espuria (falsa). Para solucionarlo, estratifica, lo que simplemente significa observar cada grupo por separado.

5. El peligro: cuando la paradoja de Simpson lleva a malas decisiones

Esto no es solo un rompecabezas matemático. Es una trampa, y los costos se miden en vidas y dólares.

  • Tratamientos médicos: En un conocido estudio sobre cálculos renales, el Tratamiento A parecía peor en general. Pero estratificar por el tamaño del cálculo contó una historia diferente: el Tratamiento A era en realidad mejor tanto para cálculos pequeños como grandes. Si se guían únicamente por el dato agregado, los médicos habrían abandonado el tratamiento más eficaz.
  • Negocios: Una empresa ve que su tasa de conversión general cae y entra en pánico. Cambian el sitio web. Pero al estratificar por dispositivo, el panorama se invierte: la conversión está aumentando tanto en Móvil como en Escritorio. La caída general se debió a que la proporción de usuarios de Móvil, que se convierten a una tasa menor, aumentó.

6. Cómo detectar la paradoja de Simpson antes de que te atrape

Aquí tienes una lista de verificación rápida para tener a mano:

  1. Verifica los tamaños de los grupos. ¿Tus subgrupos son drásticamente diferentes en tamaño — digamos, 800 frente a 100?
  2. Cuidado con los factores de confusión. ¿Existe una variable como “Departamento” o “Tipo de dispositivo” vinculada tanto a tu entrada como a tu salida?
  3. Estratifica, siempre. No reportes solo el número agregado. Desglosa por los subgrupos clave.
def check_reversal(df, group_col, outcome_col, stratify_col):
    # Calculate aggregate
    agg = df.groupby(group_col)[outcome_col].mean()
    agg_direction = agg.iloc[0] > agg.iloc[1]
    
    # Calculate stratified
    strat = df.groupby([stratify_col, group_col])[outcome_col].mean().unstack()
    
    print("--- Analysis Report ---")
    print(f"Aggregate Trend: {agg.index[0]} > {agg.index[1]} is {agg_direction}")
    
    for val in strat.index:
        strat_direction = strat.loc[val].iloc[0] > strat.loc[val].iloc[1]
        if strat_direction != agg_direction:
            print(f"!!! WARNING: Trend reversed in {stratify_col} == {val} !!!")
        else:
            print(f"Trend consistent in {stratify_col} == {val}")

7. Paradoja de Simpson e inferencia causal: el panorama general

La conclusión práctica: la correlación no es causalidad.

La paradoja de Simpson es el primer paso hacia el mundo de la Inferencia Causal. Los datos por sí solos no pueden contar toda la historia. Necesitas un “modelo causal”—un mapa mental de cómo las variables se afectan entre sí. Si el Departamento afecta a la Admisión, debes controlarlo.

8. Práctica: Encontrando la paradoja

Prueba esto: Carga un conjunto de datos de tu elección — los datos de supervivencia del Titanic funcionan bien. Compara las tasas de supervivencia entre hombres y mujeres. Luego, estratifica por clase (1st, 2nd, 3rd). ¿La brecha se reduce, se amplía o se invierte?

9. Resumen y qué viene a continuación

Lo que cubrimos:

  • La Paradoja de Simpson ocurre cuando una tendencia aparece en subgrupos, pero desaparece o se invierte en el agregado.
  • Los culpables son los tamaños de grupo desiguales y las variables de confusión.
  • La solución es estratificar tus datos y razonar sobre lo que realmente está impulsando el efecto.

En la siguiente entrega de esta serie, nos adentraremos en los Diagramas Causales (DAGs): trazando los mapas que nos indican exactamente qué variables controlar, para que una paradoja no nos tome por sorpresa otra vez.

Comprueba tu comprensión

Las preguntas a continuación van desde el simple recuerdo hasta el diseño abierto, siguiendo aproximadamente la Taxonomía de Bloom.

Recordar ¿Qué es un factor de confusión y qué papel jugó “Departamento” en el ejemplo de admisiones de Berkeley?

Comprender Con tus propias palabras, explica por qué la tasa de admisión agregada favorecía a los hombres a pesar de que las mujeres tenían tasas iguales o mejores en cada departamento individual, utilizando la explicación de “promedio ponderado” del artículo.

Aplicar Usando los números al estilo de Berkeley del artículo, si el Departamento A tenía 800 solicitantes masculinos con una tasa de admisión del 62.5% y el Departamento B tenía 100 solicitantes masculinos con una tasa de admisión del 10%, verifica que el conteo agregado de admisiones masculinas (500 + 10 = 510) coincida con lo que el artículo reporta para los 900 solicitantes masculinos combinados.

Analizar La función check_reversal del artículo compara la dirección de la tendencia agregada con la dirección dentro de cada subgrupo estratificado. Explica paso a paso por qué comparar direcciones (qué grupo es más grande) en lugar de comparar tasas sin procesar es la verificación correcta para detectar una reversión de la Paradoja de Simpson, y cómo se vería un falso negativo de esta función (un caso que pasaría desapercibido).

Evaluar El elemento 1 de la lista de verificación del artículo dice que se debe “verificar los tamaños de los grupos” como una señal de advertencia, ya que 800 frente a 100 es sospechoso. Critica esta heurística: ¿puede ocurrir la Paradoja de Simpson incluso cuando los subgrupos tienen tamaños aproximadamente iguales, o el tamaño desigual del grupo es realmente una condición necesaria para que ocurra la reversión?

Crear Diseña una verificación de estratificación para un nuevo escenario: una empresa observa que su puntaje general de satisfacción del cliente disminuyó este trimestre y sospecha de la Paradoja de Simpson. Propón una variable de confusión plausible (como el ejemplo comercial de “Tipo de dispositivo” del artículo) y describe lo que tendrías que ver en los datos estratificados para concluir que la disminución es real frente a un artefacto de cambio de mezcla.


Esta traducción fue generada automáticamente y puede contener errores. Si el idioma inglés es tu preferencia, puedes leer el artículo original en inglés .

«Aplica lo que aprendiste» es para suscriptores Supporter e Insider.

Suscríbete para desbloquear los ejercicios de este artículo.

Ver planes

¿Buscas otra cosa?

Busca en todos los artículos por título, resumen o tema.