Para mais notebooks de exemplo, veja aqui!
A tomada de decisão envolve entender como diferentes variáveis se afetam e prevendo o resultado quando alguns deles são alterados para novos valores. Por exemplo, dada uma variável de resultado, pode -se estar interessado em determinar como uma (s) ação (s) potencial (s) pode afetá -la, entender o que levou ao seu valor atual ou simular o que aconteceria se algumas variáveis fossem alteradas. Responder a essas perguntas requer raciocínio causal. A Dowhy é uma biblioteca Python que o guia através das várias etapas do raciocínio causal e fornece uma interface unificada para responder a perguntas causais.
O Dowhy fornece uma ampla variedade de algoritmos para estimativa de efeito, previsão, quantificação de influências causais, diagnóstico de estruturas causais, análise de causa raiz, intervenções e contrafactuais. Uma característica fundamental do Dowhy é sua API de refutação e falsificação que pode testar as premissas causais para qualquer método de estimativa, tornando a inferência mais robusta e acessível a não especialistas.
Modelos causais gráficos e possíveis resultados: o melhor dos dois mundos
A Dowhy se baseia em duas das estruturas mais poderosas para a inferência causal: modelos causais gráficos e possíveis resultados. Para estimativa de efeito, ele usa critérios baseados em gráfico e cálculo de cálculo para modelar suposições e identificar um efeito causal não paramétrico. Para estimativa, ele muda para métodos baseados principalmente em possíveis resultados.
Para questões causais além da estimativa de efeito, ele usa o poder dos modelos causais gráficos modelando o processo de geração de dados por meio de mecanismos causais explícitos em cada nó, que, por exemplo, desbloqueia os recursos para atribuir efeitos observados a variáveis específicas ou estimar contrafactuais de ponto.
Para uma rápida introdução à inferência causal, consulte Amit-Sharma/Inferência causal-Tutorial, também demos um tutorial mais abrangente na conferência da ACM Knowledge Discovery and Data Minering (KDD 2018): causalinference.gitlab.io/kdd-tutorial. Para uma introdução às quatro etapas da inferência causal e suas implicações para o aprendizado de máquina, você pode acessar este tutorial em vídeo do webinar Dowhy da Microsoft Research e para uma introdução à API do modelo causal gráfico, consulte a apresentação de Pycon na análise de causa raiz com dowhy.
Dowhy suporta as seguintes tarefas causais:
Para mais detalhes e como usar esses métodos na prática, consulte a documentação em https://py-why.github.io/dowhy
Suporte a dowhy Python 3.8+. Para instalar, você pode usar pip, poesia ou conda.
Última lançamento
Instale a versão mais recente usando PIP.
pip install dowhy
Instale a versão mais recente usando poesia.
poetry add dowhy
Instale a versão mais recente usando o CONDA.
conda install -c conda-forge dowhy
Se você enfrentar problemas de "resolução de ambiente" com o CONDA, tente conda update --all
e instale o Dowhy. Se isso não funcionar, use conda config --set channel_priority false
e tente instalar novamente. Se o problema persistir, adicione seu problema aqui.
Versão de desenvolvimento
Se você preferir usar a versão de desenvolvimento mais recente, sua ferramenta de gerenciamento de dependência precisará apontar para o nosso repositório do GitHub.
pip install git+https://github.com/py-why/dowhy@main
Requisitos
Dowhy requer algumas dependências. Detalhes sobre versões específicas podem ser encontradas na seção PyProject.toml, na seção Tool.poetry.dependências.
Se você enfrentar algum problema, tente instalar dependências manualmente.
pip install ' <dependency-name>==<version> '
Opcionalmente, se você deseja inserir gráficos no formato DOT, instale o Pydot (ou Pygraphviz).
Para gráficos com melhor aparência, você pode opcionalmente instalar o pygraphviz. Para prosseguir, primeiro instale o GraphViz e depois o Pygraphviz (no Ubuntu e Ubuntu WSL).
Observação
A instalação do pygraphviz pode causar problemas em algumas plataformas. Uma maneira que funciona para a maioria das distribuições Linux é instalar primeiro o GraphViz e depois o pygraphviz, como mostrado abaixo. Caso contrário, consulte a documentação do 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
A maioria das tarefas causais em Dowhy exige apenas algumas linhas de código para escrever. Aqui, estimamos exemplar o efeito causal de um tratamento em uma variável 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 )
Um gráfico causal pode ser definido de maneira diferente, mas a maneira mais comum é via NetworkX. Após o carregamento dos dados, usamos as quatro operações principais para estimativa de efeito em Dowhy: Model , IdentifiS , estimar e 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 a interpretabilidade de sua saída. Em qualquer momento da análise, você pode inspecionar as suposições não testadas, estimativas identificadas (se houver) e a estimativa (se houver). Aqui está uma saída de amostra do estimador de regressão linear:
Para um exemplo de código completo, confira o início do Notebook Dowhy.
Você também pode usar os métodos de estimativa do efeito médio condicional do tratamento (CATE) do EconML, como mostrado no caderno de efeitos do tratamento condicional. Aqui está um trecho 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" :{}})
A estrutura gráfica do modelo causal de Dowhy oferece ferramentas poderosas para abordar questões causais além da estimativa de efeitos. É baseado na estrutura gráfica do modelo causal de Pearl e modela o processo de geração de dados causais de cada variável explicitamente por meio de mecanismos causais para suportar uma ampla gama de algoritmos causais. Para mais detalhes, consulte os elementos do livro da inferência causal.
Consultas causais complexas, como atribuir anomalias observadas a nós no sistema, podem ser realizadas com apenas algumas linhas 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 )
A estrutura do GCM oferece muitos outros recursos além desses exemplos. Para um exemplo de código completo, consulte o Notebook de exemplo de loja on -line.
Para mais funcionalidades, exemplo de aplicativos de Dowhy e detalhes sobre as saídas, consulte o Guia do Usuário ou os notebooks Jupyter de compra.
Microsoft Research Blog | Tutorial em vídeo para estimativa de efeito | Tutorial em vídeo para análise de causa raiz | Arxiv Paper | Arxiv Paper (extensão do modelo causal gráfico) | Deslizamentos
Se você achar o Dowhy útil para o seu trabalho, cite as duas referências a seguir:
Bibtex:
@Article {Dowhy, title = {Dowhy: uma biblioteca de ponta a ponta para inferência causal}, autor = {Sharma, Amit e Kiciman, Emre}, Journal = {arxiv pré -impressão arxiv: 2011.04216}, ano = {2020} } @article {jmlr: v25: 22-1258, autor = {Patrick Bl {{ "O}} Baum e Peter G {{" O}} TZ e Kailash Budhathoki e Atalanti A. Mastakouri e Dominik Janzing}, title = {Dowhy-GCM: uma extensão de dowhy para inferência causal em modelos causais gráficos}, Journal = {Journal of Machine Learning Research}, ano = {2024}, volume = {25}, número = {147}, páginas = {1--7}, url = {http://jmlr.org/papers/v25/22-1258.html} }
Se você encontrar um problema ou tiver uma solicitação específica para dowhy, por favor, levante um problema.
Este projeto recebe contribuições e sugestões. Para obter um guia para contribuir e uma lista de todos os colaboradores, confira contribuindo.md e nossos documentos para contribuir com código. Nosso código de conduta contribuinte está disponível aqui.