Bayesian Network
Una rete bayesiana modella le variabili e le loro dipendenze condizionali come un grafo aciclico diretto, consentendo alle evidenze di aggiornare le probabilità delle cause.
Una rete bayesiana, detta anche rete di credenze, è un modello grafico probabilistico che rappresenta un insieme di variabili casuali e le relative dipendenze condizionali mediante un grafo aciclico diretto (DAG). Ogni nodo rappresenta una variabile, come una malattia, un sintomo o una lettura di un sensore, e ogni freccia indica un’influenza diretta sulla variabile che raggiunge. Ogni nodo contiene una tabella di probabilità condizionali che specifica la sua distribuzione per ogni combinazione dei valori dei nodi genitori; nel loro insieme, queste tabelle definiscono la distribuzione congiunta completa di tutte le variabili. Date le evidenze relative ad alcune variabili, la rete calcola le probabilità aggiornate delle altre, offrendo uno strumento per la diagnosi, la valutazione dei rischi e il supporto decisionale in condizioni di incertezza. Judea Pearl sviluppò gran parte della teoria negli anni Ottanta; il suo lavoro sul ragionamento probabilistico e causale gli valse il Turing Award nel 2011.
Struttura e tabelle di probabilità condizionali#
Il grafo codifica l’indipendenza condizionale: ogni variabile è indipendente dalle variabili che non sono sue discendenti, una volta noti i suoi genitori. In questo modo, la distribuzione congiunta si scompone in piccoli elementi locali: P(X1, ..., Xn) = P(X1 | parents(X1)) × ... × P(Xn | parents(Xn)). La classica rete furto-allarme degli studi di Pearl, usata nel manuale Artificial Intelligence: A Modern Approach di Russell e Norvig, ha cinque variabili sì/no. Un furto o un terremoto possono attivare un allarme domestico; l’allarme induce due vicini, John e Mary, a chiamare il proprietario.
Una tabella congiunta completa di cinque variabili binarie richiede 31 probabilità indipendenti. Alla rete ne bastano 10: una per il furto e una per il terremoto, quattro per l’allarme date le combinazioni dei suoi due genitori e due per ciascun vicino, in base all’allarme. Il risparmio cresce rapidamente con l’aumentare delle variabili, perché la dimensione di ogni tabella dipende solo dal numero di genitori del suo nodo.
Inferenza: aggiornare le credenze in base alle evidenze#
L’inferenza fissa le variabili osservate e calcola la distribuzione a posteriori di una variabile interrogata applicando il teorema di Bayes al grafo. Funziona in qualsiasi direzione: dalle cause agli effetti (predizione), dagli effetti alle cause (diagnosi) e tra cause di uno stesso effetto. Quest’ultimo schema, detto spiegazione per esclusione, significa che, una volta appurato che l’allarme è scattato, sapere che si è verificato un terremoto riduce la probabilità di un furto. L’inferenza esatta tramite enumerazione o eliminazione di variabili è trattabile su reti piccole o simili ad alberi, ma in generale è NP-hard; perciò, le reti grandi ricorrono a metodi approssimati come la ponderazione per verosimiglianza, il campionamento di Gibbs o la propagazione iterativa delle credenze.
Questo esempio risponde tramite enumerazione alla query P(Burglary | John calls, Mary calls) del manuale, sommando la distribuzione congiunta fattorizzata rispetto alle variabili non osservate terremoto e allarme:
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}")Lo script stampa 0.284, la stessa risposta del manuale. Le due chiamate aumentano la probabilità di un furto da 1 su 1,000 a circa il 28%; il restante 72% corrisponde a spiegazioni senza furto, come un allarme attivato da un terremoto o da un guasto, perché i furti sono molto rari.
Apprendimento delle reti bayesiane dai dati#
Una rete può essere costruita manualmente sulla base delle conoscenze degli esperti, appresa dai dati oppure realizzata con entrambi i metodi. L’apprendimento dei parametri ricava le tabelle di probabilità condizionali dalle frequenze osservate, usando distribuzioni a priori per regolarizzare le combinazioni rare e l’algoritmo di massimizzazione delle aspettative quando mancano alcuni valori. L’apprendimento della struttura ricerca il grafo stesso, assegnando un punteggio ai grafi candidati con un criterio come il criterio informativo bayesiano oppure eseguendo test di indipendenza condizionale, come fa l’algoritmo PC. Le frecce apprese mostrano una dipendenza statistica; interpretarle come cause richiede le ulteriori ipotesi studiate nell’ambito della scoperta causale. Librerie Python come pgmpy implementano entrambi i tipi di apprendimento, oltre all’inferenza esatta e approssimata.
Applicazioni nel mondo reale#
- Diagnosi medica: le reti collegano le malattie ai sintomi e ai risultati degli esami che provocano, così le osservazioni di un medico aggiornano la probabilità di ogni condizione e ogni conclusione può essere ricondotta ai passaggi del grafo, una forma di IA spiegabile.
- Diagnosi dei guasti: i sistemi industriali e IT modellano il modo in cui i guasti dei componenti si propagano agli allarmi e alle letture. Nell’ispezione visiva, le classi di difetti individuate da un rilevatore YOLO26 possono essere inserite nella rete come evidenze osservate, aggiornando la probabilità di ogni causa radice a monte, come un utensile usurato o una macchina non calibrata.
- Valutazione dei rischi: ecologi, assicuratori e ingegneri della sicurezza combinano dati scarsi e valutazioni di esperti in reti che stimano la probabilità di eventi rari.
Reti bayesiane e modelli correlati#
- Naive Bayes: una rete bayesiana con un solo nodo di classe come genitore di ogni feature, che presuppone che le feature siano indipendenti data la classe.
- Campi casuali di Markov: modelli grafici con archi non orientati, adatti a relazioni simmetriche come quelle tra pixel vicini in un’immagine.
- Processi decisionali di Markov: modelli di decisioni sequenziali con azioni che modificano lo stato e ricompense da massimizzare, nonché il quadro standard dell’apprendimento per rinforzo. Una rete bayesiana include decisioni e ricompense solo quando viene estesa con nodi decisionali e di utilità, formando un diagramma d’influenza.
- Modelli di Markov nascosti: una rete bayesiana dinamica, che ripete la stessa struttura a ogni passo temporale e ha uno stato nascosto che genera un’osservazione per passo. I filtri di Kalman hanno la stessa struttura, con stati continui e transizioni e osservazioni lineari gaussiane.










