statistica

Il Metodo Montecarlo spiegato in modo semplice e applicato a casi reali

Cos’è il metodo Monte Carlo

La storia del metodo Monte Carlo comincia nel modo più improbabile: con un matematico a letto che gioca a carte. Nel 1946, Stanisław Ulam, matematico polacco in convalescenza dopo un intervento chirurgico, si ritrovò a giocare a solitario per passare il tempo. Da matematico qual era, si chiese: quante probabilità ho di vincere una partita?

Il problema, sulla carta, era risolvibile: bastava enumerare tutte le possibili combinazioni di carte e contare quelle favorevoli. In pratica, però, il numero di combinazioni era talmente enorme da rendere il calcolo analitico impraticabile. Ulam ebbe allora un’intuizione tanto semplice quanto potente: anziché calcolare la probabilità esatta, perché non simulare centinaia di partite e contare quante volte si vince?

In sintesi: il metodo Monte Carlo è una tecnica che usa la simulazione casuale per risolvere problemi troppo complessi da affrontare analiticamente. Si generano migliaia di scenari possibili, si calcola il risultato per ciascuno e si aggregano i risultati in una distribuzione: non un numero unico, ma un ventaglio di possibilità con la loro probabilità. Più simulazioni eseguiamo, più la stima si avvicina al valore reale (la legge dei grandi numeri).

L’idea è disarmante nella sua semplicità. Se giochiamo 1.000 partite e ne vinciamo 230, possiamo stimare la probabilità di vittoria intorno al 23%. Più partite simuliamo, più la stima si avvicina al valore reale. Questo è, in essenza, il metodo Monte Carlo: usare la simulazione casuale per risolvere problemi che sarebbero troppo complessi da affrontare analiticamente.

Ulam condivise l’idea con il collega John von Neumann, probabilmente il più brillante matematico del XX secolo, che ne intravide immediatamente il potenziale. Von Neumann capì che l’ENIAC — uno dei primissimi computer elettronici, che occupava un’intera stanza — poteva eseguire migliaia di simulazioni in tempi ragionevoli. Insieme svilupparono il metodo per un problema ben più serio del solitario: la diffusione dei neutroni nelle bombe atomiche, nell’ambito del progetto Manhattan a Los Alamos.

Il nome “Monte Carlo” fu scelto come nome in codice, un riferimento al celebre casinò di Monte Carlo a Monaco. La leggenda vuole che l’ispirazione venisse dallo zio di Ulam, noto giocatore d’azzardo. In fondo, il cuore del metodo è proprio il caso: generare numeri casuali per esplorare spazi di possibilità troppo vasti per essere percorsi sistematicamente.

Da quei primi esperimenti nucleari degli anni ’40, il metodo Monte Carlo si è diffuso in ogni campo della scienza e dell’ingegneria. Oggi è uno degli strumenti computazionali più utilizzati al mondo, dalla fisica delle particelle alla finanza, dal rendering cinematografico alla scoperta di nuovi farmaci. Vediamo come funziona.

Di cosa parleremo:

Su cosa si basa: caso, grandi numeri, convergenza

Il fondamento del metodo Monte Carlo poggia su un principio statistico che abbiamo già incontrato in altri articoli: la legge dei grandi numeri. In termini semplici, questa legge ci dice che la media di un campione casuale si avvicina alla media della popolazione man mano che il campione cresce. Tradotto nel linguaggio Monte Carlo: più simulazioni eseguiamo, più il risultato sarà accurato.

Per eseguire una simulazione Monte Carlo abbiamo bisogno di numeri casuali. In realtà, i computer non generano numeri veramente casuali: utilizzano algoritmi deterministici che producono sequenze di numeri pseudo-casuali, con proprietà statistiche indistinguibili dal caso reale.
In R, ad esempio, la funzione runif() genera numeri uniformemente distribuiti tra 0 e 1. Il fatto che siano deterministici ha un lato prezioso: fissando il seme con set.seed(), chiunque riesegua lo stesso codice ottiene esattamente gli stessi numeri — ed è il motivo per cui i risultati che vedremo tra poco sono riproducibili al decimale.

Un aspetto cruciale è il tasso di convergenza. L’errore della stima Monte Carlo diminuisce come 1/√n, dove n è il numero di simulazioni. Questo significa che per dimezzare l’errore dobbiamo quadruplicare le simulazioni; per ottenere una cifra decimale in più di precisione, servono 100 volte più iterazioni.
Non è particolarmente efficiente, ma la bellezza del metodo sta nel fatto che funziona indipendentemente dalla complessità del problema: che il problema abbia 2 o 2.000 variabili, il tasso di convergenza resta lo stesso.

A sinistra la stima di π si assesta al crescere delle simulazioni; a destra l’errore tipico cala lungo la retta 1/√n, misurato su molte ripetizioni indipendenti.

Va sempre tenuto bene a mente: nella pratica quotidiana dobbiamo bilanciare la precisione desiderata con le risorse computazionali disponibili. Aumentare il numero di simulazioni comporta un costo in termini di tempo di calcolo. Fortunatamente, i computer moderni rendono questo compromesso molto più favorevole rispetto ai tempi dell’ENIAC.

Quali sono i quattro passi del metodo

Vediamo concretamente come si applica il metodo Monte Carlo. Il procedimento si articola in quattro passi fondamentali.

1. Definire il modello. Per prima cosa, identifichiamo le variabili del problema e le distribuzioni di probabilità che le governano. Ad esempio, se vogliamo simulare il rendimento di un investimento, il modello includerà il rendimento atteso (media) e la volatilità (deviazione standard), assumendo tipicamente una distribuzione normale dei rendimenti.

2. Generare scenari casuali. Utilizzando un generatore di numeri pseudo-casuali, produciamo migliaia di scenari possibili. Ogni scenario rappresenta una “storia alternativa”: un modo in cui le cose potrebbero andare.

3. Calcolare il risultato per ogni scenario. Per ciascuno scenario, applichiamo il modello e otteniamo un risultato. Se stiamo simulando un investimento, il risultato sarà il valore finale del portafoglio.

4. Aggregare i risultati. Infine, analizziamo l’insieme dei risultati: calcoliamo la media, la mediana, i percentili. Questo ci dà non solo una stima del risultato atteso, ma un’intera distribuzione delle possibilità. Ed è qui che il Monte Carlo brilla: non ci dice solo “quanto probabilmente guadagneremo”, ma anche “quanto potremmo perdere nel caso peggiore”.

Facciamo un esempio al volo per chiarire il concetto della convergenza. Immaginiamo di lanciare una moneta e di voler stimare la probabilità che esca testa. Dopo 10 lanci potremmo ottenere 7 teste (70%), una stima molto lontana dal vero 50%. Dopo 100 lanci saremo più vicini, forse 53%. Dopo 10.000 lanci, la nostra stima sarà molto vicina al 50%. Questo è il Monte Carlo in azione: sostituiamo un calcolo teorico con un esperimento ripetuto migliaia di volte.

La potenza del metodo risiede nella sua flessibilità. Mentre i metodi analitici richiedono formule chiuse (che spesso non esistono per problemi complessi), il Monte Carlo richiede solo di saper simulare il processo. Se riusciamo a scrivere un programma che genera uno scenario, il Monte Carlo ci dà la distribuzione dei risultati.

Esempio 1 — come stimare π con i numeri casuali

L’esempio più classico e didatticamente efficace del metodo Monte Carlo è la stima del numero π. L’idea è elegante: consideriamo un quadrato di lato 2 con un cerchio di raggio 1 inscritto al suo interno. L’area del quadrato è 4, l’area del cerchio è π. Se generiamo punti casuali all’interno del quadrato, la proporzione di punti che cadono dentro il cerchio sarà approssimativamente π/4.

Calcolo in R con 100.000 punti:

set.seed(123)
n <- 100000
x <- runif(n, -1, 1)
y <- runif(n, -1, 1)
inside <- (x^2 + y^2) <= 1
pi_estimate <- 4 * sum(inside) / n
pi_estimate
# [1] 3.14632

Lo stesso in Python:

import random
random.seed(123)
n = 100000
inside = sum(1 for _ in range(n)
             if random.uniform(-1, 1)**2 + random.uniform(-1, 1)**2 <= 1)
pi_estimate = 4 * inside / n
print(pi_estimate)
# 3.13688
100.000 punti a caso nel quadrato: la quota che cade nel cerchio inscritto, moltiplicata per 4, stima π (qui 3,146).

Con 100.000 punti otteniamo già una stima ragionevole, ma non precisissima: siamo alla seconda cifra decimale. Come si vede, R e Python partono dallo stesso seme ma usano generatori diversi e arrivano a numeri leggermente diversi (3,146 contro 3,137): entrambi ballano attorno al vero π nella misura prevista dalla curva 1/√n. Per guadagnare un’altra cifra di precisione servirebbero circa 100 volte più punti. Sembra difficile? In realtà, è davvero un giochetto da ragazzi — il computer fa tutto il lavoro pesante.

Esempio 2 — come valutare il rischio di un portafoglio

Passiamo a un esempio più vicino alla realtà operativa. Supponiamo di avere un portafoglio composto da tre azioni con le seguenti caratteristiche:

AzioneRendimento attesoDeviazione standardPeso nel portafoglio
A8%12%40%
B10%15%30%
C12%18%30%

Vogliamo stimare la probabilità che il rendimento del portafoglio superi il 10%. Simulo in R con 10.000 scenari:

set.seed(42)
sim_A <- rnorm(10000, mean = 0.08, sd = 0.12)
sim_B <- rnorm(10000, mean = 0.10, sd = 0.15)
sim_C <- rnorm(10000, mean = 0.12, sd = 0.18)
sim_portafoglio <- 0.4 * sim_A + 0.3 * sim_B + 0.3 * sim_C
prob_risultato <- mean(sim_portafoglio >= 0.10)
prob_risultato
# [1] 0.4903

Lo stesso in Python:

import random
random.seed(42)
n = 10000
count = 0
for _ in range(n):
    a = random.gauss(0.08, 0.12)
    b = random.gauss(0.10, 0.15)
    c = random.gauss(0.12, 0.18)
    ptf = 0.4 * a + 0.3 * b + 0.3 * c
    if ptf >= 0.10:
        count += 1
print(count / n)
# 0.4898

Il risultato ci dice che c’è circa il 49% di probabilità di superare il 10% di rendimento. Ma il valore davvero prezioso non è questo singolo numero: è l’intera distribuzione che il Monte Carlo ci mette sotto gli occhi. Da lì leggiamo anche il rendimento mediano, il peggior scenario al 5° percentile e — dato tutt’altro che secondario — la probabilità di chiudere in perdita, che qui sfiora il 13%.

I 10.000 rendimenti simulati del portafoglio: circa il 49% supera l’obiettivo del 10%, circa il 13% chiude in perdita.

Esempio 3 — quanti clic porta davvero salire di posizione?

Fin qui fisica e finanza; ma il Monte Carlo è di casa anche nel nostro campo. Facciamo un esempio al volo. Stiamo valutando se vale la pena investire per far salire una pagina dalla nona posizione alla terza su una parola chiave interessante. La domanda del cliente è secca: “quanti clic in più porta?”. La tentazione è rispondere con un conto della serva — volume medio mensile per CTR medio in terza posizione:

12000 * 0.11
# [1] 1320

Milletrecento clic al mese, numero pulito e rassicurante. Peccato che sia falsamente preciso: nasconde due incertezze grosse come una casa. Le impressioni non sono una costante — oscillano con la stagionalità e con la domanda del mercato — e il CTR atteso in terza posizione non è un numero fisso, ma dipende dalla SERP, dalla presenza di elementi come gli AI Overview, dall’intento di ricerca. Invece di moltiplicare due medie, diamo in pasto al Monte Carlo l’incertezza di entrambe.

Simulo in R diecimila scenari, con le impressioni attorno a 12.000 (deviazione standard 2.500) e il CTR attorno all’11% (deviazione standard 3 punti):

set.seed(7)
n <- 10000
impressioni <- rnorm(n, mean = 12000, sd = 2500)
impressioni[impressioni < 0] <- 0
ctr <- rnorm(n, mean = 0.11, sd = 0.03)
ctr[ctr < 0] <- 0
clic <- impressioni * ctr

mean(clic)                     # ~ 1323 clic/mese
median(clic)                   # ~ 1282
quantile(clic, c(0.05, 0.95))  # ~ 632 ... 2139
mean(clic > 1500)              # ~ 0.33

La media (circa 1.320 clic) coincide col conto della serva, e fin qui nessuna sorpresa. Ma la simulazione aggiunge proprio ciò che il numero secco cancellava: gli scenari plausibili vanno da circa 630 a circa 2.140 clic al mese, e se il progetto va in pari solo sopra i 1.500 clic, la probabilità di superarli è appena un terzo. È lo stesso istogramma dell’esempio del portafoglio, applicato ai clic invece che ai rendimenti — e racconta una storia che “1.320” da solo non poteva raccontare.

Un forecast SEO onesto non è un numero, è una distribuzione: dice quanto possiamo aspettarci e quanto è larga l’incertezza attorno a quell’attesa. Portare quella larghezza sul tavolo del cliente, invece di nasconderla dietro una cifra tonda, è ciò che separa una promessa da una stima difendibile.

Come funziona il simulatore: il moto browniano geometrico

Per rendere il concetto ancora più tangibile, abbiamo costruito un simulatore interattivo che applica il metodo Monte Carlo alla previsione del valore futuro di un investimento. Il modello alla base è il moto browniano geometrico (Geometric Brownian Motion, GBM), lo stesso utilizzato nel celebre modello di Black-Scholes per il pricing delle opzioni finanziarie.

In termini intuitivi, il prezzo futuro di un asset si calcola come il prezzo corrente moltiplicato per una crescita casuale. La formula che genera un passo del percorso è:

\( S_{t+1} = S_t \cdot \exp\left( \left(\mu – \frac{\sigma^2}{2}\right)\Delta t + \sigma \sqrt{\Delta t}\; Z \right) \\ \)

dove μ è il rendimento atteso annuo (la “crescita media”), σ è la volatilità (quanto il prezzo oscilla, la nostra misura di incertezza), Δt è l’ampiezza del passo temporale e Z è un numero casuale con distribuzione normale. Ogni simulazione genera un percorso diverso: alcuni scenari vedranno il portafoglio crescere molto, altri lo vedranno diminuire.

Traiettorie simulate del valore di un investimento su un anno: la banda 5°–95° percentile si allarga nel tempo mentre la mediana cresce lentamente.

Il grafico qui sopra mostra il ventaglio dei possibili percorsi; il simulatore qui sotto lascia muovere le manopole — rendimento, volatilità, orizzonte — e osservare come cambia la distribuzione dei risultati finali.

Dove si usa oggi il Monte Carlo?

Dalla fisica nucleare degli anni ’40, il metodo Monte Carlo si è diffuso in ambiti che Ulam e von Neumann non avrebbero immaginato. Vediamo le applicazioni più affascinanti.

Rendering 3D e cinema. Ogni volta che guardiamo un film Pixar o un blockbuster con effetti speciali, stiamo ammirando il Monte Carlo in azione. La tecnica si chiama path tracing: per calcolare il colore di ogni pixel, il software simula milioni di raggi di luce che rimbalzano tra le superfici della scena. Ogni raggio segue un percorso casuale, e la media di migliaia di percorsi produce l’immagine fotorealistica che vediamo sullo schermo.

Finanza e gestione del rischio. Nel mondo finanziario, il Monte Carlo è onnipresente. Le banche lo usano per calcolare il Value at Risk (VaR), ovvero la perdita massima probabile di un portafoglio in un dato orizzonte temporale. È lo stesso principio del nostro simulatore, applicato a portafogli con centinaia di asset e correlazioni complesse. Anche il pricing di opzioni esotiche, che non hanno formule chiuse, si basa su simulazioni Monte Carlo.

Scoperta di nuovi farmaci. Nella ricerca farmaceutica, il Monte Carlo viene utilizzato per simulare il docking molecolare: come una molecola candidata si lega a una proteina bersaglio. Simulando milioni di configurazioni spaziali possibili, i ricercatori identificano i composti più promettenti prima ancora di sintetizzarli in laboratorio, risparmiando anni di sperimentazione.

Modelli climatici. I modelli che prevedono il cambiamento climatico sono intrinsecamente incerti: dipendono da scenari di emissioni, feedback atmosferici, dinamiche oceaniche. Il Monte Carlo permette di esplorare migliaia di combinazioni di parametri e generare le bande di incertezza che vediamo nei rapporti dell’IPCC. Non una singola previsione, ma una distribuzione di futuri possibili.

Intelligenza artificiale. Nel machine learning, una tecnica chiamata Monte Carlo dropout usa la simulazione per stimare l’incertezza delle previsioni di una rete neurale. E il celebre AlphaGo di DeepMind, che nel 2016 sconfisse il campione mondiale di Go, utilizzava il Monte Carlo Tree Search (MCTS) per esplorare le mosse possibili in un gioco con più configurazioni degli atomi nell’universo.

CampoEsempioCosa si simula
Cinema/3DPath tracing (Pixar)Percorsi dei raggi di luce
FinanzaValue at RiskScenari di mercato
FarmaceuticaDocking molecolareConfigurazioni spaziali
ClimaModelli IPCCCombinazioni di parametri
AIAlphaGo (MCTS)Mosse possibili

Quali sono vantaggi e limiti del metodo?

Come ogni strumento statistico, il metodo Monte Carlo ha i suoi punti di forza e i suoi limiti. Vediamoli con onestà.

Flessibilità. Il vantaggio più grande è la versatilità: il Monte Carlo si applica a problemi complessi di qualsiasi dimensione e in qualsiasi campo, dalla finanza all’ingegneria, dalla fisica alla biologia. Non richiede formule chiuse, solo la capacità di simulare il processo.

Accuratezza. Con un numero sufficiente di simulazioni, la stima può essere resa arbitrariamente precisa. Più eseguiamo il metodo, più il risultato converge al valore reale.

Scalabilità. Diversamente dai metodi a griglia, che soffrono della “maledizione della dimensionalità” (il costo esplode con il numero di variabili), il Monte Carlo mantiene lo stesso tasso di convergenza indipendentemente dal numero di dimensioni. Questo lo rende l’unico strumento praticabile per problemi con molte variabili.

Tuttavia, va tenuto bene a mente che il metodo presenta anche limiti significativi. Il primo è la convergenza lenta: il tasso 1/√n significa che per guadagnare una cifra di precisione servono 100 volte più simulazioni, e per problemi che richiedono altissima precisione questo può essere proibitivo. Il secondo è il costo computazionale: per problemi complessi ogni singola simulazione può richiedere tempo significativo, e moltiplicato per milioni di iterazioni il conto diventa salato.

C’è però un limite più insidioso, che non riguarda il calcolo ma il ragionamento:

Un avvertimento: il Monte Carlo non crea informazione dal nulla, la propaga. La distribuzione dei risultati è affidabile esattamente quanto le distribuzioni che diamo in pasto al modello. Se sbagliamo le medie, le deviazioni standard o le correlazioni degli input, otterremo un output preciso nella forma ma falso nella sostanza — la classica spazzatura dentro, spazzatura fuori. E le migliaia di simulazioni regalano un’illusione di rigore che il modello di partenza magari non merita: la parte difficile non è far girare il codice, è scegliere bene le distribuzioni.

Per mitigare i limiti di costo e convergenza, negli anni sono state sviluppate tecniche di riduzione della varianza che permettono di ottenere risultati più precisi con meno simulazioni:

  • Importance sampling: campionare da una distribuzione alternativa che “concentra” le simulazioni nelle regioni più informative.
  • Control variates: utilizzare una variabile correlata di cui conosciamo il valore atteso per ridurre la varianza della stima.
  • Stratified sampling: suddividere lo spazio in sottogruppi omogenei e campionare da ciascuno.
  • Antithetic variates: sfruttare coppie di numeri casuali negativamente correlati per ridurre la varianza.

Il metodo Monte Carlo rappresenta uno degli strumenti più potenti della statistica computazionale. Nei prossimi articoli vedremo come alcune di queste tecniche — in particolare il bootstrap, che del Monte Carlo è parente stretto — si applicano a problemi concreti di inferenza statistica.

Domande frequenti

Che cos’è il metodo Monte Carlo?

È una tecnica che usa la simulazione casuale per risolvere problemi troppo complessi per il calcolo analitico: si generano migliaia di scenari possibili, si calcola il risultato per ciascuno e si aggrega tutto in una distribuzione di possibilità, con le relative probabilità.

Come funziona il metodo Monte Carlo?

In quattro passi: definire il modello (variabili e distribuzioni), generare scenari casuali, calcolare il risultato per ogni scenario e aggregare i risultati in media, mediana e percentili. Non dà un solo numero atteso, ma l’intera distribuzione dei possibili esiti.

Perché si chiama “Monte Carlo”?

Il nome fu scelto da Ulam e von Neumann come nome in codice per i loro lavori a Los Alamos, in riferimento al celebre casinò di Monaco: il cuore del metodo è proprio il caso. La leggenda vuole che l’ispirazione venisse dallo zio di Ulam, un noto giocatore d’azzardo.

Quante simulazioni servono per un risultato affidabile?

Dipende dalla precisione che vogliamo: l’errore della stima cala come 1/√n, dove n è il numero di simulazioni. Per dimezzare l’errore servono quattro volte più simulazioni; per una cifra decimale in più, cento volte. In pratica, con migliaia di scenari si ottengono stime più che ragionevoli.

In quali campi si usa il Monte Carlo?

Praticamente ovunque ci sia incertezza: dalla fisica delle particelle al rendering 3D (il path tracing dei film d’animazione), dalla finanza (Value at Risk, pricing di opzioni) alla ricerca farmaceutica (docking molecolare), dai modelli climatici all’intelligenza artificiale (AlphaGo usa il Monte Carlo Tree Search).

Qual è il limite più insidioso del Monte Carlo?

Che non crea informazione dal nulla: la propaga. La distribuzione dei risultati è affidabile esattamente quanto le distribuzioni che diamo in pasto al modello. Se sbagliamo gli input, otteniamo un output preciso nella forma ma falso nella sostanza — la classica spazzatura dentro, spazzatura fuori.


Per approfondire

Se vuoi approfondire il metodo Monte Carlo e le sue applicazioni nel mondo finanziario, Monte Carlo Methods in Financial Engineering di Paul Glasserman è il riferimento più completo: copre dalla teoria alla pratica con esempi dettagliati nel pricing di derivati e nella gestione del rischio. Per il versante più divulgativo — l’idea che una buona previsione sia una distribuzione di scenari e non un numero secco — Il segnale e il rumore di Nate Silver è una lettura eccellente sul ragionamento probabilistico applicato alle previsioni.

paolo

Recent Posts

Clustering delle keyword: raggruppare migliaia di query con K-means e clustering gerarchico

Capita spesso che si esporti l'elenco delle keyword da Search Console o da un tool,…

3 mesi ago

CTR atteso vs reale: trovare le pagine che rendono meno della loro posizione

Chi passa le giornate dentro Search Console conosce bene una situazione di questo tipo: una…

3 mesi ago

Naive Bayes: classificare l’intento delle query con il teorema di Bayes

Nell'articolo sul multi-armed bandit abbiamo usato Bayes per decidere fra varianti: spostare il traffico verso…

3 mesi ago

Multi-armed bandit: ottimizzare le varianti mentre il test è ancora in corso

Nell'articolo sull'A/B test bayesiano abbiamo confrontato due varianti a campione fisso: si raccolgono i dati…

3 mesi ago

A/B test bayesiano: non solo “se” B è meglio di A, ma “di quanto”

Abbiamo avuto modo di esaminare, nell'articolo sull'A/B testing classico, come confrontare due varianti con il…

3 mesi ago

Stima bayesiana di un conversion rate: quanto possiamo fidarci dei pochi dati che abbiamo

Abbiamo avuto modo di esaminare, nell'articolo sulle fondamenta della statistica bayesiana, come l'aggiornamento bayesiano funzioni…

3 mesi ago