¡Hola a todos! Hoy me sumerjo en un tema fascinante y crucial en el mundo de los datos: el Análisis Causal. Como analista, a menudo nos encontramos con correlaciones, pero ¿qué hay de la causalidad? Es la pregunta del millón que puede cambiar la forma en que tomamos decisiones. En este artículo, voy a guiarlos a través del proceso de descubrir relaciones de causa y efecto en sus datos usando Python, desde la teoría hasta la práctica. Mi objetivo es que, al finalizar este recorrido, se sientan equipados para ir más allá de la correlación y empezar a desentrañar el verdadero impacto de sus acciones.
Introducción: Más allá de la correlación
En el análisis de datos, es fácil caer en la trampa de confundir correlación con causalidad. Un ejemplo clásico es la venta de helados y los incidentes de ahogamiento: ambos aumentan en verano, pero uno no causa el otro. La verdadera causa es el clima cálido que lleva a más personas a comprar helados y a nadar. La inferencia causal busca precisamente eso: identificar las verdaderas relaciones de causa y efecto. Es una herramienta poderosa para tomar decisiones informadas, ya sea en negocios, salud o políticas públicas.
Metodología: ¿Qué es la inferencia causal?
La inferencia causal es un campo de estudio que se centra en determinar si una variable (la causa) tiene un efecto directo sobre otra variable (el efecto), y en cuantificar la magnitud de ese efecto. A diferencia de la predicción, que se pregunta “qué pasará”, la inferencia causal se pregunta “qué pasaría si…”, explorando escenarios contrafactuales.
Causalidad vs. Correlación
Es vital entender que la correlación mide la relación estadística entre dos variables. Si una sube, la otra tiende a subir (o bajar). Pero esto no implica que una cause la otra. La causalidad, en cambio, implica que un cambio en una variable *produce* un cambio en otra. La correlación puede ser una pista de una posible causalidad, pero no es una prueba.
DAGs (Directed Acyclic Graphs)
Los DAGs o Grafos Acíclicos Dirigidos son herramientas visuales que nos ayudan a representar las relaciones causales entre variables. Los nodos representan variables y las flechas dirigen la dirección de la causalidad. Son fundamentales para identificar variables de confusión y para diseñar estrategias de análisis que nos permitan aislar el efecto causal de interés.
Variables de Confusión y Contrafactuales
Una variable de confusión es una variable que afecta tanto a la causa como al efecto, creando una correlación espuria. Ignorarlas es una de las principales razones por las que los análisis no causales pueden llevar a conclusiones erróneas. Por otro lado, los contrafactuales son la base de la inferencia causal. Se refieren a lo que *habría sucedido* si una persona o entidad hubiera recibido un tratamiento diferente al que realmente recibió. Es imposible observar ambos resultados para la misma unidad, por lo que utilizamos métodos para estimar este “resultado potencial”.
Métodos de Inferencia Causal
Existen varios métodos para abordar la inferencia causal, cada uno con sus supuestos y aplicaciones:
- Regresión: Si bien una regresión por sí sola muestra correlaciones, con un diseño cuidadoso y controlando por variables de confusión, puede ser una herramienta para estimar efectos causales.
- Matching (Emparejamiento): Intenta crear grupos de tratamiento y control que sean comparables en todas las variables observadas, excepto en el tratamiento.
- Variables Instrumentales: Utiliza una tercera variable (el instrumento) que afecta al tratamiento pero no al resultado directamente, excepto a través del tratamiento.
- Diferencias en Diferencias (Diff-in-Diff): Compara el cambio en el resultado para un grupo de tratamiento con el cambio en el resultado para un grupo de control a lo largo del tiempo.
- Propensity Score Methods: Reduce la multidimensionalidad de las covariables en un único puntaje, lo que facilita el emparejamiento o la ponderación.
Análisis Causal con Python: Ejemplos Prácticos
Ahora, vamos a ensuciarnos las manos con Python. Para esta sección, he seleccionado dos datasets que nos permitirán explorar preguntas de inferencia causal.
Dataset 1: El Estudio de Lalonde sobre Capacitación Laboral
El dataset de Lalonde es un clásico en la econometría y la inferencia causal. Contiene datos sobre un programa de capacitación laboral (National Supported Work Demonstration) y los ingresos posteriores de los participantes. Es ideal para estudiar el impacto de una intervención.
Pregunta de Inferencia Causal: ¿Cuál es el efecto causal de la participación en un programa de capacitación laboral sobre los ingresos anuales de los individuos?
Código para la descarga/acceso
import pandas as pd
# El dataset de Lalonde no está directamente en una librería de Python,
# pero se puede cargar fácilmente desde un archivo CSV.
# Aquí usaré un enlace a una versión limpia del dataset:
url_lalonde = "https://raw.githubusercontent.com/Laurels/Causal_Analysis_Python_Example/master/lalonde.csv"
lalonde_df = pd.read_csv(url_lalonde)
print(lalonde_df.head())
print(lalonde_df.info())
A B Category Date Value
0 0.574473 35.883048 X 2023-01-01 0.326927
1 0.841829 87.720054 X 2023-01-02 -0.219101
2 0.139772 39.244511 X 2023-01-03 0.829406
3 0.795267 81.659944 X 2023-01-04 -2.211135
4 0.201627 43.913491 X 2023-01-05 0.235615
RangeIndex: 10 entries, 0 to 9
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 10 non-null float64
1 B 10 non-null float64
2 Category 10 non-null str
3 Date 10 non-null datetime64[us]
4 Value 10 non-null float64
dtypes: datetime64[us](1), float64(3), str(1)
memory usage: 542.0 bytes
None
Dataset 2: Dataset Sintético de Campaña de Marketing
Para complementar, crearemos un dataset sintético que simule los resultados de una campaña de marketing. Esto nos permite controlar las relaciones causales subyacentes y demostrar cómo se pueden aplicar los métodos de inferencia causal en un entorno donde sabemos la “verdad” causal.
Pregunta de Inferencia Causal: ¿Cómo afecta el envío de un correo electrónico de marketing a la probabilidad de que un cliente realice una compra?
Código para la generación del dataset
import numpy as np
import pandas as pd
np.random.seed(42) # Para reproducibilidad
# Número de observaciones
n_samples = 1000
# Variables de confusión (covariables)
edad = np.random.randint(20, 60, n_samples)
ingresos = np.random.normal(30000, 10000, n_samples)
historial_compras = np.random.randint(0, 10, n_samples)
# Asignación del tratamiento (envío de email)
# El tratamiento está influenciado por las covariables (ej. clientes más jóvenes y con mayor ingreso son más propensos a recibir el email)
prob_tratamiento = 1 / (1 + np.exp(-(0.05 * (edad - 40) - 0.00002 * (ingresos - 30000) + 0.1 * historial_compras)))
tratamiento = (np.random.rand(n_samples) < prob_tratamiento).astype(int)
# Resultado (compra)
# La compra está influenciada por las covariables y el tratamiento
# Suponemos un efecto causal del tratamiento
compra_base = (0.1 * historial_compras + 0.00001 * ingresos - 0.02 * (edad - 40) + np.random.normal(0, 0.5, n_samples))
prob_compra = 1 / (1 + np.exp(-(compra_base + 0.5 * tratamiento))) # 0.5 es el efecto causal del email
compra = (np.random.rand(n_samples) < prob_compra).astype(int)
marketing_df = pd.DataFrame({
'edad': edad,
'ingresos': ingresos,
'historial_compras': historial_compras,
'tratamiento_email': tratamiento,
'compra': compra
})
print(marketing_df.head())
print(marketing_df.info())
edad ingresos historial_compras tratamiento_email compra
0 58 23725.811156 2 0 0
1 48 25046.107571 2 1 1
2 34 34188.394139 0 0 0
3 27 26107.118083 6 0 0
4 40 17650.556065 4 1 1
RangeIndex: 1000 entries, 0 to 999
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 edad 1000 non-null int64
1 ingresos 1000 non-null float64
2 historial_compras 1000 non-null int64
3 tratamiento_email 1000 non-null int64
4 compra 1000 non-null int64
dtypes: float64(1), int64(4)
memory usage: 39.2 KB
None
Conclusiones: El poder de la causalidad
A lo largo de este artículo, hemos explorado los fundamentos de la inferencia causal, distinguimos entre correlación y causalidad, y presentamos herramientas conceptuales como los DAGs. Lo más importante es que hemos sentado las bases para aplicar estos conceptos en Python, seleccionando datasets que nos permitirán en futuras entregas, implementar métodos de inferencia causal. Entender y aplicar el análisis causal es una habilidad invaluable para cualquier analista de datos que busque no solo describir lo que sucede, sino explicar por qué sucede.
¡No te pierdas la oportunidad de transformar tu carrera y convertirte en un experto en datos!
Y recuerda que siempre, siempre, vas a aprender un bit a la vez!
🤖 Automatiza tu trading en 5 días con Python
Únete a mi Mini-Curso gratuito por email. Aprende a extraer datos reales, crear indicadores cuantitativos y hacer backtesting profesional.