Causal Discovery
A descoberta causal recupera grafos de causa e efeito a partir de dados. Como funcionam o algoritmo PC e seus sucessores, quais são suas premissas e um exemplo executável.
A descoberta causal consiste em inferir, a partir dos dados, quais variáveis causam quais efeitos, gerando um grafo direcionado em que uma seta de X para Y significa que X influencia Y diretamente. O aprendizado de máquina padrão aprende associações que bastam para a modelagem preditiva. A descoberta causal pergunta quais dessas associações se manteriam diante de uma intervenção, como mudar a configuração de uma máquina ou a programação dos semáforos. Sua saída é um conjunto de estruturas causais candidatas, muitas vezes com algumas arestas sem direção definida, que especialistas do domínio e experimentos refinam em seguida.
O que torna a estrutura causal aprendível#
Os grafos causais geralmente são grafos acíclicos direcionados (DAGs), a mesma estrutura usada por uma rede bayesiana, interpretada causalmente: cada seta representa um efeito direto. Os algoritmos de descoberta se baseiam em três pressupostos padrão. Segundo a condição de Markov causal, quando as causas diretas de uma variável são conhecidas, ela é independente de todas as variáveis que não sejam efeitos dela. A condição de fidelidade afirma que toda independência nos dados decorre da estrutura do grafo, e não de efeitos que por acaso se anulam. A suficiência causal afirma que nenhuma variável não medida causa duas variáveis medidas.
Mesmo com os três pressupostos, os dados observacionais nem sempre permitem determinar a direção das arestas. A cadeia X → Y → Z, a cadeia invertida X ← Y ← Z e a bifurcação X ← Y → Z implicam todas o mesmo padrão de independência: X e Z tornam-se independentes quando Y é conhecido, pelo que nenhum volume de dados observacionais permite distingui-las. O colisor X → Y ← Z é diferente. X e Z são independentes por si só, mas tornam-se dependentes quando Y é conhecido, uma assinatura que determina a direção de ambas as setas.
Por isso, os algoritmos retornam uma classe de equivalência de Markov: um grafo parcialmente direcionado cujas arestas orientadas têm direção certa e cujas arestas não direcionadas podem apontar para qualquer lado. Essa mesma característica explica uma fonte clássica de viés do conjunto de dados: filtrar por um colisor ou ajustá-lo cria uma dependência entre suas causas que não existe na população completa.
Algoritmos de descoberta#
Três famílias abrangem a maioria dos métodos. Algoritmos baseados em restrições, como o PC, nomeado em homenagem a Peter Spirtes e Clark Glymour, que o publicaram em 1991, começam com um grafo não direcionado totalmente conectado, removem as arestas entre variáveis consideradas condicionalmente independentes e, então, orientam os colisores. O FCI amplia essa abordagem para contextos com confundidores ocultos. Algoritmos baseados em pontuação, como a busca gulosa por equivalência (GES), procuram nos grafos a melhor pontuação, por exemplo, o critério de informação bayesiano. O NOTEARS reformula a aciclicidade como uma restrição suave, para que a busca possa ser executada por otimização contínua com descida do gradiente. Métodos funcionais, como o LiNGAM, pressupõem relações lineares com ruído não gaussiano, o que permite identificar a direção de todas as arestas, mesmo entre apenas duas variáveis.
As bibliotecas de descoberta também aceitam ordenação temporal, restrições físicas e conhecimento especializado como regras de contexto que proíbem ou exigem arestas específicas. Isso reduz o espaço de busca e orienta arestas que os dados, sozinhos, não permitem direcionar. A biblioteca de código aberto causal-learn implementa as três famílias. Este exemplo gera dados a partir de um colisor conhecido e o recupera com PC:
import numpy as np
from causallearn.search.ConstraintBased.PC import pc
rng = np.random.default_rng(0)
n = 5000
# Verdade fundamental: a chuva e um evento no estádio causam congestionamento
rain = rng.normal(size=n)
event = rng.normal(size=n)
congestion = rain + event + rng.normal(scale=0.5, size=n)
# PC testa a independência condicional para recuperar o grafo usando apenas os dados
data = np.column_stack([rain, event, congestion])
result = pc(data, alpha=0.05, node_names=["rain", "event", "congestion"], show_progress=False)
print(result.G)A saída lista duas arestas direcionadas, rain --> congestion e event --> congestion. PC orienta as duas porque rain e event são independentes, mas tornam-se dependentes quando congestion é conhecida. Se a realidade fosse uma cadeia de rain para congestion e depois para delays, as arestas retornariam sem direção.
Onde a descoberta causal é usada#
A biologia forneceu um marco inicial. Em 2005, Karen Sachs e colegas aprenderam uma rede de sinalização de proteínas com 11 proteínas e fosfolipídios a partir de medições de células individuais, recuperando a maioria das conexões conhecidas. Os autores confirmaram uma nova ligação prevista em experimentos laboratoriais de acompanhamento. Na ciência climática, métodos de séries temporais como o PCMCI, desenvolvido por Jakob Runge e implementado no pacote Tigramite, encontram ligações causais entre variáveis climáticas, considerando defasagens e autocorrelação, o que os torna adequados para a análise de séries temporais. O ecossistema PyWhy combina ferramentas de descoberta com o DoWhy para a etapa seguinte: estimar a magnitude de um efeito depois de fixar o grafo.
A visão computacional pode fornecer as variáveis. A contagem de objetos com o Ultralytics YOLO26 contabiliza os veículos e pedestres que cruzam uma linha ou região em vídeos de trânsito. As contagens registradas por intervalo de tempo podem ser combinadas com dados meteorológicos, programações de eventos e tempos dos semáforos antes da execução de um algoritmo de descoberta.
Descoberta causal e termos relacionados#
- Aprendizado de representações causais: Aprende as próprias variáveis causais a partir de entradas brutas, como pixels, além do grafo que as conecta. A descoberta causal parte de variáveis que já foram medidas.
- IA explicável (XAI): Explica quais entradas influenciaram a previsão de um modelo, sem afirmar que alterar uma entrada mudaria o resultado no mundo real.
- Engenharia de atributos: Seleciona e cria entradas que melhoram a previsão, incluindo variáveis apenas correlacionadas com o alvo. Um grafo causal identifica as variáveis cuja mudança alteraria o alvo.










