Nel 1847, il matematico francese Augustin-Louis Cauchy stava lavorando su calcoli astronomici, quando ideò un metodo comune di ottimizzazione ora noto come discesa del gradiente. Oggi la maggior parte dei programmi di machine learning si basa su questa tecnica, e anche altri campi la usano per analizzare dati e risolvere problemi ingegneristici.
Leggi tutto “La Discesa del Gradiente: un nuovo studio mette in discussione un assunto base sull’ottimizzazione”Categoria: 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:
| Azione | Rendimento atteso | Deviazione standard | Peso nel portafoglio |
|---|---|---|---|
| A | 8% | 12% | 40% |
| B | 10% | 15% | 30% |
| C | 12% | 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.
| Campo | Esempio | Cosa si simula |
|---|---|---|
| Cinema/3D | Path tracing (Pixar) | Percorsi dei raggi di luce |
| Finanza | Value at Risk | Scenari di mercato |
| Farmaceutica | Docking molecolare | Configurazioni spaziali |
| Clima | Modelli IPCC | Combinazioni di parametri |
| AI | AlphaGo (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.
La distribuzione binomiale negativa (o distribuzione di Pascal)
La distribuzione binomiale negativa descrive il numero di prove necessarie per ottenere un certo numero di successi in una serie di prove indipendenti. Ad esempio, potrebbe essere utilizzata per calcolare la probabilità di ottenere tre teste lanciando una moneta 5 volte, supponendo che la moneta sia bilanciata e quindi che a ogni lancio la probabilità di ottenere una testa sia del 50%.
La distribuzione binomiale negativa è utile in molti campi, tra cui la statistica, l’economia, la biologia e la fisica. E anche nella “nostra” SEO.
Leggi tutto “La distribuzione binomiale negativa (o distribuzione di Pascal)”I primi passi nel mondo della probabilità: spazio campionario, eventi, permutazioni e combinazioni
La probabilità e la combinatoria sono due concetti fondamentali nella matematica e nella statistica, che ci aiutano a comprendere e a interpretare molti fenomeni della vita quotidiana. In questo post introduttivo”sfioriamo” insieme i concetti principali vedendo come possano essere applicati in diversi contesti.
Leggi tutto “I primi passi nel mondo della probabilità: spazio campionario, eventi, permutazioni e combinazioni”Regressione Logistica: prevedere il risultato di un evento
La regressione logistica è un modello statistico utilizzato per prevedere la probabilità di un evento in base a un insieme di variabili indipendenti.
E’ particolarmente utile quando si vuole classificare un evento come appartenente o meno ad una determinata categoria (ad esempio, un cliente che acquisterà o meno un prodotto, un paziente che svilupperà o meno una malattia).
Si tratta di un algoritmo di Apprendimento Automatico Supervisionato che può essere utilizzato per modellare la probabilità di una determinata classe o evento. Viene utilizzato quando i dati sono linearmente separabili – cioè se esiste una linea o un piano che possono essere utilizzati per separare i dati in diverse classi in modo univoco – e l’esito è binario o dicotomico.
Ciò significa che la regressione logistica viene solitamente utilizzata per problemi di classificazione binaria (Sì/No, Corretto/Sbagliato, Vero/Falso, ecc.),
Nel corso di questo post mostrerò come eseguire una regressione logistica binomiale per creare un modello di classificazione, al fine di prevedere risposte binarie su un determinato insieme di predittori.
Leggi tutto “Regressione Logistica: prevedere il risultato di un evento”