Bayesian Network
Uma rede bayesiana modela variáveis e as suas dependências condicionais como um grafo acíclico dirigido, permitindo que as evidências atualizem as probabilidades das causas.
Uma rede bayesiana, também chamada de rede de crenças, é um modelo gráfico probabilístico que representa um conjunto de variáveis aleatórias e suas dependências condicionais por meio de um grafo acíclico direcionado (DAG). Cada nó é uma variável, como uma doença, um sintoma ou uma leitura de sensor, e cada seta aponta de uma influência direta para a variável afetada por ela. Cada nó armazena uma tabela de probabilidades condicionais que fornece sua distribuição para cada combinação dos valores de seus pais, e essas tabelas, em conjunto, definem a distribuição conjunta completa de todas as variáveis. Dadas evidências sobre algumas variáveis, a rede calcula probabilidades atualizadas para as demais, o que a torna uma ferramenta para diagnóstico, avaliação de riscos e apoio à tomada de decisões sob incerteza. Judea Pearl desenvolveu grande parte da teoria na década de 1980, e seu trabalho sobre raciocínio probabilístico e causal lhe rendeu o Prêmio Turing de 2011.
Estrutura e tabelas de probabilidades condicionais#
O grafo codifica independência condicional: cada variável é independente das variáveis que não são suas descendentes quando seus pais são conhecidos. Isso permite fatorar a distribuição conjunta em pequenas partes locais, P(X1, ..., Xn) = P(X1 | pais(X1)) × ... × P(Xn | pais(Xn)). A clássica rede de alarme e roubo do trabalho de Pearl, usada em todo o livro Inteligência Artificial: Uma Abordagem Moderna, de Russell e Norvig, tem cinco variáveis binárias. Um roubo ou um terremoto pode disparar um alarme residencial, e o alarme leva dois vizinhos, John e Mary, a ligar para o proprietário.
Uma tabela conjunta completa para cinco variáveis binárias precisa de 31 probabilidades independentes. A rede precisa de 10: uma para o roubo e outra para o terremoto, quatro para o alarme dadas cada combinação de seus dois pais e duas para cada vizinho dado o alarme. A economia cresce rapidamente com mais variáveis, pois o tamanho de cada tabela depende apenas do número de pais do nó.
Inferência: atualização de crenças com base em evidências#
A inferência fixa as variáveis observadas e calcula a distribuição a posteriori de uma variável de consulta aplicando o teorema de Bayes ao longo do grafo. Ela funciona em qualquer direção: das causas para os efeitos (previsão), dos efeitos para as causas (diagnóstico) e entre causas de um efeito compartilhado. Esse último padrão, chamado de explicação por eliminação, significa que, ao saber que o alarme tocou, descobrir que houve um terremoto reduz a probabilidade de um roubo. A inferência exata por enumeração ou eliminação de variáveis é tratável em redes pequenas ou em forma de árvore, mas é NP-difícil em geral; por isso, redes grandes usam métodos aproximados, como ponderação por verossimilhança, amostragem de Gibbs ou propagação iterativa de crenças.
Este exemplo responde à consulta do livro P(Roubo | John liga, Mary liga) por enumeração, somando a distribuição conjunta fatorada sobre as variáveis não observadas de terremoto e alarme:
from itertools import product
# Conditional probability tables of the burglary-alarm network
p_burglary, p_earthquake = 0.001, 0.002
p_alarm = {(True, True): 0.95, (True, False): 0.94, (False, True): 0.29, (False, False): 0.001}
p_john = {True: 0.90, False: 0.05} # P(John calls | alarm)
p_mary = {True: 0.70, False: 0.01} # P(Mary calls | alarm)
def bern(p, value):
"""Return the probability of a binary outcome with success probability p."""
return p if value else 1 - p
# Evidence: both neighbors called. Sum the factored joint over the hidden variables.
joint = {True: 0.0, False: 0.0}
for b, e, a in product([True, False], repeat=3):
joint[b] += bern(p_burglary, b) * bern(p_earthquake, e) * bern(p_alarm[b, e], a) * p_john[a] * p_mary[a]
print(f"P(burglary | John and Mary call) = {joint[True] / sum(joint.values()):.3f}")O script imprime 0.284, a mesma resposta apresentada no livro. Duas ligações aumentam a probabilidade de um roubo de 1 em 1,000 para cerca de 28%, e os outros 72% correspondem a explicações sem roubo, como um alarme disparado por um terremoto ou por uma falha, pois roubos são muito raros.
Aprendizado de redes bayesianas a partir de dados#
Uma rede pode ser criada manualmente com base no conhecimento de especialistas, aprendida a partir de dados ou construída das duas formas. O aprendizado de parâmetros preenche as tabelas de probabilidades condicionais com frequências observadas, usando distribuições a priori para suavizar combinações raras e o algoritmo de maximização da expectativa quando faltam alguns valores. O aprendizado de estrutura busca o próprio grafo, seja pontuando grafos candidatos com um critério como o critério de informação bayesiano, seja executando testes de independência condicional, como faz o algoritmo PC. As setas aprendidas mostram dependência estatística, e interpretá-las como causas exige as hipóteses adicionais estudadas na descoberta causal. Bibliotecas Python como pgmpy implementam os dois tipos de aprendizado, além de inferência exata e aproximada.
Aplicações no mundo real#
- Diagnóstico médico: As redes relacionam doenças aos sintomas e resultados de exames que elas causam; assim, as observações de um profissional de saúde atualizam a probabilidade de cada condição, e é possível rastrear cada conclusão pelo grafo, uma forma de IA explicável.
- Diagnóstico de falhas: Sistemas industriais e de TI modelam como as falhas de componentes se propagam para alarmes e leituras. Na inspeção visual, as classes de defeitos identificadas por um detector YOLO26 podem entrar na rede como evidências observadas que atualizam a probabilidade de cada causa raiz a montante, como uma ferramenta desgastada ou uma máquina descalibrada.
- Avaliação de riscos: Ecologistas, seguradoras e engenheiros de segurança combinam dados escassos com o julgamento de especialistas em redes que estimam a probabilidade de eventos raros.
Redes bayesianas vs. modelos relacionados#
- Naive Bayes: Uma rede bayesiana em que um único nó de classe é o único pai de cada característica, supondo que as características sejam independentes dada a classe.
- Campos aleatórios de Markov: Modelos gráficos com arestas não direcionadas, adequados para relações simétricas, como as existentes entre pixels vizinhos em uma imagem.
- Processos de decisão de Markov: Modelos de decisões sequenciais, com ações que mudam o estado e recompensas a maximizar, e a estrutura padrão do aprendizado por reforço. Uma rede bayesiana só incorpora decisões e recompensas quando é ampliada com nós de decisão e utilidade, formando um diagrama de influência.
- Modelos ocultos de Markov: Uma rede bayesiana dinâmica, que repete a mesma estrutura a cada instante, com um estado oculto que emite uma observação por etapa. Os filtros de Kalman têm a mesma estrutura, com estados contínuos e transições e observações lineares gaussianas.










