Grafos Causais

Visão geral

Grafos causais (causal graphs) são uma forma compacta de representar suposições de causa–efeito e de usar essas suposições para responder a perguntas que modelos estatísticos comuns não conseguem, como:

  • “O que aconteceria com o churn se intervíssemos e obrigássemos todo mundo a ver um novo fluxo de onboarding?”
  • “Um modelo depende de um proxy espúrio (spurious proxy) que vai falhar sob mudança de distribuição (distribution shift)?”
  • “Uma associação reportada provavelmente é causal, confundida ou explicada por viés de seleção (selection bias)?”

O formalismo de grafos causais mais comum na inferência causal (causal inference) moderna é o grafo acíclico direcionado (directed acyclic graph, DAG) em conjunto com um modelo causal estrutural (structural causal model, SCM). Um DAG fornece a estrutura gráfica (quais variáveis causam quais), enquanto um SCM fornece a semântica que define como raciocinar sobre intervenções (usando o operador do(·) (do-operator) de Pearl) e, se necessário, contrafactuais (counterfactuals).

Este artigo foca em:

  • DAGs como modelos causais (e como eles codificam independências condicionais),
  • SCMs (equações estruturais + ruído),
  • como raciocinar sobre intervenções e por que P(Y|X) não é o mesmo que P(Y|do(X)).

Para tópicos relacionados, veja:

Grafos Acíclicos Direcionados (DAGs)

O que um DAG representa

Um DAG é um grafo com:

  • nós = variáveis (por exemplo, tratamento, desfecho, confundidores (confounders), mediadores (mediators))
  • arestas direcionadas X → Y = a afirmação de que X é uma causa direta de Y (em relação ao conjunto de variáveis)
  • acíclico = você não pode começar em um nó e seguir as setas para voltar a ele

Um DAG causal não é apenas uma visualização. Ele codifica um conjunto de suposições testáveis (e não testáveis) sobre quais independências condicionais devem valer e, de forma crucial, o que acontece sob intervenções.

DAGs causais vs redes bayesianas

Uma rede bayesiana (Bayesian network) também é um DAG, mas muitas vezes ela é apresentada como uma ferramenta de fatorização probabilística. Um DAG causal adiciona uma interpretação extra: as arestas são causais, e o modelo dá suporte a consultas intervencionais.

Muitas técnicas se sobrepõem a Modelos Gráficos Probabilísticos e Redes Bayesianas, mas a inferência causal depende da semântica causal (o significado de “cortar” arestas sob intervenção), e não apenas da fatorização.

Terminologia de grafos (útil para raciocínio causal)

Para nós (X, Y, Z):

  • Pais de (Y): variáveis com setas entrando em (Y)
  • Filhos de (X): variáveis para as quais (X) aponta
  • Ancestrais/descendentes: pais/filhos transitivos
  • Caminho: uma sequência de arestas independentemente da direção
  • Caminho direcionado: todas as setas se alinham (por exemplo, (X \to M \to Y))
  • Colisor (collider): um nó onde setas colidem: (X \to C \leftarrow Y)

Esses conceitos importam porque a identificação causal frequentemente depende de quais caminhos carregam associação espúria (por exemplo, caminhos de confundimento) versus influência causal.

Independência condicional e d-separação

Uma das características mais poderosas dos DAGs é que eles codificam independências condicionais via d-separação (d-separation).

Informalmente:

  • Cadeias: (X \to M \to Y). Condicionar em (M) bloqueia a associação entre (X) e (Y).
  • Garfo (confundidores): (X \leftarrow Z \to Y). Condicionar em (Z) bloqueia a associação entre (X) e (Y).
  • Colisores: (X \to C \leftarrow Y). Condicionar em (C) (ou em seus descendentes) abre a associação entre (X) e (Y), mesmo que eles sejam independentes fora disso.

Um exemplo clássico de “viés de colisor (collider bias)”:

  • (X) = talento, (Y) = nepotismo, (C) = ser contratado
    Se a contratação acontece quando talento ou nepotismo é alto, então condicionar em ser contratado pode induzir uma correlação negativa entre talento e nepotismo entre funcionários — apesar de não haver relação causal entre eles.

Esta é uma das razões pelas quais grafos causais são úteis em aprendizado de máquina (machine learning): eles alertam quando “controlar por mais variáveis” pode piorar as estimativas.

Modelos Causais Estruturais (SCMs)

Um modelo causal estrutural torna um DAG operacional ao atribuir uma equação estrutural (structural equation) a cada variável.

Definição (alto nível)

Um SCM consiste em:

  • Variáveis endógenas (V = {V_1, \dots, V_n}): variáveis modeladas (observadas ou latentes)
  • Variáveis exógenas de ruído (U = {U_1, \dots, U_n}): fatores de fundo não explicitamente modelados
  • Equações estruturais: [ V_i = f_i(\text{Pa}(V_i), U_i) ] onde (\text{Pa}(V_i)) são os pais de (V_i) no grafo.

O DAG de um SCM é obtido desenhando arestas de cada pai em (\text{Pa}(V_i)) para (V_i). A aciclicidade garante que as equações definem um processo gerativo bem posto (você pode amostrar as variáveis em ordem topológica).

O que SCMs oferecem que “modelos de correlação” não oferecem

Um SCM define:

  1. A distribuição observacional (observational distribution) (P(V)): o que você vê em dados passivos
  2. A distribuição intervencional (interventional distribution) (P(V \mid do(X=x))): o que acontece se você forçar (X) a assumir o valor (x)
  3. Potencialmente, contrafactuais: “para este indivíduo com histórico observado, o que teria acontecido sob uma ação diferente?”

SCMs são, portanto, uma base para raciocínio causal em contextos como interpretação de testes A/B, avaliação de políticas e robustez a mudanças de distribuição.

Relação com a visão de resultados potenciais

No arcabouço de resultados potenciais (potential outcomes), escreve-se (Y(0)) e (Y(1)) como os desfechos sob controle/tratamento. SCMs podem ser vistos como uma linguagem mais geral em que contrafactuais e resultados potenciais são derivados de equações estruturais mais intervenções.

Muitos métodos aplicados podem ser expressos em qualquer um dos arcabouços; DAGs/SCMs são particularmente úteis para expressar suposições e diagnosticar caminhos de viés.

Raciocinando Sobre Intervenções

Condicionar não é intervir

Uma lição central:

  • Condicionar: (P(Y \mid X=x)) significa “entre unidades em que (X=x), qual é a distribuição de (Y)?”
  • Intervir: (P(Y \mid do(X=x))) significa “se nós definíssemos (X) como (x) para todos, qual seria (Y)?”

Elas são iguais apenas sob condições fortes (por exemplo, ausência de confundimento de (X \to Y)).

Exemplo: confundimento faz com que elas difiram

Seja:

  • (X) = tomar um medicamento
  • (Y) = recuperação
  • (Z) = gravidade da doença

A gravidade afeta tanto a escolha do tratamento quanto a recuperação:

  • (Z \to X)
  • (Z \to Y)
  • (X \to Y)

Então (P(Y \mid X=1)) pode parecer pior do que (P(Y \mid X=0)) se pacientes mais graves têm maior probabilidade de tomar o medicamento — mesmo que o medicamento ajude. A pergunta causal é (P(Y \mid do(X=1))), não (P(Y \mid X=1)).

Esta é a motivação central por trás de Confundimento e Ajuste.

O operador do e “cirurgia no grafo”

Em um SCM, uma intervenção (do(X=x)) é modelada substituindo a equação estrutural de (X) por uma atribuição constante: [ X := x ] Graficamente, isso corresponde a cortar as arestas de entrada em (X) (porque (X) deixa de ser determinado por suas causas usuais).

Esse ponto de vista de “cirurgia no grafo (graph surgery)” produz a fórmula de fatorização truncada (truncated factorization) para intervenções em DAGs:

Se a distribuição observacional se fatoriza como [ P(v) = \prod_i P(v_i \mid pa_i), ] então sob (do(X=x)), [ P(v \mid do(x)) = \mathbf{1}[X=x]\prod_{i \ne X} P(v_i \mid pa_i). ]

Intuição: você remove a condicional de (X) (já que ela é definida externamente), mas mantém os demais mecanismos inalterados.

Identificação vs estimação

Grafos causais ajudam a separar duas perguntas:

  • Identificação (identification): O efeito causal pode ser expresso como um funcional da distribuição dos dados observados, dadas as suposições do grafo?
  • Estimação (estimation): Dados finitos, como estimamos esse funcional com precisão (com limites de incerteza)?

Grafos tratam principalmente de identificação. A estimação então usa ferramentas estatísticas/de aprendizado de máquina (regressão, modelagem de propensão, estimadores duplamente robustos, etc.).

Critérios de ajuste (brevemente)

Um estimando (estimand) causal comum é o efeito causal médio (average causal effect): [ \mathbb{E}[Y \mid do(X=1)] - \mathbb{E}[Y \mid do(X=0)]. ]

Em muitos DAGs, isso é identificável controlando por um conjunto de variáveis (Z) que bloqueia todos os caminhos de porta dos fundos (back-door paths) de (X) para (Y) (caminhos que começam com uma seta entrando em (X)). Este é o critério da porta dos fundos (back-door criterion), coberto em profundidade em Confundimento e Ajuste.

Alguns efeitos são identificáveis mesmo com confundimento não observado usando estruturas especiais (por exemplo, porta da frente (front-door)), instrumentos (veja Variáveis Instrumentais) ou regras mais gerais.

Cálculo do (o que é, por que importa)

O cálculo do (do-calculus) é um conjunto de regras de transformação que permite reescrever consultas intervencionais como (P(Y \mid do(X))) em expressões envolvendo apenas quantidades observacionais como (P(Y \mid X)), (P(Y \mid X, Z)) etc., quando o grafo dá suporte a isso.

Você não precisa memorizar o cálculo do para se beneficiar de grafos causais, mas ele sustenta muitos resultados de identificação e sistemas automatizados de raciocínio causal.

Contrafactuais (opcional, mas importante)

SCMs podem responder a perguntas contrafactuais da forma:

Para um indivíduo que de fato teve (X=x) e (Y=y), qual teria sido (Y) se (X) tivesse sido (x')?

Isso normalmente requer suposições mais fortes do que efeitos causais médios, porque depende de termos de ruído (U) em nível individual. Raciocínio contrafactual é central em áreas como recourse algorítmico (algorithmic recourse) e em algumas noções de justiça causal (causal fairness).

Exemplo Prático: Uma Pequena Simulação de SCM

Considere um sistema simples com confundimento:

  • (Z) (por exemplo, gravidade) causa tanto o tratamento (X) quanto o desfecho (Y).
  • (X) também causa (Y).

Equações estruturais:

  • (Z \sim \mathcal{N}(0,1))
  • (X = \mathbf{1}[Z + \epsilon_x > 0])
  • (Y = 2X + Z + \epsilon_y)

Se você comparar ingenuamente (E[Y|X=1] - E[Y|X=0]), você vai misturar o efeito do tratamento com o fato de que (Z) difere entre tratados e não tratados.

import numpy as np

rng = np.random.default_rng(0)
n = 200_000

Z = rng.normal(size=n)
eps_x = rng.normal(size=n)
X = (Z + eps_x > 0).astype(int)

eps_y = rng.normal(size=n)
Y = 2*X + 1.0*Z + eps_y

# Observational difference (association)
assoc = Y[X == 1].mean() - Y[X == 0].mean()

# Interventional: do(X=1) vs do(X=0) by "surgically setting" X
# Keep Z distribution the same (because intervention on X doesn't change Z).
Y_do1 = 2*1 + 1.0*Z + rng.normal(size=n)
Y_do0 = 2*0 + 1.0*Z + rng.normal(size=n)
causal = Y_do1.mean() - Y_do0.mean()

assoc, causal

Resultado típico:

  • assoc difere de causal
  • causal fica próximo do verdadeiro efeito estrutural (≈ 2)

Isso ilustra o significado de intervenção: você muda (X) enquanto mantém causas a montante (aqui (Z)) intocadas.

Em problemas reais, você não tem o SCM, então usa as suposições do DAG para justificar um conjunto de ajuste (ou uma estratégia de VI/porta da frente) e então estima a quantidade correspondente a partir dos dados.

Aplicações Práticas em IA/ML

1) Depuração de correlações espúrias e viés de conjunto de dados

Grafos causais ajudam a explicar por que um modelo preditivo generaliza mal:

  • O modelo pode depender de uma variável que está a jusante da seleção (um colisor) ou de um proxy correlacionado com o rótulo apenas no ambiente de treinamento.
  • Um DAG pode tornar explícito o caminho de “atalho”.

Isso é especialmente relevante ao migrar de conjuntos de dados offline para implantação no mundo real, onde mecanismos de seleção mudam.

2) Robustez sob mudança de distribuição

Uma visão causal distingue:

  • Características causais (causas do rótulo), que tendem a ser mais estáveis
  • Características anticausais ou espúrias (efeitos do rótulo ou correlatos via confundimento/seleção), que podem falhar quando o ambiente muda

Essa ideia se conecta a generalização entre domínios (domain generalization) e aprendizado de representações causais (causal representation learning): aprender representações alinhadas a mecanismos causais estáveis.

3) Avaliação offline de políticas e tomada de decisão

Em sistemas de recomendação, saúde e operações, você frequentemente tem logs observacionais de uma política antiga e quer avaliar uma nova política. Grafos causais esclarecem:

  • O que foi de fato objeto de intervenção pela política antiga
  • Quais confundidores precisam ser modelados (ou quais instrumentos existem)

Isso se cruza com Aprendizado por Reforço (especialmente aprendizado por reforço offline (offline RL)), embora inferência causal e aprendizado por reforço façam suposições diferentes e tratem modos de falha distintos.

4) Justiça e atributos sensíveis

Grafos causais são usados para definir e analisar noções de justiça, como:

  • se um atributo sensível influencia causalmente uma decisão
  • se uma característica é um proxy não permitido (um descendente do atributo sensível ao longo de certos caminhos)

Algumas abordagens usam raciocínio contrafactual (“a decisão mudaria se intervíssemos no atributo sensível?”), o que novamente depende das suposições do SCM.

5) Descoberta causal como ferramenta de modelagem

Quando o grafo é desconhecido, pode-se tentar aprendê-lo a partir de dados usando independências condicionais, suposições funcionais ou estrutura temporal. Este é o tema de Descoberta Causal. Mesmo assim, especialistas frequentemente combinam a estrutura aprendida com conhecimento de domínio, porque muitos grafos são observationally equivalent (isto é, implicam as mesmas independências condicionais).

Armadilhas e Equívocos Comuns

  • “Controle tudo”: Condicionar em colisores ou mediadores pode introduzir viés. Mais variáveis nem sempre é melhor.
  • Esquecer mecanismos de seleção: Se seu conjunto de dados é selecionado com base em variáveis afetadas tanto pelo tratamento quanto pelo desfecho, o viés de seleção pode ser severo.
  • Assumir que o DAG é aprendível apenas a partir de dados observacionais: Muitas vezes, apenas uma classe de equivalência é identificável sem suposições extras ou intervenções.
  • Ignorar confundidores latentes: Causas comuns não observadas podem invalidar ajustes ingênuos. Técnicas como VIs ou análises de sensibilidade se tornam importantes.
  • Confundir a direção causal: Muitas variáveis em aprendizado de máquina são consequências do rótulo (vazamento pós-desfecho (post-outcome leakage)). Um DAG ajuda a impor a ordenação temporal/causal correta.

Um Fluxo de Trabalho Prático para Usar Grafos Causais

  1. Declare a pergunta causal

    • Exemplo: “Qual é o efeito da característica (X) (uma mudança de política) sobre o desfecho (Y) (retenção)?”
  2. Defina as variáveis com cuidado

    • Inclua confundidores plausíveis, mediadores e variáveis de seleção.
    • Decida o que é medido vs não medido.
  3. Desenhe um DAG capturando suposições

    • Este é um passo científico, não um passo de ajuste aos dados.
  4. Verifique implicações

    • Há independências condicionais implicadas pelo grafo que você pode checar para sanidade?
    • Alguma seta contradiz a ordem temporal ou restrições do domínio?
  5. Determine a estratégia de identificação

  6. Estime com métodos estatísticos/de aprendizado de máquina apropriados

    • Regressão, escores de propensão (propensity scores), estimadores duplamente robustos, aprendizado direcionado, etc.
    • Use quantificação de incerteza; não reporte apenas estimativas pontuais.
  7. Teste o estresse das suposições

    • Análise de sensibilidade para confundimento não medido
    • Grafos alternativos plausíveis e checagens de robustez

Ferramentas e Bibliotecas (dicas práticas)

Alguns ecossistemas comumente usados:

  • DoWhy (Python): expressa suposições como um grafo causal, automatiza fluxos de trabalho de identificação + estimação
  • EconML (Python): estimação de efeito de tratamento com aprendizado de máquina moderno (meta-learners, DR learners, etc.)
  • causal-learn (Python): algoritmos de descoberta causal
  • pgmpy (Python): ferramental de modelos gráficos (útil para trabalhar com estrutura de DAG, embora não seja puramente causal)

O ponto-chave é tratar o grafo como a fonte das suposições causais e usar ferramentas para ajudar com as partes mecânicas (álgebra de identificação, estimação, checagens), não para substituir o raciocínio.

Principais Conclusões

  • Um DAG causal codifica suposições causais e implica independências condicionais via d-separação.
  • Um SCM adiciona equações estruturais e termos de ruído, dando significado formal a intervenções.
  • Intervenções são representadas pelo operador do: (P(Y \mid do(X=x))) em geral difere de (P(Y \mid X=x)).
  • Grafos causais orientam a identificação (o que pode ser aprendido dos dados dadas as suposições) e ajudam a evitar vieses comuns (confundimento, viés de colisor, seleção).
  • Em inteligência artificial (artificial intelligence, AI) e aprendizado de máquina, grafos causais são valiosos para tomada de decisão robusta, entendimento de correlações espúrias, análise de justiça e avaliação principiada de intervenções.