Saltar al contenido

# inferencia-causal-practica-con-dowhy-y-grafos-dirigidos-dags

Inferencia Causal Práctica con DoWhy y Grafos Dirigidos (DAGs)

Volver a la portada del curso
Notebook

Prá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.

Recursos