Programma
Alcune distribuzioni di probabilità sono semplicemente troppo complesse per lavorarci direttamente.
Quando modelli dati reali, spesso la matematica si inceppa prima di arrivare a qualcosa di utile. Succede spesso che gli integrali sembrino gestibili sulla carta, ma diventino intrattabili nel momento in cui aggiungi un paio di variabili latenti. Questo è particolarmente comune nell'inferenza bayesiana, dove la distribuzione a posteriori combina le tue credenze a priori con i dati osservati — e il risultato è qualcosa che non puoi riassumere con una semplice formula.
L'idea di base del Markov Chain Monte Carlo è che invece di lavorare direttamente sulla matematica, l'MCMC esplora la distribuzione tramite simulazione. Estrae campioni che ne riflettono la forma senza doverla mai calcolare per intero.
In questo articolo, tratterò i concetti chiave dietro MCMC, passerò in rassegna gli algoritmi più comuni e ti mostrerò come metterlo al lavoro in Python.
Ti serve un ripasso di matematica in Python? Leggi i nostri post sul blog Demystifying Mathematical Concepts for Deep Learning per vedere la matematica applicata in Numpy.
Che cos'è il Markov Chain Monte Carlo?
Markov Chain Monte Carlo (MCMC) è una famiglia di algoritmi che generano campioni da distribuzioni di probabilità — anche quando queste distribuzioni sono troppo complesse per lavorarci direttamente.
Il nome si divide in due parti. La catena di Markov controlla come l'algoritmo si muove tra stati possibili. Ogni passo dipende solo da dove sei in questo momento, non dalla storia completa di come ci sei arrivato. La parte Monte Carlo significa che usi il campionamento casuale per stimare quantità di interesse.
Insieme, l'MCMC costruisce una catena di campioni casuali che, nel tempo, riflette la forma della distribuzione target. È innanzitutto una tecnica di campionamento. Non stai risolvendo esattamente la matematica, ma approssimandola tramite simulazione.
Perché serve il Markov Chain Monte Carlo
Il problema con le distribuzioni dei dati reali è che non sono affatto pulite come quelle dei libri di testo.
Nell'inferenza bayesiana, spesso cerchi di calcolare una distribuzione a posteriori — la probabilità aggiornata dei parametri del modello dopo aver visto i dati. La formula sembra facile sulla carta: basta moltiplicare la prior per la verosimiglianza, poi dividere per la verosimiglianza marginale. Quest'ultimo termine richiede l'integrazione su ogni possibile valore dei parametri. In alta dimensionalità, quell'integrale è praticamente impossibile da calcolare.
E peggiora man mano che il modello cresce. Quando aggiungi più parametri o più variabili latenti, il calcolo esatto diventa un vicolo cieco. Ti capiterà in una serie di scenari comuni:
- Modelli gerarchici bayesiani: dove i parametri dipendono da altri parametri, creando distribuzioni annidate che non si integrano in modo pulito
- Posteriori ad alta dimensionalità: dove il numero di parametri rende le approssimazioni su griglia computazionalmente infattibili
- Prior non coniugate: dove la prior e la verosimiglianza non si combinano in una distribuzione riconoscibile
In questi scenari, l'MCMC è un buon compromesso. Invece di calcolare la distribuzione, ne estrae campioni. Quei campioni hanno tutto ciò che ti serve senza risolvere l'integrale.
Le due idee dietro l'MCMC
L'MCMC combina due idee che da sole sono abbastanza semplici, ma che insieme diventano potenti. Te le spiego.
Catene di Markov
Una catena di Markov è una sequenza di stati in cui ogni passo dipende solo da dove sei adesso.
Dove sei stato prima non conta. Solo lo stato attuale determina dove andrai dopo. Questa proprietà di "assenza di memoria" — chiamata formalmente proprietà di Markov — è ciò che rende la matematica gestibile e l'algoritmo pratico.
La catena si muove tra stati un passo alla volta e, con il giusto setup, alla fine si stabilizza in una distribuzione stazionaria — un andamento stabile in cui la probabilità di trovarsi in un determinato stato smette di cambiare. È proprio con quella distribuzione stabile che l'MCMC è progettato per lavorare.
Metodi Monte Carlo
I metodi Monte Carlo usano il campionamento casuale per stimare quantità difficili da calcolare direttamente.
L'idea è estrarre abbastanza campioni casuali da una distribuzione, quindi stimarne media, varianza o qualsiasi altra proprietà semplicemente osservando i campioni. Più campioni estrai, più le stime si avvicinano ai valori reali.
Da soli, i metodi Monte Carlo richiedono di campionare direttamente dalla distribuzione — che è esattamente il problema che stiamo cercando di risolvere. Le catene di Markov si occupano di quella parte.
Come funziona il Markov Chain Monte Carlo
L'MCMC è un ciclo con una semplice decisione a ogni passo.
- Parti da uno stato iniziale: scegli un punto di partenza nello spazio dei parametri, anche se è una stima approssimativa
- Proponi un nuovo stato: usa un meccanismo di proposta per suggerire dove muoverti dopo
- Decidi se accettarlo: confronta lo stato proposto con quello attuale e accetta o rifiuta in base a quanto è probabile ciascuno sotto la distribuzione target
- Ripeti: esegui questo ciclo migliaia di volte, raccogliendo campioni lungo il percorso
- Usa i campioni: stima medie, intervalli credibili o qualsiasi altra quantità di interesse dai campioni raccolti
Il passo di accettazione/rifiuto è dove avviene la "magia".
Accettando più spesso stati migliori rispetto a quelli peggiori, la catena gravita verso regioni ad alta probabilità — senza dover mai calcolare l'intera distribuzione.
I campioni iniziali dipendono da dove hai iniziato, quindi vengono scartati. Dopo un numero sufficiente di iterazioni, la catena si dimentica del punto di partenza e i campioni rimanenti riflettono la vera forma della distribuzione target.
Distribuzione target e distribuzione stazionaria
L'MCMC è costruito attorno all'obiettivo di generare campioni da una distribuzione target da cui non puoi campionare direttamente.
La distribuzione target è ciò di cui stai cercando di imparare — di solito una distribuzione a posteriori nell'inferenza bayesiana. Ne conosci la forma a meno di una costante di normalizzazione, ma non puoi calcolare direttamente quella costante. All'MCMC non serve.
Ogni algoritmo MCMC è progettato in modo che la sua catena di Markov abbia una distribuzione stazionaria che corrisponde alla target. Una distribuzione stazionaria è la distribuzione in cui la catena si stabilizza dopo abbastanza passi.
Continua a far girare la catena e inizierà a produrre campioni che sembrano proprio estrazioni dalla tua distribuzione target. L'integrale viene bypassato.
Algoritmi MCMC popolari
In pratica vedrai una manciata di algoritmi MCMC. Seguono tutti lo stesso ciclo di base, ma differiscono nel modo in cui propongono nuovi stati e nell'uso delle informazioni sulla distribuzione target.
Algoritmo di Metropolis
L'algoritmo di Metropolis è l'algoritmo MCMC più semplice e quello da cui è partito tutto.
A ogni passo propone un nuovo stato aggiungendo rumore casuale a quello attuale. Se lo stato proposto ha probabilità più alta sotto la distribuzione target, viene sempre accettato. Se è più bassa, viene accettato con una probabilità proporzionale al rapporto tra le due probabilità — altrimenti la catena resta dov'è.
Questo meccanismo di accettazione/rifiuto fa sì che la catena trascorra più tempo nelle regioni ad alta probabilità senza calcolare mai l'intera distribuzione.
L'algoritmo di Metropolis usa una distribuzione di proposta simmetrica, cioè è ugualmente probabile proporre un passo in qualsiasi direzione. Tende a cedere man mano che i modelli crescono.
Algoritmo di Metropolis-Hastings
L'algoritmo di Metropolis-Hastings (MH) generalizza Metropolis permettendo distribuzioni di proposta asimmetriche.
MH regola la probabilità di accettazione per tenere conto del fatto che alcune proposte sono più probabili di altre. Puoi adattare la proposta alla forma della tua target, ottenendo un'esplorazione migliore e una convergenza più rapida.
La maggior parte dei metodi MCMC moderni sono estensioni di MH o basati sugli stessi principi. Quindi, se capisci Metropolis-Hastings, hai compreso le fondamenta del campo.
Campionamento di Gibbs
Il campionamento di Gibbs aggiorna una variabile alla volta invece di proporre un nuovo stato per tutti i parametri insieme.
A ogni passo campiona ciascuna variabile dalla sua distribuzione condizionale — la distribuzione di quella variabile dati i valori correnti di tutte le altre. Quando hai ciclicamente aggiornato tutte le variabili, hai completato un'iterazione completa.
Questo evita del tutto il passo di accettazione/rifiuto, poiché ogni estrazione condizionale è sempre accettata. È utile quando la distribuzione congiunta completa è difficile da campionare ma le condizionali sono trattabili, cosa comune nei modelli gerarchici bayesiani.
Hamiltonian Monte Carlo
Hamiltonian Monte Carlo (HMC) è il primo algoritmo che ha reso l'inferenza bayesiana moderna praticabile su larga scala.
Invece di proporre nuovi stati in modo casuale, HMC usa le informazioni di gradiente della distribuzione target per proporre stati lontani dalla posizione corrente ma ancora probabilmente accettabili. Si muove nello spazio dei parametri molto meglio dei metodi a passeggiata casuale. Ci sono meno proposte rifiutate e una migliore esplorazione di distribuzioni ad alta dimensionalità.
I metodi a passeggiata casuale come Metropolis non scalano all'aumentare del numero di parametri. HMC non ha questo problema nello stesso grado.
HMC è il motore dietro Stan, una delle piattaforme di programmazione probabilistica più usate. Il No-U-Turn Sampler (NUTS), un'estensione adattiva di HMC usata in PyMC, elimina la necessità di regolare manualmente passo e numero di step.
MCMC nella statistica bayesiana
Se c'è un'area in cui l'MCMC ha avuto l'impatto maggiore, è l'inferenza bayesiana.
La statistica bayesiana ruota attorno alla distribuzione a posteriori, cioè la probabilità aggiornata dei parametri del modello dopo aver visto i dati. Calcolarla significa moltiplicare la prior per la verosimiglianza e normalizzare. Quel passo di normalizzazione richiede un integrale che raramente è trattabile.
L'MCMC elimina completamente questo passo. Valuti semplicemente il posteriore non normalizzato in un punto qualsiasi e lasci che la catena faccia il resto.
Ecco un esempio semplice. Diciamo che stai stimando il bias di una moneta. Parti dalla credenza a priori che la moneta sia probabilmente equa, poi osservi una sequenza di lanci. Per un modello di moneta semplice, il posteriore ha forma chiusa. Se aggiungi una struttura gerarchica, cioè stimi il bias su cento monete contemporaneamente, diventa impossibile da calcolare.
Con l'MCMC, esegui la catena, raccogli campioni dal posteriore e usi quei campioni per calcolare ciò che ti serve.
Capire burn-in, convergenza e mixing
Questi tre concetti confondono i data scientist alle prime armi con l'MCMC. Se li sbagli, otterrai risultati, ma non saprai perché non sono affidabili.
Burn-in
Quando una catena di Markov parte, non ha idea di dove siano le regioni ad alta probabilità della tua distribuzione target.
I campioni iniziali sono influenzati dal punto di partenza, non dalla distribuzione target. Il burn-in è la pratica di scartarli. Esegui prima la catena per un certo numero di iterazioni, butti via quei campioni e tieni solo quelli che arrivano dopo che la catena ha avuto il tempo di trovare un buon punto di partenza.
Non esiste una regola universale per la durata del burn-in. Dipende dal modello, dal punto di partenza e da quanto bene la catena miscela. In pratica, lo diagnostichi visivamente con i trace plot invece di scegliere un numero fisso a priori.
Convergenza
Convergenza significa che la catena ha smesso di essere influenzata dal punto di partenza e ora estrae campioni che riflettono la distribuzione target.
Una catena che non è convergente produce campioni distorti. La media che calcoli da essi non corrisponderà alla vera media a posteriori. Rifletterà invece dove la catena si è trovata bloccata.
La convergenza si valuta a posteriori usando diagnostiche. Eseguire più catene da punti di partenza diversi e verificare se concordano è uno dei modi più affidabili per cogliere i fallimenti di convergenza.
Mixing
Una catena che converge ma miscela male è comunque problematica.
Il mixing descrive quanto bene la catena esplora la distribuzione target. Una catena che miscela bene si muove liberamente, visita sia regioni ad alta sia a bassa probabilità e produce campioni approssimativamente indipendenti tra loro. Una catena che miscela male resta in una regione per molte iterazioni prima di spostarsi e produce campioni altamente correlati che non rappresentano l'intera distribuzione.
Il mixing scarso spesso appare come un trace plot che sembra un fiume lento e tortuoso invece di una banda orizzontale rumorosa. Quando vedi questo, il tuo campionatore ha bisogno di tuning — una migliore distribuzione di proposta o un algoritmo del tutto diverso.

Grafico di confronto del mixing
Come valutare i risultati MCMC
Ora ti mostro quattro modi per valutare l'MCMC e quando usare ciascuno.
Trace plot
Un trace plot mostra il valore campionato di un parametro a ogni iterazione. È la prima cosa da guardare dopo aver eseguito l'MCMC.
Un trace plot sano assomiglia a rumore bianco attorno a una media stabile. Non dovresti vedere trend, lunghi tratti piatti o derive lente. Se vedi la catena vagare o bloccarsi in una regione per molte iterazioni, è un problema di mixing e i tuoi campioni non sono affidabili.

Trace plot visualizzati
Autocorrelazione
I campioni MCMC non sono mai completamente indipendenti. Ogni campione è influenzato da quello precedente. L'autocorrelazione misura quanto fortemente i campioni sono correlati tra iterazioni.
Un'alta autocorrelazione significa che i tuoi campioni portano meno informazione di quanto il loro numero suggerisca. Duemila campioni correlati possono fornirti la stessa informazione di duecento indipendenti. La maggior parte delle librerie MCMC include grafici di autocorrelazione per vedere quanto rapidamente la correlazione decresce man mano che i campioni si allontanano.

Grafici di autocorrelazione visualizzati
Dimensione campionaria effettiva
La dimensione campionaria effettiva (ESS) traduce quell'autocorrelazione in un numero pratico: a quanti campioni indipendenti equivale la tua catena.
Se hai estratto 5.000 campioni ma l'ESS è 200, stai lavorando con la potenza statistica di 200 estrazioni indipendenti. Un'ESS bassa significa che devi far girare la catena più a lungo, regolare il campionatore, o entrambi. La maggior parte dei professionisti mira ad avere un'ESS di almeno qualche centinaio per parametro prima di fidarsi delle stime.
Diagnostiche di convergenza
Quando esegui più catene, puoi testare formalmente se sono converge a la stessa distribuzione. La diagnostica di Gelman-Rubin, riportata come R-hat, confronta la varianza all'interno di ogni catena con la varianza tra catene.
Un R-hat vicino a 1,0 significa che le catene concordano, il che è un buon segno. Valori sopra 1,01 o 1,05 (a seconda della soglia usata dalla libreria) suggeriscono che le catene non sono convergenti e servono più iterazioni. La maggior parte delle librerie moderne come PyMC calcola automaticamente R-hat e segnala avvisi quando è troppo alto.
Markov Chain Monte Carlo in Python
Python ha un paio di librerie per l'MCMC, ciascuna con una filosofia diversa.
- PyMC: l'opzione più accessibile per la maggior parte dei data scientist. Definisci il modello con sintassi Python e PyMC gestisce il campionamento sotto il cofano usando NUTS (una versione adattiva di HMC). È il punto di riferimento per la modellazione bayesiana in Python.
- CmdStanPy / PyStan: interfacce Python a Stan, un linguaggio dedicato alla programmazione probabilistica. Stan compila il modello in C++ prima di eseguirlo, rendendolo veloce e adatto a modelli gerarchici complessi. Il rovescio della medaglia è una curva di apprendimento più ripida.
- NumPy: nessuna libreria MCMC dedicata, ma puoi implementare da zero algoritmi come Metropolis-Hastings. Utile per capire cosa succede sotto il cofano prima di passare a strumenti di livello più alto.
Per la maggior parte del lavoro pratico, PyMC è il punto di partenza. È ciò che userò, quindi se segui passo passo, assicurati prima di installare la libreria:
pip install pymc
Per semplicità, resterò su un esempio facile: stimare il bias di una moneta da una sequenza di lanci.
Passo 1: definisci il modello
import pymc as pm
import numpy as np
# 1 = heads, 0 = tails
observed_flips = np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 1])
with pm.Model() as coin_model:
# Prior: we believe the coin is probably fair
bias = pm.Beta("bias", alpha=2, beta=2)
# Likelihood: observed flips given the bias
flips = pm.Bernoulli("flips", p=bias, observed=observed_flips)
La prior pm.Beta codifica una credenza debole che la moneta sia equa. La verosimiglianza pm.Bernoulli collega il modello ai dati osservati.
Passo 2: esegui il campionatore
with coin_model:
trace = pm.sample(2000, tune=1000, return_inferencedata=True)

Output dell'esecuzione del campionatore
tune imposta il numero di step di burn-in — quei campioni vengono scartati. sample estrae 2000 campioni posteriori per catena dopo il tuning.
Passo 3: ispeziona il posteriore
import arviz as az
az.plot_trace(trace, var_names=["bias"])
az.summary(trace, var_names=["bias"])

Trace plot del modello e risultati riepilogativi
az.summary() ti fornisce media a posteriori, deviazione standard e R-hat per ogni parametro. Se R-hat è vicino a 1,0, le catene sono convergenti. az.plot_trace() traccia il trace e la distribuzione a posteriori affiancati per ogni parametro.
Per questo dataset — 7 teste su 10 lanci — la media a posteriori è 0,642 con una deviazione standard di 0,124. Riflette l'evidenza nei dati restando vicina alla prior di moneta equa. R-hat è 1,00 e l'ESS è ben oltre 2000, quindi le catene sono convergenti e i campioni affidabili.
Errori comuni con l'MCMC
L'MCMC è facile da eseguire, ma anche facile da usare male. Ecco gli errori che compaiono più spesso.
- Dare per scontata la convergenza troppo presto: il fatto che il campionatore sia girato senza errori non significa che sia convergente. Controlla sempre R-hat e i trace plot prima di fidarti dei risultati. Una catena può sembrare stabile ed essere comunque bloccata in una regione dello spazio dei parametri.
- Ignorare il burn-in: i campioni iniziali sono orientati verso il punto di partenza, non verso la distribuzione target. Scartali. La maggior parte delle librerie lo gestisce automaticamente tramite il parametro
tune, ma verifica di non includere per errore quei campioni nell'analisi. - Mixing scarso: una catena che si muove troppo lentamente produce campioni altamente correlati che portano meno informazione di quanto il loro numero suggerisca. Se il tuo trace plot sembra una deriva lenta anziché una banda orizzontale rumorosa, la distribuzione di proposta va regolata o serve un algoritmo migliore. Passare da Metropolis a NUTS spesso risolve direttamente.
- Troppi pochi campioni: una dimensione campionaria effettiva (ESS) bassa significa che le stime non sono affidabili, anche se la catena tecnicamente è convergente. Se la tua ESS è una piccola frazione dei draw totali, fai girare la catena più a lungo o migliora il mixing prima di trarre conclusioni.
MCMC vs altri metodi di campionamento
L'MCMC non è l'unico modo per approssimare una distribuzione. Ecco come si confronta con le alternative.
- Rejection sampling estrae proposte da una distribuzione più semplice e le accetta in base a quanto bene corrispondono alla target. È esatto quando funziona, ma i tassi di accettazione crollano in alta dimensionalità.
- Importance sampling pesa campioni da una distribuzione di proposta per approssimare le aspettative sotto la target. È veloce e funziona bene in bassa dimensionalità, ma la varianza dei pesi esplode con l'aumentare delle dimensioni. In pratica, una manciata di campioni finisce per portare quasi tutto il peso, rendendo le stime inaffidabili.
- Inferenza variazionale (VI) adatta una distribuzione più semplice per approssimare la target minimizzando una misura di divergenza. La VI è molto più veloce dell'MCMC e scala a grandi dataset, ma introduce un errore di approssimazione. La distribuzione adattata può perdere struttura del posteriore che l'MCMC coglierebbe.
In sintesi:

MCMC rispetto alle alternative
L'MCMC è la scelta giusta quando l'accuratezza conta più della velocità. Se devi scalare a grandi dataset o eseguire inferenza in tempo reale, l'inferenza variazionale potrebbe valere il compromesso in termini di accuratezza.
Conclusione
L'MCMC è uno di quegli strumenti che dall'esterno appare intimidatorio ma ha molto senso una volta capito cosa fa realmente — costruire una catena di campioni che riflette gradualmente la forma di una distribuzione che non puoi calcolare direttamente.
È anche molto più facile da comprendere se lo scomponi in parti: catene di Markov e metodi Monte Carlo.
Il suo ruolo nella statistica bayesiana è difficile da sopravvalutare. Le distribuzioni a posteriori che altrimenti sarebbero fuori portata diventano risolvibili nel momento in cui hai un campionatore affidabile. Ecco perché l'MCMC è al cuore di librerie di programmazione probabilistica come PyMC e Stan.
Ma prima di passare all'implementazione, è bene farsi la giusta intuizione. Capire perché la catena deve fare burn-in, cosa significa davvero mixing e come leggere un trace plot. Il codice in sé è la parte facile, dato che le librerie Python nascondono tutte le astrazioni dietro semplici chiamate di funzione.
Se vuoi diventare competente nel machine learning, iscriviti al nostro Machine Learning Scientist in Python track. 85 ore di materiale ti aiuteranno a essere pronto per il lavoro nel 2026.
MCMC: domande frequenti
A cosa serve il Markov Chain Monte Carlo?
L'MCMC si usa per estrarre campioni da distribuzioni di probabilità troppo complesse per lavorarci direttamente. È più comune nella statistica bayesiana, dove stima le distribuzioni a posteriori senza richiedere soluzioni in forma chiusa. Lo troverai anche in simulazioni fisiche, biologia computazionale e in qualsiasi campo in cui l'inferenza esatta non è fattibile.
In cosa l'MCMC differisce dal campionamento casuale tradizionale?
Il campionamento casuale tradizionale presuppone che tu possa estrarre direttamente dalla distribuzione target. L'MCMC aggira il problema costruendo una catena di campioni che converge gradualmente alla target. Non devi conoscere l'intera distribuzione, ma solo come valutarla in un punto qualsiasi. Il compromesso è che i campioni MCMC sono correlati, quindi te ne servono di più per ottenere stime affidabili.
Come fai a sapere se un campionatore MCMC è convergente?
Il controllo più comune è la diagnostica di Gelman-Rubin, riportata come R-hat. Valori vicini a 1,0 indicano che le catene sono converge a la stessa distribuzione. Anche i trace plot e la dimensione campionaria effettiva (ESS) sono utili. Un trace plot sano sembra rumore casuale attorno a una media stabile, e un'ESS alta significa che i tuoi campioni portano abbastanza informazione da fidarti delle stime.
Qual è la differenza tra Metropolis-Hastings e Hamiltonian Monte Carlo?
Metropolis-Hastings propone nuovi stati aggiungendo rumore casuale alla posizione corrente, il che può essere lento quando la distribuzione target ha geometria complessa. L'Hamiltonian Monte Carlo usa informazioni di gradiente per proporre stati lontani dalla posizione attuale ma ancora probabilmente accettabili, portando a un'esplorazione molto migliore in alta dimensionalità. Per la maggior parte dei workflow bayesiani moderni, HMC — e la sua versione adattiva, NUTS — è la scelta preferita.
Quando dovresti usare l'inferenza variazionale invece dell'MCMC?
Quando velocità e scalabilità contano più dell'accuratezza. L'MCMC produce campioni di alta qualità ma scala male a grandi dataset e modelli ad alta dimensionalità. L'inferenza variazionale adatta una distribuzione più semplice per approssimare il posteriore: è molto più veloce ma introduce errore di approssimazione che l'MCMC evita. Se stai prototipando su larga scala o ti serve inferenza in tempo reale, l'inferenza variazionale vale il compromesso.
