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?

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.

Concetti preliminari di base

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.

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.

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.

Il metodo Monte Carlo in azione

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.

Esempi pratici: stima di π e portafoglio azionario

Esempio 1: stimare il valore di π

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.

Calcoliamo 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.13956

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.14268

Con 100.000 punti otteniamo già una stima ragionevole, ma non precisissima: siamo alla seconda cifra decimale. Come dicevamo, per ottenere 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: stima del rendimento di un portafoglio azionario

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%. Simuliamo 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.4504

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.4479

Il risultato ci dice che c’è circa il 45% di probabilità di superare il 10% di rendimento. Notiamo come il Monte Carlo ci restituisca non un singolo numero, ma un’intera distribuzione: potremmo facilmente calcolare anche il rendimento mediano, il peggior scenario al 5° percentile, la probabilità di perdita, e così via.

Simulatore Monte Carlo

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 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 è:

S(t+1) = S(t) × exp((μ − σ²/2) + σ × Z)

dove μ è il rendimento atteso annuo (la “crescita media”), σ è la volatilità (quanto il prezzo oscilla, la nostra misura di incertezza), 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. L’istogramma mostra la distribuzione di tutti i possibili risultati.

Applicazioni moderne del metodo 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

I vantaggi e i limiti del metodo Monte Carlo

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:

Convergenza lenta. Il tasso 1/√n significa che per guadagnare una cifra di precisione servono 100 volte più simulazioni. Per problemi che richiedono altissima precisione, questo può essere proibitivo.

Costo computazionale. Per problemi complessi (molte variabili, modelli pesanti), ogni singola simulazione può richiedere tempo significativo. Moltiplicato per migliaia o milioni di iterazioni, il costo diventa considerevole.

Per mitigare questi limiti, 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.


Per approfondire

Se si desidera 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.

paolo

Recent Posts

Calcolatore Sample Size per A/B Test

Una delle domande più ricorrenti quando si progetta un A/B test è: quanti utenti mi…

1 settimana ago

Anomaly detection: come identificare valori anomali nei dati

Tre metodi statistici per identificare valori anomali nei dati: z-score, IQR di Tukey e test…

3 settimane ago

Statistica bayesiana: come imparare dai dati, un passo alla volta

Abbiamo avuto modo di esaminare, nel corso dei precedenti articoli, l'inferenza statistica da una prospettiva…

3 settimane ago

A/B Testing: come condurre esperimenti statisticamente validi (e gli errori da evitare)

Abbiamo avuto modo di esaminare, nel corso dei precedenti articoli, come funziona il test delle…

3 settimane ago

Il Teorema del Limite Centrale: perché la statistica funziona (anche quando i dati non sono normali)

Abbiamo avuto modo di esaminare, nel corso dei precedenti articoli, la distribuzione normale e le…

3 settimane ago

Intervalli di confidenza: cosa sono, come calcolarli (e cosa NON significano)

Abbiamo avuto modo di esaminare, nel corso dei precedenti articoli, come funziona il test delle…

4 settimane ago