Teorema di Bayes e ragionamento bayesiano
Un classificatore di spam, un test medico, la regolarizzazione di una rete neurale, un sistema RAG che pesa la conoscenza recuperata contro quella nei pesi: dietro a tutti questi oggetti, in modo a volte esplicito a volte travestito, c’è la stessa formula scritta da un ministro presbiteriano inglese morto nel 1761. Il teorema di Bayes è una riga di algebra; il ragionamento bayesiano è un modo di pensare. Questo capitolo presenta entrambi.
Perché questo capitolo
Sezione intitolata “Perché questo capitolo”Tre osservazioni motivano il capitolo.
La prima è che ogni volta che un sistema combina credenze precedenti con nuova evidenza per produrre una credenza aggiornata, sta facendo, in modo esplicito o implicito, ciò che la formula di Bayes prescrive. Un medico che riceve l’esito di un test e aggiorna la sua stima della probabilità di malattia. Un classificatore che dato un documento aggiorna la sua stima della classe. Un agente conversazionale che dato un nuovo messaggio aggiorna la sua stima dell’intento dell’utente. Tutti questi sono problemi di inferenza inversa: data l’evidenza, qual è la causa? Bayes dà la risposta canonica.
La seconda osservazione è più tecnica. La regolarizzazione L2 — il che ogni framework di deep learning offre come iperparametro standard — è esattamente equivalente, in senso matematico forte, a fare inferenza bayesiana con un prior gaussiano isotropo sui pesi. La cross-entropy che si minimizza in classificazione è la negative log-likelihood di una variabile categorica. La Laplace smoothing che si applica ai conteggi di un naive Bayes è un prior Dirichlet. Buona parte del machinery del machine learning moderno è ragionamento bayesiano travestito da pratica ingegneristica. Riconoscerlo permette di leggere paper e codice con lenti più chiare.
La terza osservazione è di igiene epistemica. Il prosecutor’s fallacy — confondere P(evidenza|ipotesi) con P(ipotesi|evidenza) — ha mandato persone in galera ingiustamente. Il base rate neglect fa sopravvalutare ogni test diagnostico. La cosiddetta “AI overconfidence” è in larga parte un problema di calibrazione che il framework bayesiano formalizza in modo nativo. Sapere quando si sta usando il prior giusto, quando il prior è dominato dall’evidenza, e quando invece sta dominando lui, è una competenza che si sviluppa solo se la formula di Bayes è entrata nel vocabolario operativo.
L’obiettivo di questo capitolo è installare la formula, le sue letture intuitive e le sue applicazioni canoniche, con il rigore minimo necessario e il massimo di esempi concreti. Niente teoria della misura, niente MCMC in dettaglio, niente reti bayesiane (vivono in slug dedicati). Solo: cosa dice Bayes, come si calcola, perché può ingannare, e dove lo si incontra travestito nei sistemi AI moderni.
Contesto
Sezione intitolata “Contesto”In probabilita-base abbiamo definito la probabilità condizionata P(A|B) = P(A, B) / P(B) come la probabilità di A ristretta al sottoinsieme di mondi in cui B è vero. Bayes è una conseguenza diretta di questa definizione, quasi triviale dal punto di vista del calcolo, ma straordinaria dal punto di vista interpretativo.
Il personaggio centrale è Thomas Bayes (1701-1761, ministro presbiteriano e matematico inglese di Tunbridge Wells), eletto Fellow of the Royal Society nel 1742 per meriti matematici, ma noto in vita più come teologo e autore di un saggio sulla difesa del calcolo infinitesimale newtoniano. Il manoscritto che lo renderà famoso resta inedito. Dopo la sua morte, l’amico Richard Price (1723-1791, filosofo morale e attuario, anche lui Fellow della Royal Society) recupera le carte, le edita e le presenta alla Royal Society. An Essay towards solving a Problem in the Doctrine of Chances compare nelle Philosophical Transactions del 1763, vol. 53, pp. 370-418, postumo. Il problema posto da Bayes è quello dell’inferenza inversa: data una sequenza di successi e insuccessi di un evento bernoulliano con probabilità incognita p, qual è la distribuzione di p? Per giustificare un prior uniforme, Bayes immagina un tavolo da biliardo su cui una palla bianca è lanciata a caso e una palla rossa è già stata posizionata; conta quante bianche cadono a sinistra della rossa. È un dispositivo fisico per ragionare su una probabilità incognita.
Pochi anni dopo, Pierre-Simon Laplace (1749-1827, matematico e astronomo francese, già citato in probabilita-base) sviluppa indipendentemente la stessa idea nel Mémoire sur la probabilité des causes par les événements (1774) e la generalizza a priori non uniformi nel monumentale Théorie analytique des probabilités (Courcier, 1812). È Laplace, non Bayes, il vero artefice della macchina di calcolo bayesiana come oggi la conosciamo: applica massicciamente l’inferenza inversa al rapporto demografico maschi/femmine alle nascite a Parigi, alle masse dei pianeti, alla traiettoria delle comete. Per oltre un secolo la “probabilità inversa” è semplicemente come si fa statistica.
Poi arriva la rivoluzione frequentista. Ronald Fisher (1890-1962, statistico e biologo inglese) e Jerzy Neyman (1894-1981, matematico polacco poi americano) sviluppano negli anni Venti e Trenta gli strumenti che diventeranno standard: massima verosimiglianza, test di significatività, intervalli di confidenza. Il loro programma marginalizza l’approccio bayesiano per due ragioni. La prima, tecnica: il calcolo del posterior in modelli realistici è intrattabile senza calcolatori. La seconda, ideologica: il prior è “soggettivo”, e Fisher in particolare considera la soggettività un peccato statistico. Per buona parte del Novecento la statistica accademica è frequentista; chi fa Bayes lavora ai margini.
Il bayesianesimo non muore. Sopravvive in nicchie pragmatiche dove serve combinare evidenza eterogenea o decidere sotto forte incertezza. Alan Turing a Bletchley Park costruisce le banbur sheets, essenzialmente ratio di log-likelihood, per attaccare Enigma. Nel 1968 la US Navy ritrova il sottomarino USS Scorpion grazie a una bayesian search a priori e posteriori sulle aree dell’Atlantico. Negli anni Ottanta Judea Pearl (1936-, informatico israeliano-americano) formalizza le reti bayesiane in Probabilistic Reasoning in Intelligent Systems (Morgan Kaufmann, 1988) e l’AI simbolica acquisisce un linguaggio per l’incertezza. Negli anni Duemila, MCMC computazionalmente fattibile (BUGS, Stan, PyMC) rende le analisi bayesiane di routine. Nel ML moderno, il workflow di Andrew Gelman et al. in Bayesian Data Analysis (Chapman & Hall, 2013, terza edizione) è lo standard nelle scienze applicate, e MacKay aveva già costruito un ponte con le reti neurali in Information Theory, Inference, and Learning Algorithms (Cambridge, 2003).
La storia narrativa di tutto questo è raccontata bene da Sharon Bertsch McGrayne in The Theory That Would Not Die (Yale University Press, 2011), titolo programmatico: la teoria che non voleva morire.
Decoder rapido dei termini che useremo:
- Ipotesi H: una proposizione su cui vogliamo aggiornare la nostra credenza. “Il paziente ha la malattia D”, “la mail è spam”, “il parametro vale θ”.
- Evidenza E: il dato osservato. “Il test è positivo”, “la mail contiene la parola viagra”, “ho visto N osservazioni”.
- Prior P(H): la credenza in H prima di vedere E.
- Likelihood P(E|H): la probabilità di osservare E se H fosse vera. NON è una distribuzione di probabilità su H, è una funzione di scoring di H.
- Verosimiglianza: traduzione italiana di likelihood. Nel testo useremo entrambi.
- Posterior P(H|E): la credenza in H dopo aver visto E. È il prodotto del lavoro di Bayes.
- Evidenza marginale P(E): la probabilità di vedere E mediando su tutte le ipotesi possibili. Costante di normalizzazione.
flowchart TD
B["Regola di Bayes<br/>P(H|E) = P(E|H) · P(H) / P(E)"]
B --> PR["Prior P(H)"]
B --> LK["Likelihood P(E|H)"]
B --> PO["Posterior P(H|E)"]
B --> EV["Evidenza marginale P(E)"]
B --> A1["Naive Bayes (spam)"]
B --> A2["MAP = MLE + prior"]
B --> A3["Regolarizzazione L2<br/>= prior gaussiano"]
B --> A4["Test medico"]
B --> A5["Calibrazione"]
H["Bayes 1763 (postumo) · Laplace 1812"] -.-> B
Figura 1 — concept graph: “Bayes’ rule” al centro, archi a “Prior P(H)”, “Likelihood P(E|H)”, “Posterior P(H|E)”, “Marginal evidence P(E)”; sotto, applicazioni: “Naive Bayes (spam)”, “MAP = MLE + prior”, “L2 regularization = Gaussian prior”, “Medical test”, “Calibration”; badge storico: Bayes 1763 (postumo), Laplace 1812
L’intuizione
Sezione intitolata “L’intuizione”Prima di scrivere la formula, due immagini diverse di cosa significhi “aggiornare bayesianamente”. Compatibili, complementari, utili in momenti diversi.
Angolo 1: la frazione di mondi compatibili con l’evidenza
Sezione intitolata “Angolo 1: la frazione di mondi compatibili con l’evidenza”Immagina di avere davanti a te una collezione enorme di mondi possibili. In ognuno l’ipotesi H può essere vera o falsa, e ciascuno ha una “frequenza” che riflette la tua credenza prima di vedere qualsiasi cosa: quella frequenza è il prior P(H).
Ora arriva l’evidenza E. Tu non vedi tutti i mondi, vedi solo quelli in cui E è vera. Scartami via tutti i mondi in cui E è falsa. Ti resta una sotto-collezione. La domanda diventa: in che frazione di questa sotto-collezione H è vera?
Quella frazione è il posterior P(H|E). E si calcola così. Nei mondi originali, la frequenza di “H vera ed E vera” è P(H, E) = P(E|H) P(H) — i mondi in cui H è vera (frazione P(H)) tagliati con quelli in cui anche E è vera dato H (frazione P(E|H)). La frequenza di “E vera” tutto compreso è P(E). Il rapporto fra le due è quanto di “E vera” è anche “H vera”:
Questa è la lettura frequenza relativa nei mondi. È utile perché rende vivido che P(H|E) non è una proprietà di H da sola: dipende da quanti mondi con H vera erano compatibili con E, rispetto a tutti i mondi compatibili con E. Se H è raro a priori (P(H) piccolo), serve molto da P(E|H) (likelihood alto) e poco da P(E|¬H) (likelihood basso nelle ipotesi alternative) per portare il posterior in alto.
Angolo 2: bilancia fra prior e evidenza
Sezione intitolata “Angolo 2: bilancia fra prior e evidenza”Seconda immagine. Pensa al posterior come al risultato di una bilancia con due piatti che si fanno equilibrio: a sinistra il prior, a destra la verosimiglianza dell’evidenza.
posterior ∝ likelihood × prior
Il segno ∝ (“proporzionale a”) è lì per dire che la costante di normalizzazione P(E) ti riporta a una distribuzione che somma a 1, ma non cambia la forma. La forma è data dal prodotto pointwise di prior e likelihood.
Cosa succede quando i due piatti si bilanciano:
- Prior molto piccato, likelihood piatta (poca evidenza, forte preferenza precedente): il posterior assomiglia al prior. La nuova osservazione cambia poco.
- Prior piatto (uniforme), likelihood molto piccata (molta evidenza, ignoranza precedente): il posterior assomiglia alla likelihood. È esattamente il regime dell’MLE, di cui parleremo fra poco.
- Prior e likelihood entrambi piccati ma in posti diversi: il posterior è un compromesso, tipicamente bimodale o spostato.
- Più evidenza arriva (più dati IID, likelihood = prodotto delle singole likelihood): il prodotto si concentra rapidamente, il posterior collassa attorno al massimo della likelihood. È perché in modelli ben specificati con tanti dati MLE e MAP convergono.
Questa è la lettura bilancia. È utile per fare domande di sensibilità: quanto cambierà il posterior se cambio il prior? Se la likelihood è molto piccata e il prior è molto largo, poco. Se i dati sono pochi e il prior è informativo, molto. Si torna su questo nella sezione “Dove si rompe”, perché la dipendenza dal prior è l’obiezione storica al bayesianesimo.
![vector graph: three subplots side by side, x-axis = parameter theta in 0,1; (a) prior Beta(1,1) flat, likelihood from “7 successes out of 10” peaked at 0.7, posterior Beta(8,4) slightly peaked at 0.7; (b) prior Beta(20,20) peaked at 0.5, same likelihood, posterior Beta(27,23) compromise around 0.55; (c) prior Beta(20,20), likelihood from “70 successes out of 100” sharp at 0.7, posterior pulled close to 0.7. Labels: “prior”, “likelihood”, “posterior” in English]
La meccanica
Sezione intitolata “La meccanica”La formula
Sezione intitolata “La formula”Dato un’ipotesi H ed un’evidenza E con P(E) > 0:
In forma proporzionale, lavorando senza calcolare P(E):
P(H|E) ∝ P(E|H) · P(H)
Quando lo spazio delle ipotesi è discreto e finito, H ∈ {H_1, …, H_K}, l’evidenza marginale si calcola per legge della probabilità totale:
Questa è la somma di “prior × likelihood” su tutte le ipotesi, ed è la stessa quantità che compare al denominatore di Bayes. In forma operativa:
- Per ogni ipotesi H_k, calcola u_k = P(E|H_k) · P(H_k).
- Calcola Z = Σ_k u_k.
- Posterior: P(H_k | E) = u_k / Z.
Per spazi continui, le somme diventano integrali, ma la procedura è identica.
Derivazione
Sezione intitolata “Derivazione”In probabilita-base abbiamo definito:
Le due espressioni di destra sono modi equivalenti di scrivere la stessa probabilità congiunta: condizionando su E, oppure condizionando su H. Uguagliando e dividendo per P(E) > 0:
Questa è la prova. Una riga. Il TEOREMA di Bayes è una banale conseguenza della definizione di probabilità condizionata. La portata epistemica è enorme; la difficoltà tecnica è zero.
Likelihood non è probabilità su H
Sezione intitolata “Likelihood non è probabilità su H”Il fraintendimento più frequente. La quantità P(E|H), letta come funzione di H tenendo E fisso, si chiama likelihood o verosimiglianza:
Non è una distribuzione di probabilità su H. La sua somma (o integrale) su H non è 1 in generale.
Esempio concreto. Lancio una moneta con probabilità di testa p ∈ [0, 1] e ottengo 7 testa su 10. La likelihood di p è:
È una funzione di p definita su [0, 1], ha un massimo in p = 0.7 (per costruzione, come vedremo), ma il suo integrale su [0, 1] non è 1. Per ottenere una distribuzione su p — un posterior — bisogna moltiplicare per un prior e normalizzare. Esattamente quello che fa Bayes.
Mantenere distinta la likelihood (funzione di H) dalla probabilità condizionata (funzione di E con H fisso) salva da molti errori. Sono la stessa formula vista in due modi.
MLE e MAP
Sezione intitolata “MLE e MAP”Due strategie per scegliere un singolo θ a partire dai dati D = {x_1, …, x_N}.
Maximum Likelihood Estimation (MLE):
Sotto ipotesi IID (osservazioni indipendenti e identicamente distribuite):
E in log-space (dove la massimizzazione è equivalente ma numericamente più stabile):
Massimizzare la log-likelihood equivale a minimizzare la negative log-likelihood (NLL). In ML moderno, la cross-entropy in classificazione è una NLL categorica; l’MSE in regressione è una NLL gaussiana sotto ipotesi di rumore omoschedastico. La connessione è dettagliata in entropia-cross-entropy.
Maximum A Posteriori (MAP):
(la P(D) al denominatore non dipende da θ, si può ignorare). In log-space:
La differenza con MLE è il termine log P(θ), il prior. Se P(θ) è uniforme sul dominio rilevante, log P(θ) è costante, e MAP = MLE.
EQUIVALENZA: regolarizzazione L2 ↔ prior gaussiano
Sezione intitolata “EQUIVALENZA: regolarizzazione L2 ↔ prior gaussiano”Argomentabile in tre righe.
Sia P(θ) = N(0, σ² I) un prior gaussiano isotropo centrato in zero sul vettore dei parametri:
log P(θ) = − ‖θ‖² / (2σ²) + costante
Sostituendo nella formula MAP:
θ_MAP = argmax_θ [Σ_i log P(x_i | θ) − ‖θ‖² / (2σ²)] = argmin_θ [NLL(D | θ) + λ ‖θ‖²]
con λ = 1 / (2σ²). Questa è esattamente la NLL regolarizzata L2, ossia il standard di ogni framework di deep learning. Dimostrato. La regolarizzazione L2 è MAP con prior gaussiano isotropo. Non è un’analogia, è un’identità a meno di costanti additive che non dipendono da θ.
Analogamente, regolarizzazione L1 ↔ prior Laplaciano (densità ∝ exp(−|θ| / b)). Ogni regolarizzatore additivo nella loss corrisponde, modulo un riscaling, a un log-prior. L’estensione a slug regolarizzazione (in preparazione) entra nei dettagli operativi.
Conjugate priors (cenno)
Sezione intitolata “Conjugate priors (cenno)”Una famiglia di priori si dice coniugata rispetto a una famiglia di likelihood se il posterior appartiene alla stessa famiglia del prior. Esempio canonico: Beta-Binomial.
- Prior: p ~ Beta(α, β). Densità ∝ p^(α-1) (1-p)^(β-1).
- Likelihood: k successi su n con probabilità p, ~ Binomial(n, p). ∝ p^k (1-p)^(n-k).
- Posterior: ∝ p^(α + k - 1) (1-p)^(β + n - k - 1) = Beta(α + k, β + n − k).
Bellissima interpretazione: i parametri α, β del prior sono pseudo-osservazioni. Il posterior si ottiene aggiungendo i conteggi reali ai pseudo-conteggi precedenti. Se α = β = 1 (prior uniforme = Beta(1, 1)), il posterior è Beta(1 + k, 1 + n − k), e la media a posteriori è (k + 1) / (n + 2) — la regola di successione di Laplace.
Altri pair coniugati di uso frequente: Dirichlet-Multinomial (versione vettoriale), Gauss-Gauss (con varianza nota, posterior è una media pesata fra prior e dato pesata per le rispettive precisioni). Non andremo oltre qui; la trattazione completa vive in qualunque manuale bayesiano standard (Bishop cap. 2, Gelman cap. 2-3).
Naive Bayes classifier
Sezione intitolata “Naive Bayes classifier”Setup. Documenti d con feature x = (x_1, …, x_d), tipicamente parole o conteggi. Vogliamo P(c | x), la classe data il documento.
Bayes:
P(c | x) ∝ P(x | c) · P(c)
Problema. P(x | c) ha un numero di valori esponenziale in d (per feature binarie, 2^d). Impossibile da stimare senza dati massivi.
Assunzione naive: indipendenza condizionata delle feature data la classe.
Quindi:
P(c | x) ∝ P(c) · ∏_i P(x_i | c)
In log:
Pseudocodice training (con Laplace smoothing per evitare zeri):
for c in classes: P(c) = count(class == c) / N for i in features: for v in feature_values: P(x_i = v | c) = (count(x_i = v, class == c) + 1) / (count(class == c) + V_i) # V_i = numero di valori possibili della feature iPseudocodice predict:
def predict(x): best_score = -infinity best_class = None for c in classes: score = log P(c) + sum(log P(x_i = x[i] | c) for i in features) if score > best_score: best_score = score best_class = c return best_classLavorare in log-space è essenziale: il prodotto di tante likelihood piccole sottostà a underflow numerico nella prima centinaia di feature. Sommare log invece che moltiplicare risolve.
L’assunzione di indipendenza condizionata è quasi sempre falsa: in un documento le parole sono fortemente correlate (sequenze, semantica condivisa, n-gram). Eppure naive Bayes funziona benissimo in pratica per spam e classificazione testuale. Domingos e Pazzani (1997, On the Optimality of the Simple Bayesian Classifier under Zero-One Loss, Machine Learning 29:103-130) hanno analizzato il fenomeno: per la decisione conta l’ordinamento delle classi, non la calibrazione assoluta. Anche con probabilità mal calibrate, la classe più probabile può rimanere quella corretta. Questo lo rende un benchmark robusto e un baseline difficile da superare con poco lavoro.
Tre esempi eterogenei, da tre angoli diversi: numerico classico, codice, scenario reale.
Esempio 1: il test medico classico
Sezione intitolata “Esempio 1: il test medico classico”Setup. Una malattia D ha prevalenza P(D) = 0.001 (uno su mille). Un test diagnostico ha:
- Sensibilità: P(+ | D) = 0.99 (probabilità di test positivo dato che la malattia c’è).
- Specificità: P(− | ¬D) = 0.99 (probabilità di test negativo dato che la malattia non c’è).
- Quindi P(+ | ¬D) = 0.01 (falso positivo).
Domanda. Hai test positivo. Qual è P(D | +)?
Risposta intuitiva diffusa: “Il test è 99% accurato, quindi 99%.”
Risposta corretta. Applichiamo Bayes:
Denominatore (legge della probabilità totale):
P(+) = P(+ | D) · P(D) + P(+ | ¬D) · P(¬D) = 0.99 · 0.001 + 0.01 · 0.999 = 0.00099 + 0.00999 = 0.01098
Posterior:
Circa 9%. Anche con un test 99% accurato, se la malattia è rara, la maggior parte dei positivi sono falsi positivi, perché la base di non-malati è enormemente più grande di quella di malati.
Lo stesso calcolo letto in modo bilancia. Il prior 0.001 contro 0.999 è schiacciato verso ¬D. La likelihood 0.99 contro 0.01 favorisce D di un fattore 99. Il rapporto a posteriori è 0.001 · 99 contro 0.999 · 1, ossia 0.099 contro 0.999. Normalizzando: 0.099 / (0.099 + 0.999) ≈ 0.090. Stessa risposta.
L’errore intuitivo si chiama base rate neglect: la mente trascura il prior P(D) e sovrappesa la likelihood. È un pattern documentato da Kahneman e Tversky negli anni Settanta, vivissimo ancora oggi nelle decisioni mediche, giudiziarie, di sicurezza.
Esempio 2: naive Bayes spam, calcolo a mano e in numpy
Sezione intitolata “Esempio 2: naive Bayes spam, calcolo a mano e in numpy”Cinque messaggi di training, due classi: ham (legittimo) e spam.
| # | testo | classe |
|---|---|---|
| 1 | ”ciao oggi pranzo” | ham |
| 2 | ”oggi riunione progetto” | ham |
| 3 | ”vinci milioni clicca” | spam |
| 4 | ”clicca ora offerta” | spam |
| 5 | ”soldi facili clicca” | spam |
Conteggi:
- N_ham = 2, N_spam = 3, N = 5.
- P(ham) = 2/5 = 0.4, P(spam) = 3/5 = 0.6.
Conteggi parole per classe (con la rappresentazione “presenza”, binaria):
- “clicca” in ham: 0; in spam: 3.
- “oggi” in ham: 2; in spam: 0.
- (Altre parole analoghe.)
Per stimare P(parola | classe) usiamo Laplace smoothing add-1:
dove +2 al denominatore copre la “presenza/assenza” (V_i = 2 per feature binarie).
P(“clicca” | ham) = (0 + 1) / (2 + 2) = 0.25 P(“clicca” | spam) = (3 + 1) / (3 + 2) = 0.80 P(“oggi” | ham) = (2 + 1) / (2 + 2) = 0.75 P(“oggi” | spam) = (0 + 1) / (3 + 2) = 0.20
Predict per il messaggio nuovo: “clicca oggi”. Solo “clicca” e “oggi” come feature attive; ignoro le altre.
log score(ham) = log 0.4 + log 0.25 + log 0.75 ≈ −0.916 − 1.386 − 0.288 = −2.590 log score(spam) = log 0.6 + log 0.80 + log 0.20 ≈ −0.511 − 0.223 − 1.609 = −2.343
Spam vince. Il messaggio è classificato spam, anche se contiene “oggi” (parola tipica di ham), perché “clicca” è abbastanza dominante in spam da spostare la bilancia.
Stesso calcolo in numpy minimal:
import numpy as np
# Vocabolario binario su 12 parole, ordinate come nel testo.vocab = ["ciao","oggi","pranzo","riunione","progetto", "vinci","milioni","clicca","ora","offerta","soldi","facili"]V = len(vocab)
# Documenti come vettori 0/1.def vec(text): words = text.split() return np.array([1 if w in words else 0 for w in vocab])
X = np.array([ vec("ciao oggi pranzo"), vec("oggi riunione progetto"), vec("vinci milioni clicca"), vec("clicca ora offerta"), vec("soldi facili clicca"),])y = np.array([0, 0, 1, 1, 1]) # 0 = ham, 1 = spam
# Prior con Laplace smoothingN = len(y)log_prior = np.log([(np.sum(y == c) + 1) / (N + 2) for c in [0, 1]])
# Likelihood per feature, per classe, per valore (presenza)# count_pres[c, i] = numero di documenti di classe c che hanno feature i = 1count_pres = np.array([X[y == c].sum(axis=0) for c in [0, 1]])N_c = np.array([(y == c).sum() for c in [0, 1]])log_p_pres = np.log((count_pres + 1) / (N_c[:, None] + 2))log_p_abs = np.log(((N_c[:, None] - count_pres) + 1) / (N_c[:, None] + 2))
def predict(text): x = vec(text) # Per ciascuna classe somma log_p_pres dove x=1 e log_p_abs dove x=0, più log_prior score = log_prior + (x * log_p_pres + (1 - x) * log_p_abs).sum(axis=1) return ("ham", "spam")[int(np.argmax(score))], score
print(predict("clicca oggi")) # → spamprint(predict("ciao pranzo oggi")) # → hamL’implementazione è breve, l’idea è completa. Naive Bayes su testo è ancora oggi un baseline rispettabile in molti contesti dove il segnale è prevalentemente lessicale. Il filtro di Paul Graham descritto in A Plan for Spam (2002) è una variante euristica di questa stessa procedura, applicata su milioni di email reali.
Esempio 3: regolarizzazione L2 in una regressione lineare come prior gaussiano
Sezione intitolata “Esempio 3: regolarizzazione L2 in una regressione lineare come prior gaussiano”Setup. Sto facendo regressione lineare. Modello: y = w · x + ε, con ε ~ N(0, σ²). Dato un dataset D = {(x_i, y_i)}, voglio stimare w.
−log P(D | w) = (1 / 2σ²) · Σ_i (y_i − w · x_i)² + costante
Minimizzare la NLL = minimizzare la somma dei quadrati. È la regressione lineare ordinaria (ordinary least squares, OLS).
Approccio MAP con prior gaussiano isotropo P(w) = N(0, τ² I).
−log P(w | D) = −log P(D | w) − log P(w) = (1 / 2σ²) · Σ_i (y_i − w · x_i)² + (1 / 2τ²) · ‖w‖² + cost
Definendo λ = σ² / τ², minimizzare il MAP equivale a minimizzare:
Σ_i (y_i − w · x_i)² + λ · ‖w‖²
Questa è esattamente la ridge regression (Hoerl-Kennard 1970, Ridge Regression: Biased Estimation for Nonorthogonal Problems, Technometrics 12:55-67). Non per analogia, per identità formale. La ridge regression che si insegna nei corsi di ML come “regolarizzazione L2 della regressione lineare” è MAP con prior gaussiano sui pesi.
Cosa cambia operativamente. Con poco data e molte feature, il problema OLS è mal condizionato (matrice X^T X quasi singolare) e i pesi possono esplodere. Aggiungere il termine di regolarizzazione equivale a dire “credo a priori che i pesi siano piccoli, attorno a zero, con una certa varianza τ²”. Il prior tira i pesi verso zero, stabilizzando la stima. Più piccolo è τ² (più forte è il prior), più aggressiva è la regolarizzazione (λ grande).
Lo stesso ragionamento si applica al di una rete neurale moderna: è un prior gaussiano sui pesi della rete, e il fatto che migliori la generalizzazione è coerente con la lettura bayesiana che dice “i pesi piccoli sono a priori più probabili di quelli grandi, perché le funzioni che parametrizzano sono più semplici e generalizzano meglio”.
Applicazioni pratiche
Sezione intitolata “Applicazioni pratiche”Il pattern bayesiano riemerge in molti punti del lavoro con sistemi AI. Alcuni dichiarati, altri travestiti.
Naive Bayes per testo. Ancora oggi un baseline forte per classificazione di documenti, sentiment analysis, spam, language identification. Vince per velocità di training (lineare nel dataset, niente backprop), interpretabilità (puoi leggere i pesi log P(parola | classe)) e robustezza con dati piccoli. Implementazioni standard: , BernoulliNB, ComplementNB.
Spam filtering bayesiano. Eredità diretta del saggio di Paul Graham 2002. Implementazioni: SpamAssassin, bogofilter, dspam. Anche i moderni filtri di Gmail e Outlook contengono moduli statistici discendenti da quella linea, pur affiancati a deep learning.
Regolarizzazione come prior. L2 → prior gaussiano, L1 → prior Laplaciano, dropout → analogia con MC dropout di Gal & Ghahramani 2016. Ogni volta che aggiungi un termine alla loss che dipende solo dai pesi e non dai dati, stai facendo MAP con un prior implicito. Vedi regolarizzazione (in preparazione).
Calibrazione di classificatori. Un classificatore “calibrato” è uno la cui probabilità predetta P(c | x) corrisponde alla frequenza empirica della classe quando si raggruppano predizioni con probabilità simile. La calibrazione bayesiana naturale (posterior predictive che integra sull’incertezza dei parametri) è costosa; in pratica si usano post-processi come temperature scaling (Guo et al. 2017) o Platt scaling. Sono trucchi che imitano il risultato di un trattamento bayesiano completo. Vedi calibration-abstention (in preparazione).
RAG come prior + likelihood. ANALOGIA operativa, non equivalenza formale. In Retrieval-Augmented Generation, il modello combina conoscenza pre-installata nei pesi (analoga a un prior P(answer)) con conoscenza recuperata dalla knowledge base (analoga alla likelihood P(documenti recuperati | answer)). Non c’è un calcolo di Bayes esplicito sotto il cofano di un sistema RAG standard. Tuttavia il pattern mentale è utile: cambiare il prior (ri-fine-tunare i pesi) o l’evidenza (aggiornare la KB) modifica l’output in modi che ricordano l’aggiornamento bayesiano. Marcalo come analogia ogni volta che lo usi a lezione, evitando lo scivolamento in equivalenza. Vedi rag-base (in preparazione).
ICL come Bayesian inference. ANALOGIA, marcata. Xie, Raghunathan, Liang, Ma in An Explanation of In-context Learning as Implicit Bayesian Inference (arXiv:2111.02080, 2021) propongono un modello esplicativo in cui il pretraining su sequenze generate da una mistura di “concepts” induce un comportamento ICL che, sotto certe assunzioni (mixture of HMMs come distribuzione dei dati pretraining), corrisponde a marginalizzare il concept latente dato i pochi esempi del prompt. Il prompt fornisce evidenza E, il pretraining ha installato un prior P(concept), il modello produce qualcosa di simile a Σ_concept P(target | concept) · P(concept | E). NON è una dimostrazione di equivalenza generale; è una cornice teorica per certi setup specifici. Usandola come “fatto” si superinterpreta. Vedi in-context-learning (in preparazione).
Bayesian deep learning. Famiglia di tecniche che cerca di riportare letteralmente l’inferenza bayesiana sui pesi di una rete neurale: variational inference, MC dropout, deep ensembles letti come approssimazione bayesiana, Laplace approximation attorno al MAP. Problema fondamentale: il posterior sui pesi di una rete da miliardi di parametri è intrattabile, e ogni approssimazione introduce bias. È ancora un’area di ricerca attiva, non standard di produzione. Solo nominata.
Bayesian search. Quando devi cercare un oggetto in uno spazio (es. un sottomarino in fondo all’oceano, un bug in un repo), e hai un prior sulla sua posizione e una likelihood di “rilevarlo se cerchi qui”, Bayes ti dice come aggiornare il prior dopo ogni ricerca fallita per concentrare le ricerche successive nelle aree dove l’oggetto ha la massima probabilità a posteriori. È letteralmente come è stato ritrovato il sottomarino USS Scorpion nel 1968. Pattern utile in qualsiasi loop di esplorazione/sfruttamento.
Dove si rompe
Sezione intitolata “Dove si rompe”Il framework bayesiano è bello e in molti casi corretto, ma non è gratis. Sei limiti concreti.
1. Il prior può dominare
Sezione intitolata “1. Il prior può dominare”Se l’evidenza è scarsa, il posterior somiglia al prior. Due bayesiani con prior diversi arrivano a posterior diversi, e per stabilire chi ha “ragione” servono dati. È l’obiezione storica al bayesianesimo da parte dei frequentisti: il prior è “soggettivo” e contamina la conclusione.
In pratica si mitiga con prior deboli o non informativi (Jeffreys priors, prior uniformi su intervalli ampi, prior gaussiani con varianza grande). Ma “non informativo” è un concetto sfuggente: un prior uniforme su θ implica un prior non uniforme su θ², e la scelta della parametrizzazione conta. Gelman et al. discutono in dettaglio.
Esempio quotidiano: classificatore con poche label di training. Lo scegli per fare MAP con regolarizzazione L2 forte (= prior stretto attorno a zero), spera che il prior “azzeri pesi inutili” senza distorcere troppo il segnale reale. Quanto è forte è una questione empirica.
2. Indipendenza condizionata in naive Bayes è quasi sempre falsa
Sezione intitolata “2. Indipendenza condizionata in naive Bayes è quasi sempre falsa”Le parole in un documento sono fortemente correlate. Eppure naive Bayes funziona. Perché?
La risposta tecnica: per la decisione , conta l’ordinamento delle classi, non i valori assoluti delle probabilità. Domingos & Pazzani 1997 mostrano formalmente che, sotto certe condizioni, l’ordinamento può essere robusto anche quando le probabilità sono mal calibrate. La risposta empirica: provalo prima di scartarlo, è un baseline buono.
Conseguenza pratica: le probabilità prodotte da naive Bayes non sono ben calibrate. Se naive Bayes ti dice P(spam | email) = 0.99 non vuol dire che 99 su 100 di email così classificate siano davvero spam. Per la decisione binaria spam/ham (soglia 0.5) di solito basta. Per decisioni che richiedono probabilità calibrate (es. ranking, costo asimmetrico), serve calibrazione post-hoc.
3. Posterior intrattabile in alta dimensione
Sezione intitolata “3. Posterior intrattabile in alta dimensione”Per modelli realistici (reti neurali con miliardi di parametri, modelli gerarchici complessi), il calcolo esatto del posterior è infattibile: l’evidenza marginale P(D) = ∫ P(D | θ) P(θ) dθ è un integrale ad altissima dimensione, senza forma chiusa.
Strumenti per ovviare:
- MCMC (Markov Chain Monte Carlo): costruisce una catena di Markov la cui distribuzione stazionaria è il posterior, e campiona da lì. Algoritmi: Metropolis-Hastings (1953/1970), Gibbs sampler, Hamiltonian Monte Carlo, NUTS (Hoffman & Gelman 2014). Implementazioni: Stan, PyMC, JAGS. Costo computazionale alto, garanzie asintotiche di correttezza.
- Variational Inference (VI): approssima il posterior con una distribuzione tractable q(θ; φ) e minimizza KL(q || posterior) ottimizzando φ. Più veloce di MCMC, ma biased (la VI può sottostimare la varianza del posterior in modo sistematico).
- MC dropout (Gal & Ghahramani 2016): un’interpretazione di dropout a inference time come approssimazione bayesiana cheap delle reti.
Tutto questo è materia di slug dedicati (bayesian-networks e altri, in preparazione). Qui basta sapere che esistono e che sono il prezzo da pagare quando si vuole essere bayesiani per davvero su modelli grandi.
4. Underflow numerico
Sezione intitolata “4. Underflow numerico”I prodotti di likelihood molto piccole vanno a zero rapidamente. Già con cento feature in naive Bayes su testo, il prodotto delle P(parola | classe) può diventare 10^−200 e collassare a zero in floating-point standard.
Cura: lavorare in log-space sempre. Sommare log invece che moltiplicare. Per normalizzare un vettore di log-probabilità senza overflow, usare il trick log-sum-exp:
log Σ_k exp(a_k) = m + log Σ_k exp(a_k − m), con m = max_k a_k
Sottrai il massimo prima di esponenziare, poi riaggiungi al log dopo. È in ogni libreria scientifica (scipy.special.logsumexp).
5. Prosecutor’s fallacy in casi reali
Sezione intitolata “5. Prosecutor’s fallacy in casi reali”Confondere P(evidenza | innocente) con P(innocente | evidenza). Caso classico: Sally Clark (UK, 1999), condannata per la morte dei suoi due figli sulla base dell’argomento “la probabilità di due morti in culla in famiglia è 1 su 73 milioni”. Il calcolo era sbagliato in più modi (assumeva indipendenza fra i due eventi, che è falsa per ragioni genetiche), ma anche se fosse stato corretto, P(due morti in culla | innocente) ≠ P(innocente | due morti in culla). Servirebbero il prior P(omicidio doppio in famiglia) e il calcolo bayesiano completo. La sentenza è stata annullata nel 2003 dopo lavoro statistico della Royal Statistical Society.
Pattern simile: “la probabilità di questo profilo DNA in un innocente è 1 su un milione, quindi la probabilità che l’imputato sia innocente è 1 su un milione”. Sbagliato. Il dato è P(profilo | innocente). Per ottenere P(innocente | profilo) serve il prior P(innocente) e l’evidenza marginale P(profilo) sull’intera popolazione di interesse.
Pattern in AI: “il classificatore dice che è una rana con 99% di probabilità, quindi è una rana al 99%”. Solo se il classificatore è ben calibrato e il dataset di test ha la stessa distribuzione del dataset di training, il che spesso non è vero in produzione (covariate shift). La probabilità che un classificatore restituisce non è automaticamente un posterior calibrato.
6. LLM “non sono Bayes”
Sezione intitolata “6. LLM “non sono Bayes””Le analogie ICL = Bayesian inference e RAG = prior + likelihood sono utili come modelli mentali, ma confonderle con equivalenze porta ad aspettative errate. Un LLM non sta facendo aggiornamento bayesiano esplicito su nessuno spazio di ipotesi durante il forward pass. Esibisce comportamenti che, in setup specifici, possono essere descritti da un modello bayesiano, e questo è teoricamente interessante. Ma non implica che l’LLM sia ben calibrato, che le sue probabilità siano posterior, che il suo prior sia identificabile, che si possa “aggiornare il suo prior” in modo principled, ecc. Tutte cose che il framework bayesiano formale offre, e che un LLM in produzione non offre.
Punto pratico: se il tuo sistema dipende da probabilità calibrate (es. soglie automatiche, decisioni costo-asimmetriche), non fidarti dei logits di un LLM senza calibrazione esplicita, tipicamente con una eval a parte e temperature scaling o classificatore separato.
Collegamenti
Sezione intitolata “Collegamenti”- probabilita-base: definizione di probabilità condizionata, indipendenza, valore atteso, varianza. Bayes è una conseguenza algebrica della condizionata.
- entropia-cross-entropy: cross-entropy = NLL = nucleo di MLE; KL divergence è la “distanza” naturale fra distribuzioni e fra posterior e approssimazione variazionale.
- regolarizzazione (in preparazione): L2 ↔ prior gaussiano (equivalenza dimostrata in questo capitolo); L1 ↔ Laplaciano; dropout e l’analogia bayesiana di Gal-Ghahramani.
- bias-varianza: il classico trade-off, leggibile in chiave bayesiana come trade-off fra forza del prior (riduce la varianza, aumenta il bias) e fede nei dati.
- rag-base (in preparazione): retrieval-augmented generation come ANALOGIA prior + likelihood.
- in-context-learning (in preparazione): ICL come marginalizzazione bayesiana implicita (Xie 2021), ANALOGIA marcata.
- bayesian-networks (Parte VII, in preparazione): inferenza esatta e approssimata su modelli probabilistici strutturati, generalizzazione naturale del calcolo bayesiano.
- percezione-priors (Parte III, in preparazione): la mente umana letta come motore di inferenza bayesiana attiva, con prior sul mondo modulati dall’esperienza.
- calibration-abstention (Parte XX, in preparazione): la calibrazione di un classificatore è un problema bayesiano travestito; “dire non lo so” è una decisione sotto incertezza posterior.
- agent-protocols, harness-vs-modello (in preparazione): aggiornamento delle credenze di un agente sull’utente o sull’ambiente come pattern bayesiano in loop continuo.
Per andare oltre
Sezione intitolata “Per andare oltre”-
Bishop, Christopher M. (2006). Pattern Recognition and Machine Learning. Springer. Capitoli 1-3 sono il riferimento standard per probabilità, decision theory e modelli lineari con prospettiva bayesiana. Trattamento esemplare di MLE vs MAP, conjugacy, regolarizzazione come prior. Uno dei pochi libri di ML che merita di essere letto integralmente.
-
MacKay, David J. C. (2003). Information Theory, Inference, and Learning Algorithms. Cambridge University Press. Disponibile gratuitamente sul sito dell’autore. Capitoli 2-3 e 21-24 trattano Bayes come logica del ragionamento sotto incertezza con esempi pedagogicamente brillanti (puzzle dell’urna, test medico, decoding di codici). Stile inimitabile, lettura piacevolissima.
-
Gelman, Andrew; Carlin, John B.; Stern, Hal S.; Dunson, David B.; Vehtari, Aki; Rubin, Donald B. (2013, 3rd ed.). Bayesian Data Analysis. Chapman & Hall/CRC. Manuale di riferimento per chi vuole fare analisi bayesiana applicata seriamente. Cap. 1-5 fondamenti e modelli base, cap. 10-13 MCMC, cap. 18+ modelli gerarchici. Denso ma navigabile.
-
McGrayne, Sharon Bertsch (2011). The Theory That Would Not Die. Yale University Press. La storia narrativa di Bayes da Price a oggi: Laplace, l’ostracismo di Fisher, la rinascita militare a Bletchley Park e nella US Navy, l’arrivo nel ML moderno. Per capire perché Bayes è stato scomodo per due secoli.
-
Bayes, Thomas (1763). An Essay towards solving a Problem in the Doctrine of Chances. Philosophical Transactions vol. 53, pp. 370-418. Disponibile online (Royal Society archives). Lettura affascinante a livello storico: la formulazione originale è geometrica, basata sul tavolo da biliardo, e abbastanza diversa dalla forma algebrica moderna. Per chi ama leggere le fonti.