# inferencia-causal-practica-con-dowhy-y-grafos-dirigidos-dags
Inferencia Causal Práctica con DoWhy y Grafos Dirigidos (DAGs)
Volver a la portada del cursoPrácticas en DoWhy y DAGs
Sección 4 · Análisis Practico con DoWhy
Prácticas en DoWhy y DAGs
En este notebook aplicas los cuatro pasos de DoWhy a tres situaciones: con confusores medidos, con un confusor oculto y con un colisionador. En cada caso conoces el efecto verdadero, así que puedes comprobar qué estrategias aciertan y cuáles se equivocan. Descarga el notebook adjunto y ejecútalo de principio a fin.
Antes de empezar
Necesitas pip install dowhy matplotlib. El material se probó con DoWhy 0.14, pandas 3.0 y scikit-learn 1.8. Todos los datos se simulan con semilla fija.
Caso 1: cupones con confusores medidos
Retomamos la tienda en línea de la lección anterior: 4,000 clientes, efecto verdadero del cupón de 8 pesos y una diferencia ingenua de 17.02. Con el mismo estimando de puerta trasera comparamos cuatro estimadores, y con el sorteo, una variable instrumental:
metodos = ["backdoor.linear_regression",
"backdoor.propensity_score_matching",
"backdoor.propensity_score_weighting",
"backdoor.propensity_score_stratification",
"iv.instrumental_variable"]
for metodo in metodos:
est = modelo.estimate_effect(estimando, method_name=metodo)
print(f"{metodo:<42} {est.value:6.3f}")
Los resultados:
- Regresión lineal: 7.899
- Emparejamiento por puntaje de propensión: 7.444
- Ponderación por probabilidad inversa (IPW): 7.898
- Estratificación por puntaje de propensión: 7.821
- Variable instrumental (sorteo): 7.423
Todas quedan cerca de 8 y lejos de 17. Los métodos de puntaje de propensión modelan $P(T=1 \mid W)$ con una regresión logística y comparan clientes con probabilidad parecida de recibir cupón. La variable instrumental no usa los confusores: aprovecha que el sorteo cambia la probabilidad de recibir cupón (de 0.446 a 0.829) sin afectar el gasto por otra vía. Su costo es la varianza: con instrumentos débiles, la estimación se vuelve muy ruidosa.
Caso 2: confusor oculto y puerta delantera
Un estudio clásico del razonamiento causal: fumar aumenta un indicador de riesgo, pero una predisposición no medida $U$ influye en ambos. El efecto pasa completo por la acumulación de alquitrán, que sí se mide. El efecto verdadero es 3.0 y la diferencia ingenua, 6.038.
import networkx as nx
g = nx.DiGraph([("U", "fuma"), ("U", "riesgo"),
("fuma", "alquitran"), ("alquitran", "riesgo")])
modelo_fd = CausalModel(data=fumadores, treatment="fuma", outcome="riesgo", graph=g)
est_fd = modelo_fd.identify_effect()
print(est_fd.get_backdoor_variables(), est_fd.get_frontdoor_variables())
efecto = modelo_fd.estimate_effect(est_fd, method_name="frontdoor.two_stage_regression")
print(round(efecto.value, 3))
Como U está en el grafo pero no en los datos, DoWhy la trata como no observada: no hay conjunto de puerta trasera válido ([]), pero sí puerta delantera por alquitran. La estimación en dos etapas da 2.892, cerca del 3 verdadero.
Caso 3: el colisionador
Simulamos habilidad y carisma independientes en 5,000 candidatos. Se contrata a quien supera un umbral en la suma de ambas. En la población, la correlación entre habilidad y carisma es 0.015. Entre los contratados (16% del total) es −0.499: una relación negativa fuerte que no existe. Condicionar en contratado, un colisionador, la creó. El notebook lo muestra en un diagrama de dispersión y conecta el resultado con el sesgo de selección en encuestas.
Trampas comunes
- Comparar estimadores como si fueran modelos rivales: todos estiman el mismo estimando. Si discrepan mucho, revisa el soporte común (solapamiento de puntajes de propensión) antes de elegir.
- Puntajes de propensión cercanos a 0 o 1: los pesos de IPW explotan. Grafica la distribución del puntaje por grupo.
- Instrumentos débiles: si el instrumento apenas mueve el tratamiento, la estimación IV es inestable. Reporta el efecto del instrumento sobre el tratamiento.
- Olvidar declarar el confusor oculto: si no lo dibujas, DoWhy asume que no existe y propone un ajuste que parece válido.
Cierre
Termina el notebook cambiando el grafo del caso 1: quita la flecha visitas -> gasto y vuelve a estimar. El grafo equivocado da un efecto sesgado sin ningún aviso. Esa es la motivación de la siguiente sección: validar el modelo, no solo estimar.