Para obtener más cuadernos de ejemplo, ¡vea aquí!
La toma de decisiones implica comprender cómo las diferentes variables se afectan entre sí y predicen el resultado cuando algunas de ellas se cambian a nuevos valores. Por ejemplo, dada una variable de resultado, uno puede estar interesado en determinar cómo una (s) acción (s) potencial (s) puede afectarlo, comprender lo que condujo a su valor actual o simular lo que sucedería si se cambian algunas variables. Responder tales preguntas requiere un razonamiento causal. Dowhy es una biblioteca de Python que lo guía a través de los diversos pasos del razonamiento causal y proporciona una interfaz unificada para responder preguntas causales.
Dowhy proporciona una amplia variedad de algoritmos para la estimación de efectos, predicción, cuantificación de influencias causales, diagnóstico de estructuras causales, análisis de causa raíz, intervenciones y contrafactuales. Una característica clave de Dowhy es su API de refutación y falsificación que puede probar suposiciones causales para cualquier método de estimación, lo que hace que la inferencia sea más robusta y accesible para los no expertos.
Modelos causales gráficos y resultados potenciales: lo mejor de ambos mundos
Dowhy se basa en dos de los marcos más potentes para la inferencia causal: modelos causales gráficos y resultados potenciales. Para la estimación del efecto, utiliza criterios gráficos y Do-Calculus para modelar supuestos e identificar un efecto causal no paramétrico. Para la estimación, cambia a métodos basados principalmente en resultados potenciales.
Para preguntas causales más allá de la estimación del efecto, utiliza la potencia de los modelos causales gráficos modelando el proceso de generación de datos a través de mecanismos causales explícitos en cada nodo, lo que, por ejemplo, desbloquea las capacidades para atribuir efectos observados a variables particulares o estimar contrafactuales puntuales.
Para obtener una introducción rápida a la inferencia causal, consulte Amit-Sharma/Causal-Inference-Tutorial también dimos un tutorial más completo en la conferencia ACM Knowledge Discovery and Data Mining (KDD 2018): causalinference.gitlab.io/kdd-tutorial. Para obtener una introducción a los cuatro pasos de inferencia causal y sus implicaciones para el aprendizaje automático, puede acceder a este video tutorial de Microsoft Research Dowhy Webinar y para una introducción a la API del modelo causal gráfico, consulte la presentación de Pycon sobre el análisis de causa raíz con Dowhy.
Dowhy admite las siguientes tareas causales:
Para obtener más detalles y cómo usar estos métodos en la práctica, consulte la documentación en https://py-why.github.io/dowhy
Dowhy Support Python 3.8+. Para instalar, puede usar PIP, Poesía o Conda.
Último lanzamiento
Instale la última versión con PIP.
pip install dowhy
Instale la última versión con poesía.
poetry add dowhy
Instale la última versión con Conda.
conda install -c conda-forge dowhy
Si enfrenta problemas de "resolución del entorno" con Conda, pruebe conda update --all
y luego instale Dowhy. Si eso no funciona, use conda config --set channel_priority false
e intente instalar nuevamente. Si el problema persiste, agregue su problema aquí.
Versión de desarrollo
Si prefiere usar la última versión de desarrollo, su herramienta de administración de dependencias deberá apuntar en nuestro repositorio de GitHub.
pip install git+https://github.com/py-why/dowhy@main
Requisitos
Dowhy requiere algunas dependencias. Los detalles sobre versiones específicas se pueden encontrar en pyproject.toml, en la sección Tool.poetry.ependencies.
Si enfrenta algún problema, intente instalar dependencias manualmente.
pip install ' <dependency-name>==<version> '
Opcionalmente, si desea ingresar gráficos en el formato DOT, instale pydot (o pygraphviz).
Para gráficos más atractivos, opcionalmente puede instalar pygraphviz. Para continuar, primero instale GraphViz y luego PygraphViz (en Ubuntu y Ubuntu WSL).
Nota
Instalar Pygraphviz puede causar problemas en algunas plataformas. Una forma que funciona para la mayoría de las distribuciones de Linux es instalar primero GraphViz y luego PygraphViz como se muestra a continuación. De lo contrario, consulte la documentación de Pygraphviz.
sudo apt install graphviz libgraphviz-dev graphviz-dev pkg-config
pip install --global-option=build_ext
--global-option= " -I/usr/local/include/graphviz/ "
--global-option= " -L/usr/local/lib/graphviz " pygraphviz
La mayoría de las tareas causales en Dowhy solo requieren unas pocas líneas de código para escribir. Aquí, estimamos ejemplos del efecto causal de un tratamiento en una variable de resultado:
from dowhy import CausalModel
import dowhy . datasets
# Load some sample data
data = dowhy . datasets . linear_dataset (
beta = 10 ,
num_common_causes = 5 ,
num_instruments = 2 ,
num_samples = 10000 ,
treatment_is_binary = True )
Un gráfico causal se puede definir de una manera diferente, pero la forma más común es a través de NetworkX. Después de cargar en los datos, utilizamos las cuatro operaciones principales para la estimación de efectos en Dowhy: modelo , identificar , estimar y refutar :
# I. Create a causal model from the data and given graph.
model = CausalModel (
data = data [ "df" ],
treatment = data [ "treatment_name" ],
outcome = data [ "outcome_name" ],
graph = data [ "gml_graph" ]) # Or alternatively, as nx.DiGraph
# II. Identify causal effect and return target estimands
identified_estimand = model . identify_effect ()
# III. Estimate the target estimand using a statistical method.
estimate = model . estimate_effect ( identified_estimand ,
method_name = "backdoor.propensity_score_matching" )
# IV. Refute the obtained estimate using multiple robustness checks.
refute_results = model . refute_estimate ( identified_estimand , estimate ,
method_name = "random_common_cause" )
Dowhy enfatiza la interpretabilidad de su producción. En cualquier momento del análisis, puede inspeccionar los supuestos no probados, los estimadores identificados (si los hay) y la estimación (si las hay). Aquí hay una salida de muestra del estimador de regresión lineal:
Para obtener un ejemplo de código completo, consulte el cuaderno de inicio con Dowhy.
También puede usar métodos de estimación del efecto de tratamiento promedio condicional (CATE) de ECONML, como se muestra en el cuaderno de efectos del tratamiento condicional. Aquí hay un fragmento de código.
from sklearn . preprocessing import PolynomialFeatures
from sklearn . linear_model import LassoCV
from sklearn . ensemble import GradientBoostingRegressor
dml_estimate = model . estimate_effect ( identified_estimand , method_name = "backdoor.econml.dml.DML" ,
control_value = 0 ,
treatment_value = 1 ,
target_units = lambda df : df [ "X0" ] > 1 ,
confidence_intervals = False ,
method_params = {
"init_params" :{ 'model_y' : GradientBoostingRegressor (),
'model_t' : GradientBoostingRegressor (),
'model_final' : LassoCV (),
'featurizer' : PolynomialFeatures ( degree = 1 , include_bias = True )},
"fit_params" :{}})
El marco de modelo causal gráfico de Dowhy ofrece herramientas potentes para abordar las preguntas causales más allá de la estimación del efecto. Se basa en el marco de modelo causal gráfico de Pearl y modela el proceso de generación de datos causal de cada variable explícitamente a través de mecanismos causales para admitir una amplia gama de algoritmos causales. Para obtener más detalles, consulte los elementos del libro de la inferencia causal.
Las consultas causales complejas, como la atribución de anomalías observadas a los nodos en el sistema, se pueden realizar con solo unas pocas líneas de código:
import networkx as nx , numpy as np , pandas as pd
from dowhy import gcm
# Let's generate some "normal" data we assume we're given from our problem domain:
X = np . random . normal ( loc = 0 , scale = 1 , size = 1000 )
Y = 2 * X + np . random . normal ( loc = 0 , scale = 1 , size = 1000 )
Z = 3 * Y + np . random . normal ( loc = 0 , scale = 1 , size = 1000 )
data = pd . DataFrame ( dict ( X = X , Y = Y , Z = Z ))
# 1. Modeling cause-effect relationships as a structural causal model
# (causal graph + functional causal models):
causal_model = gcm . StructuralCausalModel ( nx . DiGraph ([( 'X' , 'Y' ), ( 'Y' , 'Z' )])) # X -> Y -> Z
gcm . auto . assign_causal_mechanisms ( causal_model , data )
# 2. Fitting the SCM to the data:
gcm . fit ( causal_model , data )
# Optional: Evaluate causal model
print ( gcm . evaluate_causal_model ( causal_model , data ))
# Step 3: Perform a causal analysis.
# results = gcm.<causal_query>(causal_model, ...)
# For instance, root cause analysis:
anomalous_sample = pd . DataFrame ( dict ( X = [ 0.1 ], Y = [ 6.2 ], Z = [ 19 ])) # Here, Y is the root cause.
# "Which node is the root cause of the anomaly in Z?":
anomaly_attribution = gcm . attribute_anomalies ( causal_model , "Z" , anomalous_sample )
# Or sampling from an interventional distribution. Here, under the intervention do(Y := 2).
samples = gcm . interventional_samples ( causal_model , interventions = { 'Y' : lambda y : 2 }, num_samples_to_draw = 100 )
El marco GCM ofrece muchas más características más allá de estos ejemplos. Para obtener un ejemplo de código completo, consulte el cuaderno de ejemplo de la tienda en línea.
Para obtener más funcionalidades, aplicaciones de ejemplo de Dowhy y detalles sobre las salidas, consulte la Guía del usuario o los cuadernos Jupyter de pago.
Blog de investigación de Microsoft | Video tutorial para la estimación del efecto | Video tutorial para análisis de causa raíz | Paper arxiv | Papel ARXIV (extensión del modelo causal gráfico) | Toboganes
Si encuentra útil para su trabajo, cita las dos referencias siguientes:
Bibtex:
@article {Dowhy, title = {Dowhy: una biblioteca de extremo a extremo para inferencia causal}, Autor = {Sharma, Amit y Kiciman, Emre}, Journal = {arxiv preprint arxiv: 2011.04216}, año = {2020} } @article {jmlr: v25: 22-1258, Autor = {Patrick Bl {{ "o}} Baum y Peter G {{" o}} Tz y Kailash Budhathoki y Atalanti A. Mastakouri y Dominik Janzing},, title = {dowhy-gcm: una extensión de Dowhy para la inferencia causal en modelos causales gráficos}, Journal = {Journal of Machine Learning Research}, año = {2024}, volumen = {25}, número = {147}, páginas = {1--7}, url = {http://jmlr.org/papers/v25/22-1258.html} }
Si encuentra un problema o tiene una solicitud específica de Dowhy, plantee un problema.
Este proyecto da la bienvenida a las contribuciones y sugerencias. Para obtener una guía para contribuir y una lista de todos los contribuyentes, consulte la contribuyente. MD y nuestros documentos para el código contribuyente. Nuestro código de conducta de contribuyente está disponible aquí.