Introduzione al metodo monte carlo

2,676 views
2,410 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,676
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
86
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Introduzione al metodo monte carlo

  1. 1. Giovanni Della Lunga Dipartimento di Chimica Centro Interdipartimentale per lo Studio dei Sistemi Complessi Università degli Studi di Siena Introduzione al metodo Monte Carlo Concetti di Base e Applicazioni Finanziarie
  2. 2. INDICE* _______________________________________________ 1 Richiami di Teoria delle Probabilità.................................................................................................1 1.1 Definizioni....................................................................................................................................1 1.2 Variabili Aleatorie e Funzioni di Distribuzione ...........................................................................2 1.3 Momenti .......................................................................................................................................4 1.4 Distribuzioni Discrete ............................................................................................................8 1.5 1.6 1.7 Distribuzioni Continue.........................................................................................................12 Covarianza e Correlazione..........................................................................................................23 Che cos’è un Processo Stocastico...............................................................................................23 2 La Simulazione Monte Carlo...........................................................................................................25 2.1 Simulazione Monte Carlo e Integrazione Numerica...................................................................29 3 Generatori di Numeri Casuali .........................................................................................................33 3.1 Tre tipi di generatori...................................................................................................................33 3.2 3.3 3.4 4 Il generatore Lineare Congruente..........................................................................................34 Le funzioni Rnd() e Randomize()...............................................................................................35 Test statistici sui generatori di numeri casuali ......................................................................37 Generazione di Distribuzioni non Uniformi...................................................................................41 4.1 Il Transformation Method ..........................................................................................................41 4.1.1 Utilizzo delle funzioni del foglio di lavoro di Microsoft Excel in Visual Basic.................42 4.1.2 Come Simulare una variabile distribuita Normalmente ...............................................43 4.2 Il Rejection Method..............................................................................................................48 4.4 4.5 4.6 5 La simulazione di un processo di Wiener ............................................................................45 4.3 Generazione di variabili con correlazione assegnata ............................................................49 Come adattare una distribuzione non normale univariata ai dati empirici..................................51 Appendice A - Il condizionamento della matrice di covarianza .................................................53 La Valutazione dei Titoli Derivati...................................................................................................55 5.1 La stima del prezzo ...............................................................................................................55 5.2 La stima delle sensitività.......................................................................................................57 5.2.1 Approssimazione basata sulle differenze finite ..................................................................57 5.2.2 Stime dirette........................................................................................................................60 5.3 Un cenno alle problematiche dei derivati di tipo americano ......................................................62 5.4 Appendice A - Funzioni VB per la simulazione del Delta .........................................................64 6 La stima del Value-at-Risk ..............................................................................................................67 6.1 Le problematiche ........................................................................................................................67 6.2 Il rischio di mercato....................................................................................................................68 6.2.1 La rivalutazione parametrica del portafoglio......................................................................69 7 Metodi di riduzione della varianza .................................................................................................71 7.1 Introduzione................................................................................................................................71 7.2 7.3 * Il metodo delle variabili antitetiche.......................................................................................72 Il metodo della variabile di controllo ....................................................................................74 I paragrafi preceduti dal simbolo contengono argomenti sviluppati anche nelle cartelle Excel che accompagnano il testo.
  3. 3. Indice ii 7.3.1 Un esempio pratico: il pricing di un’opzione asiatica.........................................................75 7.4 Moment Matching ......................................................................................................................78 7.5 Importance Sampling..................................................................................................................79 7.5.1 Importance Sampling e stima del VaR per portafogli contenenti opzioni ..........................80 7.6 Campionatura uniforme..............................................................................................................83 7.6.1 Il Campionamento Stratificato ......................................................................................83 7.6.2 Il metodo dell’Ipercubo Latino .....................................................................................85 7.6.3 Le Sequenze a Bassa Discrepanza ................................................................................86 La sequenza di Halton ....................................................................................................................89 La sequenza di Faure ......................................................................................................................90 7.6.4 Metodi misti e decomposizione spettrale per problemi ad alta dimensionalità ..................91 7.7 Appendice A - Deduzione della formula (5.9) ...........................................................................92 BIBLIOGRAFIA........................................................................................................................... 97
  4. 4. 1 Richiami di Teoria delle Probabilità Possibile, ma non interessante – rispose Lönnrot -. Lei dirà che la realtà non ha il minimo obbligo di essere interessante. Io replicherò che se la realtà può sottrarsi a quest’obbligo, non possono sottrarvisi le ipotesi. Jorge Luis Borges, “La morte e la bussola” 1.1 Definizioni In questo paragrafo passeremo in rassegna i concetti del Calcolo delle Probabilità e della Teoria delle Distribuzioni. Naturalmente questa presentazione è ben lungi dall’essere completa e vuol soltanto essere di sussidio al lettore raccogliendo in maniera sintetica i principali strumenti indispensabili per la comprensione dei modelli di pricing di prodotti derivati e, più in generale, dei modelli di simulazione stocastica utilizzati in tale settore. Ogni tentativo di dare una definizione rigorosa dei concetti probabilistici più elementari si trova di fronte ad un problema; infatti, non solo esistono differenti formalizzazioni e assiomatizzazioni della probabilità ma a queste corrispondono, in generale, molteplici nozioni intuitive di probabilità spesso assai diverse fra loro. Con queste parole di avviso iniziamo a definire i principali concetti della teoria delle probabilità rinviando il lettore in cerca di formalizzazioni rigorose a testi specifici. Al di la delle differenze di carattere formale un elemento comune posseduto da tutte le forme di probabilità riguarda il suo significato intuitivo di valutazione della possibilità che un dato evento possa accadere o meno. Sia nelle scienze naturali sia in quelle economiche si è soliti assumere che un certo evento sia il risultato di un ipotetico esperimento intendendo con questo termine l’insieme di tutte “le azioni e le condizioni ambientali che conducono al determinarsi di un fatto1”. E’ un esperimento la misura di una grandezza fisica, il lancio di un dado o di una moneta, il verificarsi o meno di un particolare stato di natura (es. l’indice MIB30 supera il livello 50.000). Indicheremo con ω un particolare stato di natura esito di un dato esperimento e con Ω l’insieme di tutti gli stati possibili (spazio campione). Il concetto di evento é associato al verificarsi di uno o più stati di natura, esso verrà pertanto rappresentato come sottoinsieme di Ω. Lo spazio degli eventi, A, è quindi una famiglia di sottoinsiemi di Ω caratterizzata dalle seguenti proprietà: 1. Ω ∈ A; 2. se l’evento ω ∈ F allora anche il suo complemento Ω - ω ∈ A; 3. se ωn ∈ A, allora U ωn ∈ A n 1 O. Lessi “Corso di Probabilità”, pag. 21, Metria, 1993.
  5. 5. 2 Introduzione al metodo Monte Carlo Una famiglia di sottoinsiemi che soddisfa a queste proprietà viene chiamata σ-algebra. Diremo quindi che A è una σ-algebra di Ω. Definiamo funzione di probabilità una funzione P a valori reali che soddisfa le seguenti proprietà: 1. P(ω ) ≥ 0, ∀ω ∈ A ; 2. P(Ω) = 1 ; ∞  ∞ 3. P U ω n  = ∑ P (ω n )    n =1  n =1 se gli ωn sono a due a due disgiunti cioè se ω i ∩ ω j = ∅ per ogni i ≠ j . Osserviamo che una funzione di probabilità così definita è anche una misura. La terna (Ω, A , P) viene detta spazio di probabilità. Esempio 1.1 – Consideriamo il caso di un indice azionario, ad esempio il MIB30, il cui valore in un dato intervallo di tempo possa solo aumentare o diminuire di una quantità assegnata (naturalmente si tratta di una schematizzazione). Indicando con u l’evento corrispondente all’aumento dell’indice e con d l’evento contrario, possiamo scrivere: Ω = { u, d } A = { Ω, ∅, { u}, { d }} Esempio 1.2 – Anche se questi sono solo dei brevi richiami non possiamo non citare l’esperimento aleatorio per antonomasia: il lancio di un dado. In questo caso lo spazio campione è formato dall’insieme dei sei numeri che possono risultare dal lancio stesso Ω = {1, 2, 3, 4, 5, 6} Vediamo il significato di alcuni elementi di A: l’elemento ω1 = {1,2} corrisponde all’evento “il numero risultante dal lancio è minore o uguale a 2”, ω 2 = {1,3,5} corrisponde a “il numero risultante è dispari”, ω 3 = { 2,4,6} rappresenta l’evento “il numero uscente è pari”. 1.2 Variabili Aleatorie e Funzioni di Distribuzione Dato uno spazio di probabilità, una variabile aleatoria o casuale viene definita come una funzione X : Ω → ℜ tale che per ogni numero reale r si abbia { ω ∈ Ω : X (ω ) ≤ r}∈ A. La funzione FX (x ) = P ( X ≤ x ) = P ({ ω ∈ Ω : X (ω ) ≤ x}) , definita sull’insieme dei numeri reali, viene detta funzione di distribuzione cumulata o, più semplicemente, funzione di distribuzione. Esempio 1.3 – Con riferimento all’Esempio 1.1 sia X una funzione così definita X(u) = 0
  6. 6. Introduzione al metodo Monte Carlo 3 X(d) = 1 La funzione X è una variabile aleatoria in quanto { ω : X (ω ) ≤ r} = ∅ { ω : X (ω ) ≤ r} = { a} { ω : X (ω ) ≤ r} = Ω r<0 0 ≤ r <1 r ≤1 Esempio 1.4 – Supponiamo che la variabile definita nell’esempio precedente assuma il valore 0 con probabilità p1 e 1 con probabilità p2 = 1 – p1. La funzione di distribuzione di questa variabile è data da x<0 0 :  FX ( x ) =  p1 : 0 ≤ x < 1 1 : 1≤ x  La funzione indicatrice di un evento A, IA, definita come 0 : ω ∉ A I A (ω ) =  1 : ω ∈ A è un tipico esempio di funzione a due valori con p1 = P(A). Una variabile aleatoria è detta discreta se l’insieme dei valori che può assumere è numerabile. Sia (Ω, A , P) uno spazio di probabilità e X una variabile aleatoria discreta che può assumere i valori x1 , x2 , K , x k , K Definiamo la funzione di probabilità come  P( X = x ) : se x = xi , per qualche i = 1,2,.... f X ( x) =  : altrimenti 0 (1.1) La funzione di probabilità e la funzione di distribuzione sono legate dalla relazione: FX ( x ) = ∑f xi ≤ x X ( xi ) (1.2) Una variabile aleatoria X è detta continua se esiste una funzione reale fX tale che per ogni x reale sia soddisfatta la relazione x FX ( x ) = ∫f X ( y )dy (1.3) −∞ nei punti in cui la funzione di distribuzione è derivabile vale anche la relazione inversa
  7. 7. 4 Introduzione al metodo Monte Carlo f X ( x) = dFX ( x ) dx (1.4) La funzione f(x) in questo caso viene detta funzione densità di probabilità (o semplicemente funzione densità). 1.3 Momenti Il valor medio o valore di aspettazione di X, che indicheremo con µ X , è definito come µ X = E [ X ] = ∑ xi f X ( xi ) (1.5) i In generale si definisce momento dall’origine (o momento grezzo) di ordine r, e si r indica µ X , la media della variabile aleatoria Xr. La definizione è naturalmente 2 applicabile solo nel caso in cui tale media sia finita. La varianza di X, indicata con σ X , è la media degli scarti quadratici rispetto alla media µ X e rappresenta una misura di dispersione di X. La sua radice quadrata è detta deviazione standard. La varianza è definita da 2 σ X = ∑ ( xi − µ X )2 f X ( xi ) (1.6) i da cui è immediato ricavare 2 σ X = E [X 2 ] − (E [X ])2 (1.7) Un ruolo molto importante è rivestito dalla cosiddetta funzione generatrice dei momenti: [ ] 1 1   m X (t ) = E e tX = E 1 + Xt + ( Xt ) 2 + ( Xt ) 3 + K = 2 3!   1 2 1 i = 1 + µX t + µX t2 + K = ∑ µX ti 2 i i! (1.8) dove abbiamo utilizzato lo sviluppo in serie della funzione esponenziale. E’ estremamente semplice verificare che 2 µX = dr mX dt r (1.9) t =0 Si possono facilmente generalizzare al caso continuo i risultati per le distribuzioni discrete, il valore di aspettazione sarà pertanto definito come
  8. 8. Introduzione al metodo Monte Carlo 5 +∞ E[ X ] = ∫ xf X (1.10) ( x )dx −∞ in maniera analoga si generalizzano le definizioni di varianza e degli altri momenti. La funzione generatrice dei momenti gode delle stesse proprietà del caso discreto. Un problema che citiamo solo per completezza ma che non può essere affrontato in questo testo è quello relativo alla stima dei parametri statistici. Nel seguito vedremo alcune formule (presenteremo quelle impiegate da Excel) che permettono di stimare il valore di uno o più momenti a partire da un campione di dati. Occorre sempre ricordare che campioni diversi forniscono stime diverse del parametro di riferimento. La stima di un parametro statistico non restituisce il valore esatto del parametro del campione, quanto una variabile casuale, dotata di una propria distribuzione di probabilità: la distribuzione di probabilità delle stime dei parametri è nota in statistica come distribuzione campionaria. Ci limitiamo a ricordare che per avere stime non distorte è necessario che il valore di aspettazione dello stimatore sia uguale al parametro stimato. Excel dispone di numerose funzioni per l’analisi statistica dei dati (vedi Tabella 1.1). Fra queste vi sono una serie di funzioni per il calcolo dei momenti che vale la pena descrivere in maggior dettaglio. Tabella 1.1 – Le funzioni statistiche di Excel MEDIA.DEV MEDIA MEDIA.VALORI DISTRIB.BETA INV.BETA DISTRIB.BINOM DISTRIB.CHI INV.CHI TEST.CHI CONFIDENZA CORRELAZIONE CONTA.NUMERI CONTA.VALORI COVARIANZA CRIT.BINOM Restituisce la media delle deviazioni assolute dei valori rispetto alla loro media Restituisce la media degli argomenti Restituisce la media degli argomenti, inclusi i numeri, il testo e i valori logici Calcola la funzione densità di probabilità cumulativa beta Calcola l'inverso della funzione densità di probabilità cumulativa beta Restituisce la distribuzione binomiale per il termine individuale Restituisce la probabilità ad una coda per la distribuzione del chi quadrato Restituisce l'inverso della probabilità ad una coda per la distribuzione del chi quadrato Restituisce il test per l'indipendenza Restituisce l'intervallo di confidenza per la popolazione Restituisce il coefficiente di correlazione tra due serie di dati Conta la quantità di numeri nell'elenco di argomenti Conta il numero di valori nell'elenco di argomenti Calcola la covarianza, la media dei prodotti delle deviazioni accoppiate Restituisce il più piccolo valore per il quale la distribuzione cumulativa binomiale risulta maggiore o uguale ad un valore di criterio DEV.Q Restituisce la somma dei quadrati delle deviazioni DISTRIB.EXP Restituisce la distribuzione esponenziale DISTRIB.F Restituisce la distribuzione di probabilità F INV.F Restituisce l'inverso della distribuzione della probabilità F FISHER Restituisce la trasformazione di Fisher INV.FISHER Restituisce l'inverso della trasformazione di Fisher PREVISIONE Restituisce i valori lungo una tendenza lineare FREQUENZA Restituisce la distribuzione di frequenza come matrice verticale TEST.F Restituisce il risultato di un test F DISTRIB.GAMMA Restituisce la distribuzione gamma GAMMAINV Restituisce l'inverso della distribuzione cumulativa gamma LN.GAMMA Restituisce il logaritmo naturale della funzione gamma, Γ(x) MEDIA.GEOMETRICA Restituisce la media geometrica CRESCITA Restituisce i valori lungo una linea di tendenza esponenziale MEDIA.ARMONICA Restituisce la media armonica DISTRIB.IPERGEOM Restituisce la distribuzione ipergeometrica INTERCETTA Restituisce l'intercetta della retta di regressione lineare CURTOSI Restituisce la curtosi di un insieme di dati
  9. 9. 6 Introduzione al metodo Monte Carlo GRANDE REGR.LIN REGR.LOG INV.LOGNORM Restituisce il k-esimo valore più grande in un insieme di dati Restituisce i parametri di una tendenza lineare Restituisce i parametri di una linea di tendenza esponenziale Restituisce l'inverso di una distribuzione lognormale DISTRIB.LOGNORM Restituisce la distribuzione lognormale cumulativa MAX Restituisce il valore massimo in un elenco di argomenti MAX.VALORI Restituisce il valore massimo in un elenco di argomenti, inclusi i numeri, il testo e i valori logici MEDIANA Restituisce la mediana dei numeri specificati MIN Restituisce il valore minimo in un elenco di argomenti MIN.VALORI Restituisce il più piccolo valore in un elenco di argomenti, inclusi i numeri, il testo e i valori logici MODA Restituisce il valore più comune in un insieme di dati DISTRIB.BINOM.NEG Restituisce la distribuzione binomiale negativa DISTRIB.NORM Restituisce la distribuzione cumulativa normale INV.NOR Restituisce l'inverso della distribuzione cumulativa normale DISTRIB.NORM.ST Restituisce la distribuzione cumulativa normale standard INV.NORM.ST Restituisce l'inverso della distribuzione cumulativa normale standard PEARSON Restituisce il coefficiente del momento di correlazione di Pearson PERCENTILE Restituisce il k-esimo dato percentile di valori in un intervallo PERCENT.RANGO Restituisce il rango di un valore in un insieme di dati come percentuale PERMUTAZIONE Restituisce il numero delle permutazioni per un determinato numero di oggetti POISSON Restituisce la distribuzione di Poisson PROBABILITÀ Calcola la probabilità che dei valori in un intervallo siano compresi tra due limiti QUARTILE Restituisce il quartile di un insieme di dati RANGO Restituisce il rango di un numero in un elenco di numeri RQ Restituisce la radice quadrata del coefficiente di momento di correlazione di Pearson ASIMMETRIA Restituisce il grado di asimmetria di una distribuzione PENDENZA Restituisce la pendenza di una retta di regressione lineare PICCOLO Restituisce il k-esimo valore più piccolo in un insieme di dati NORMALIZZA Restituisce un valore normalizzato DEV.ST Restituisce una stima della deviazione standard sulla base di un campione DEV.ST.VALORI Restituisce una stima della deviazione standard sulla base di un campione, inclusi i numeri, il testo e i valori logici DEV.ST.POP Calcola la deviazione standard sulla base di un'intera popolazione DEV.ST.POP.VALORI Calcola la deviazione standard sulla base sull'intera popolazione, inclusi i numeri, il testo e i valori logici ERR.STD.YX Restituisce l'errore standard del valore previsto per y per ciascun valore x nella regressione DISTRIB.T Restituisce la distribuzione t di Student INV.T Restituisce l'inversa della distribuzione t di Student TENDENZA Restituisce i valori lungo una linea di tendenza lineare MEDIA.TRONCATA Restituisce la media della parte interna di un insieme di dati TEST.T Restituisce la probabilità associata ad un test t di Student VAR Stima la varianza sulla base di un campione VAR.VALORI Stima la varianza sulla base di un campione, inclusi i numeri, il testo e i valori logici VAR.POP Calcola la varianza sulla base dell'intera popolazione VAR.POP.VALORI Calcola la varianza sulla base dell'intera popolazione, inclusi i numeri, il testo e i valori logici WEIBULL Restituisce la distribuzione di Weibull TEST.Z Restituisce il livello di significatività a due code per un test z In pratica vengono comunemente utilizzati i primi quattro momenti: • media • varianza • skewness (o asimmetria) • curtosi La funzione MEDIA()viene utilizzata per calcolare la media aritmetica di un insieme di valori. L’argomento di questa funzione deve indicare il blocco di celle che contiene i valori di cui calcolare il valor medio. Notate che le celle contenenti il valore 0 (zero) saranno incluse nel calcolo della media mentre le celle vuote (senza alcun dato) restano escluse da questo calcolo.
  10. 10. Introduzione al metodo Monte Carlo 7 La varianza può essere calcolata tramite la funzione VAR(). Anche questa funzione prende come argomento il blocco di celle contenente i dati di cui si desidera stimare la varianza. Lo stimatore utilizzato da Excel per il calcolo è il seguente  n  n ∑ x −  ∑ xi   i =1  s = i =1 n( n − 1) n 2 2 i (1.11) Il momento centrale di ordine 3 ci dà informazioni sul grado di asimmetria di una distribuzione attorno alla sua media ed è comunemente indicato col termine skewness. L'asimmetria positiva indica una distribuzione con una coda asimmetrica che si estende verso i valori più positivi. L'asimmetria negativa indica una distribuzione con una coda asimmetrica che si estende verso i valori più negativi. Excel mette a disposizione la funzione ASIMMETRIA() che utilizza il seguente stimatore n n x −x ∑ i s  ( n − 1)( n − 2) i =1   3 (1.12) in cui s è lo stimatore della standard deviation e x è il valor medio. Se esistono meno di tre valori o se la deviazione standard sulla base di un campione è uguale a zero, ASIMMETRIA() restituirà il valore di errore #DIV/0!. La relazione tra momento del terzo ordine e coefficiente di asimmetria, solitamente indicato con β1 = µ3 σ3 β1 , è data da (1.13) Valori positivi dell’asimmetria indicano che la distribuzione è asimmetrica per valori crescenti della variabile x (a destra) mentre un’asimmetria negativa sta ad indicare una distribuzione asimmetrica a sinistra. Infine CURTOSI() restituisce la curtosi, indicata con β 2 , di un insieme di dati. Essa è legata al momento centrale di ordine 4 dalla relazione β2 = µ4 σ4 (1.14) ed è caratteristica delle cosiddette “code grasse”. Lo stimatore utilizzato da Excel riporta in realtà la cosiddetta “curtosi in eccesso” ovvero la differenza fra β 2 e 3. Questo è dovuto al fatto che la distribuzione normale o gaussiana ha curtosi pari a 3 e questo indicatore viene spesso utilizzato come indice per comprendere quando la distribuzione di un insieme di dati si allontani dalla normalità.
  11. 11. 8 Introduzione al metodo Monte Carlo La formula utilizzata è 4 2 n  3(n − 1) n( n + 1)  xi − x    −   ∑  ( n − 1)( n − 2)( n − 3) i =1  s   ( n − 2)( n − 3)   (1.15) in cui s è lo stimatore della standard deviation e x è il valor medio. Se sono presenti meno di quattro dati o se la deviazione standard del campione è uguale a zero, CURTOSI() restituirà il valore di errore #DIV/0!. 1.4 Distribuzioni Discrete Vediamo ora alcune fra le più comuni funzioni di distribuzioni discrete. Il lettore può seguire la nostra analisi utilizzando il file “Richiami di Statistica 1.xls”. Distribuzione Uniforme Sia X una variabile aleatoria che assume valori nel dominio dei numeri naturali 1, 2, ... , n. Diremo che tale variabile ha una distribuzione uniforme se risulta 1 n : x = 1,2, K , n f X ( x ) = f X ( x, n ) =  : altrimenti 0 (1.16) Valor medio e varianza sono dati da: E[ X ] = 1 n ( n + 1)n n + 1 ∑ i = 2n = 2 n i =1 2 σ X = E [ X 2 ] − (E[ X ])2 = 1 n 2 ( n + 1) 2 n( n + 1)( 2n + 1) ( n + 1) 2 n 2 − 1 − = ∑i − 4 = 6 4 12 n i =1 (1.17) (1.18) Distribuzione Binomiale Dati n eventi indipendenti, tutti con uguale probabilità p, sia X la variabile casuale che conta il numero totale di eventi che si verificano fra quelli possibili. X ha una distribuzione binomiale con parametri n e p. La funzione di probabilità è f X (i ) = n! p i (1 − p ) n −i i! ( n − i )! per i = 0, 1, 2, ..., n (1.19)
  12. 12. Introduzione al metodo Monte Carlo 9 valor medio e varianza sono dati da E [X ] = np (1.20) 2 σ X = np(1 − p ) (1.21) Figura 1.1 – Funzione di Probabilità e Distribuzione Cumulata Binomiale per il caso n = 6 e p = 0.5 (le due figure differiscono solo nel formato grafico, il primo è quello predefinito prodotto da Excel tramite gli Strumenti di analisi, il secondo è ottenuto modificando la distanza fra le barre come spiegato nel testo) In Excel è possibile lavorare con la distribuzione binomiale tramite la funzione DISTRIB.BINOM() la cui sintassi è la seguente: DISTRIB.BINOM(num_successi; num_prove;probabilita_s;cumulativo) dove num_successi è il numero di successi in num_prove indipendenti, probabilita_s è la probabilità di successo per ciascuna prova e cumulativo è un valore logico che determina la forma assunta dalla funzione. Se il valore cumulativo è VERO, DISTRIB.BINOM restituirà la funzione distribuzione cumulata, ovvero la probabilità che venga restituito un numero massimo di successi pari al valore di num_successi. Se il valore cumulativo è FALSO, verrà restituita la funzione di probabilità. Esempio 1.5 - Il lancio di una moneta può produrre come risultato solo testa o croce. La probabilità che il primo lancio sia testa è uguale a 0,5, mentre la probabilità che esattamente sei lanci su dieci siano testa è espressa dalla formula: DISTRIB.BINOM(6;10;0;5;FALSO) che risulta pari a 0.205078
  13. 13. 10 Introduzione al metodo Monte Carlo Distribuzione di Poisson Esistono numerosi eventi che accadono nel tempo con cadenza del tutto irregolare. Il numero di telefonate in arrivo ad un centralino, il numero di clienti che si presentano allo sportello di un ufficio, il numero di auto che giungono ad un casello autostradale sono tutti chiari esempi di questo tipo di processi. Indichiamo con µ il numero medio di occorrenze nell’unità di tempo e supponiamo che siano soddisfatte le seguenti proprietà: 1. La probabilità di avere esattamente un’occorrenza in un intervallo di tempo dt di ampiezza trascurabile è µ dt a meno di infinitesimi di ordine superiore mentre la probabilità di avere più di un’occorrenza è trascurabile; 2. I numeri di occorrenze in intervalli temporali disgiunti sono indipendenti. Figura 1.2 – Funzione di Probabilità e Distribuzione Cumulata di Poisson per λ = 9 Consideriamo la variabile aleatoria X che rappresenta il numero di occorrenze in un dato intervallo (0, t ) . Dividiamo l’intervallo in n sotto-intervalli di ampiezza t / n. La probabilità di avere esattamente una occorrenza all’interno di uno di questi sottointervalli è per le ipotesi fatte pari a µ t / n; per la proprietà dell’indipendenza, e ricordando la definizione della distribuzione binomiale, otteniamo che la probabilità di k occorrenze è data da (a meno di infinitesimi di ordine superiore)
  14. 14. Introduzione al metodo Monte Carlo 11 k  n   µt   µt  P ( X = k ) =     1 −  k  n n     n −k n = n( n − 1) L ( n − k + 1) µt   µt   ( µt ) k 1 −  1 −  k k! n n  n  −k (1.22) Supponiamo ora che n tenda all’infinito, per le ipotesi fatte la probabilità di occorrenza all’interno di un intervallo µ dt tende a zero ma il prodotto nµ dt è pari ad una costante λ = µ t, otteniamo così la cosiddetta distribuzione di Poisson f X ( x ) = f X ( x; λ ) = e − λx λ x x! con x = 0, 1, 2, ... (1.23) Per il calcolo del valor medio e della varianza ricorreremo alla funzione generatrice dei momenti che, in questo caso, è data da t (e t λ ) k = e λ ( e −1) k! k =1 ∞ m X (t ) = e −λ ∑ (1.24) da cui si ricava facilmente t dm X (t ) = λe λ ( e −1)+t dt (1.25) t d 2 m X (t ) = λe λ ( e −1) + t ( λe t + 1) 2 dt (1.26) e quindi E [X ] = [ ] EX 2 dm X (0) =λ dt d 2 m X ( 0) = = λ ( λ + 1) dt 2 (1.27) (1.28) La varianza è pertanto pari a [ ] E X 2 − (E [X ]) = λ ( λ + 1) − λ2 = λ 2 (1.29) La media e la varianza di una distribuzione di Poisson coincidono e sono entrambe pari al parametro λ. In Excel è disponibile la funzione POISSON la cui sintassi è POISSON(x;media;cumulativo)
  15. 15. 12 Introduzione al metodo Monte Carlo dove x è il numero degli eventi, media è il valore numerico previsto e, come al solito, cumulativo è un valore logico che determina la forma per la distribuzione di probabilità. Se cumulativo è VERO, POISSON restituirà la probabilità cumula di Poisson indicante la probabilità che il numero degli eventi casuali sia compreso tra zero e x inclusi. Se cumulativo è FALSO, verrà restituita la funzione di probabilità di Poisson indicante la probabilità che il numero di eventi sia esattamente uguale a x. Distribuzioni Continue 1.5 Distribuzione Uniforme Diremo che una variabile aleatoria X è uniformemente distribuita nell’intervallo reale [a, b] se la sua funzione di distribuzione cumulata è data da 0 x −a FX ( x ) =  b − a 1 se x < a se a ≤ x ≤ b (1.30) se x > b a cui corrisponde una funzione densità di probabilità data da 0  1 f X ( x) =  b − a 0 se x < a se a ≤ x ≤ b (1.31) se x > b La funzione generatrice dei momenti, il valore di aspettazione e la varianza sono semplicemente calcolabili b m X (t ) = ∫ e tx a 1 e bt − e at dx = ( b − a )t b−a (1.32) b b+a x dx = b−a 2 a E[ X ] = ∫ (1.33) (b − a ) x2 b+a dx −   = b−a 12  2  a b 2 σ X = E[ X 2 ] − (E[ X ])2 = ∫ 2 2 (1.34) Come vedremo la distribuzione uniforme gioca un ruolo particolarmente importante nei metodi di simulazione in quando per generare le diverse distribuzioni si parte usualmente da generatori di variabili casuali uniformi. Excel mette a disposizione la funzione CASUALE() che restituisce un numero aleatorio distribuito in maniera uniforme nell’intervallo [0, 1) (si noti che i numeri prodotti sono strettamente minori di
  16. 16. Introduzione al metodo Monte Carlo 13 1). Ogni volta che si effettua un calcolo nel foglio di lavoro viene restituito un nuovo numero casuale. Se si desidera utilizzare CASUALE per creare un numero casuale senza che i numeri vengano modificati ogni volta che si esegue il calcolo della cella, è possibile immettere = CASUALE() nella barra della formula e premere F9 per convertire la formula in un numero casuale. Per creare un numero reale casuale compreso tra a e b, occorre inserire la formula seguente: = CASUALE()*(b - a) + a Sebbene le informazioni derivanti dai momenti forniscano essenziali dettagli su un insieme di dati, spesso è più comodo rappresentare questi ultimi in modo da illustrare come i valori sono distribuiti all’interno del loro dominio. Un tipo di rappresentazione che si presta particolarmente bene a questo tipo di indagine è il cosiddetto istogramma o diagramma delle frequenze relative. Il primo passo per la creazione di un istogramma è la suddivisione dell’insieme dei dati in una serie di intervalli adiacenti della stessa ampiezza (questi intervalli sono anche chiamati Intervalli delle classi). Il primo intervallo deve iniziare da un valore minore o uguale al minimo valore presente nell’insieme dei dati e l’ultimo intervallo deve, ovviamente, estendersi oltre il limite superiore dei valori dell’insieme stesso. In Excel gli istogrammi possono essere costruiti molto facilmente utilizzando la funzione Istogramma del pacchetto degli Strumenti di Analisi. Per installare questi strumenti, selezionate Componenti Aggiuntivi dal menu Strumenti; nella finestra di dialogo che viene aperta selezionate le caselle Strumenti di Analisi e Strumenti di Analisi VBA (vedi Figura 1.3). Utilizzeremo un istogramma per analizzare il generatore di numeri casuali di Excel. Se la serie dei numeri casuali è realmente distribuita uniformemente si avrà un numero pressoché uguale di numeri “casuali” in ognuno degli intervalli. Aprite una cartella di lavoro e nella cella A1 inserite la formula = CASUALE(), premete INVIO e vedrete apparire nella cella stessa un numero reale compreso fra 0 e 1. In un’altra riga è necessario introdurre gli estremi superiori degli intervalli delle classi, l’ultimo intervallo viene considerato aperto nel senso che può contenere tutti i valori che superano il limite massimo. Copiate la formula nelle prime 1000 righe del foglio di lavoro e definite gli intervalli delle classi in modo da suddividere l’intervallo [0,1] in 25 classi equispaziate e adiacenti (vedi Figura 1.4). Notate che nella definizione degli intervalli delle classi è necessario introdurre soltanto l’estremo superiore dell’intervallo, per cui nel primo cadranno tutte le occorrenze comprese fra 0 e 0.04, nel secondo quelle comprese fra 0.04 e 0.08 e così via. A questo punto selezionate Analisi Dati dal menu Strumenti (Figura 1.5). Scegliete la voce Istogramma ed inserite le informazioni richieste nella finestra dialogo risultante (Figura 1.6). In particolare è necessario specificare i blocchi di celle che contengono i dati (casella Intervallo di input) e gli estremi degli intervalli (casella Intervallo della classe). Le due caselle di input sono degli oggetti di tipo RefEdit. Il controllo RefEdit è uno strumento estremamente interessante per i programmatori in Visual Basic per Excel per cui vale la pena spendere due parole di descrizione.
  17. 17. 14 Introduzione al metodo Monte Carlo Figura 1.3 – La casella dei componenti aggiuntivi Figura 1.4 – Valori della variabile aleatoria (colonna A) e classi dell’istogramma (colonna B) Questo controllo permette all’utente di inserire un riferimento ad una o più celle utilizzando il mouse. Quando l’utente preme il pulsante alla destra del componente RefEdit, la finestra viene nascosta e ne appare un’altra che permette di accedere al foglio e selezionare una cella o un insieme di celle: i riferimenti di tale selezione vengono copiati nella nuova finestra. Al termine di questa operazione l’utente deve premere INVIO o premere di nuovo il pulsante della casella, la finestra temporanea di
  18. 18. Introduzione al metodo Monte Carlo 15 input si chiude ripristinando quella originaria. All’interno del controllo RefEdit che era stato attivato compariranno così i riferimenti scelti dall’utente. Figura 1.5 – La finestra di dialogo Analisi Dati Figura 1.6 – La finestra di dialogo per la costruzione di un istogramma Se l’istogramma deve essere inserito nel foglio corrente attivate l’opzione Intervallo di output e digitate l’indirizzo della cella dell’angolo superiore sinistro del blocco che dovrà contenere i dati di output. Dopo aver specificato le informazioni richieste premete il pulsante OK ed Excel creerà automaticamente la tabella delle frequenze. I valori presenti in questa colonna sono numeri interi, possiamo creare una colonna delle frequenze relative dividendo questi valori per il numero totale di dati. Qualora si voglia ottenere il grafico occorre anche selezionare la casella Grafico in output (vedi FIgura 1.7). Prestate attenzione al fatto che le etichette numeriche rappresentate sotto ogni intervallo nel grafico corrispondono ai limiti superiori degli intervalli e non agli intervalli stessi. Inoltre poiché le barre verticali dell’istogramma corrispondono ad intervalli contigui può essere meglio scegliere una rappresentazione grafica in cui le barre siano disposte una accanto all’altra senza spazi intermedi. Per apportare questa modifica è sufficiente fare clic con il tasto destro del mouse su una barra verticale qualsiasi del grafico e scegliere Serie dei dati selezionati/Opzioni dal menu Formato; impostate a 0 il campo Distanza fra le barre. L’utilizzo di uno strumento di analisi come l’istogramma è
  19. 19. 16 Introduzione al metodo Monte Carlo estremamente utile in vari contesti per cui può essere comodo disporre del codice VBA per gestirlo da programma. Per questo risulta di grande utilità il registratore di macro che abbiamo presentato nel primo capitolo. Nel seguente riquadro trovate il codice prodotto automaticamente dal registratore all’interno di una macro realizzata durante la creazione di un istogramma. Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range("$A$1:$B$1000") _ , ActiveSheet.Range("$D$1"), ActiveSheet.Range("$B$1:$B$25"), False, False _ , True, False Figura 1.7 – Istogramma ottenuto generando 1000 numeri casuali col generatore di Excel I dati sono quelli dell’esempio riportato in Figura 1.7. Prima di tutto osserviamo che questo comando è in realtà una chiamata ad una funzione, precisamente al metodo Run dell’oggetto Application che corrisponde ad Excel. Il metodo Run esegue una macro o richiama una funzione e può essere utilizzato per eseguire una macro scritta in linguaggio Visual Basic, segue una lista di argomenti di cui tipicamente il primo rappresenta il nome della funzione da eseguire mentre gli altri rappresentano i parametri da passare alla funzione. Selezionando gli strumenti di analisi vengono caricate due aggiunte di Excel che contengono i riferimenti necessari per poter utilizzare da VB le rispettive funzionalità. In uno di questi, ATPVBAEN.XLA, è presente la subroutine Histogram che permette la realizzazione di un istogramma; si noti che per lanciare una qualunque macro presente in un aggiunta occorre far precedere il nome della macro dal nome del file in cui essa si trova separato dal simbolo “!”. I parametri successivi sono relativi a tre intervalli di celle e a quattro variabili logiche che caratterizzano altrettante opzioni. I parametri di tipo Range hanno il seguente significato:
  20. 20. Introduzione al metodo Monte Carlo 17 1. intevallo di input dei dati; 2. intervallo di output della tabella delle frequenze (notate che è sufficiente in questo caso indicare la cella corrispondente all’angolo superiore sinistro del range); 3. intervalli delle classi. Le quattro variabili logiche corrispondono alle opzioni che è possibile selezionare dalla finestra di dialogo dell’istogramma (se le variabili vengono impostate al valore VERO la corrispondente opzione risulta selezionata): 1. 2. 3. 4. opzione Pareto (istogramma ordinato); opzione percentuale cumulativa; opzione grafico in output; indica se le prime righe dei blocchi di dati in input contengono delle etichette. Se provate a registrare alcune macro selezionando diverse modalità di presentazione dei risultati in output troverete che quando l’intervallo di output viene posto uguale a “” (stringa vuota) la tabella delle frequenze (ed eventualmente il grafico) vengono riportati su un nuovo foglio di lavoro della stessa cartella. Se scegliete di riportare i risultati dell’istogramma su una nuova cartella di lavoro il parametro relativo all’intervallo di output viene invece omesso del tutto. Nel riquadro seguente abbiamo riportato il codice di una semplice subroutine che, a partire dal codice prodotto dal registratore di macro, permette di gestire completamente da VBA la realizzazione di un istogramma. Sub Istogramma(ClassRange As String, _ InputRange As String, _ Optional OutputRange As Variant, _ Optional flgPareto As Boolean = False, _ Optional flgCumulata As Boolean = False, _ Optional flgGrafico As Boolean = False, _ Optional flgEtichette As Boolean = False) If IsMissing(OutputRange) Then Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range(InputRange) _ , , ActiveSheet.Range(ClassRange), _ flgPareto, flgCumulata, flgGrafico, flgEtichette ElseIf Len(OutputRange) = 0 Then Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range(InputRange) _ , "", ActiveSheet.Range(ClassRange), _ flgPareto, flgCumulata, flgGrafico, flgEtichette Else Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range(InputRange) _ , ActiveSheet.Range(OutputRange), ActiveSheet.Range(ClassRange) _ , flgPareto, flgCumulata, flgGrafico, flgEtichette End If End Sub Si noti che tutti i parametri tranne i primi due sono opzionali; inoltre, poiché dobbiamo essere in grado di controllare se il parametro OutputRange viene passato o meno alla procedura tramite la funzione IsMissing(), è necessario definirlo di tipo Variant. Per evitare che ogni operazione condotta sul foglio produca il ricalcolo dell’intera
  21. 21. 18 Introduzione al metodo Monte Carlo colonna di numeri casuali, abbiate cura di deselezionare l’opzione calcolo automatico tramite la voce Opzioni del menu Strumenti (vedi Figura 1.8). Figura 1.8 – La finestra Opzioni attivabile dal menu Strumenti Nel file “Richiami di Statistica 2.xls” l’opzione calcolo manuale viene attivata automaticamente non appena si carica il file stesso utilizzando il metodo Open dell’oggetto Workbook. Il codice relativo è riportato nel riquadro seguente e non richiede particolari commenti. Private Sub Workbook_Open() Application.Calculation = xlManual End Sub Nel file citato il lettore troverà un’applicazione del codice sopra discusso sia per la distribuzione uniforme, sia per la distribuzione normale che adesso andremo a discutere. Distribuzione Normale Una delle funzioni più importanti, sia nella teoria sia nella pratica, è la distribuzione normale o gaussiana la cui funzione densità è data da: − 1 f X ( x ) = f X ( x; µ , σ ) = e σ 2π ( x − µ )2 2σ 2 (1.35) dove i parametri µ e σ sono rispettivamente la media e la deviazione standard. L’espressione della funzione generatrice dei momenti è
  22. 22. Introduzione al metodo Monte Carlo 19 [ ] = e E [e m X (t ) = E e tµ tX t ( X −µ ) ] +∞ − 1 e t ( x−µ ) e =e ∫ − ∞σ 2π tµ +∞ − 1 e ∫ e − ∞σ 2π tµ e tµ + σ 2t 2 + ∞ 2 ( x − µ )2 2σ 2 dx = ( x − µ ) 2 − 2σ 2t ( x − µ ) 2σ 2 − 1 e ∫ − ∞σ 2π ( x − µ −σ 2t ) 2 2σ 2 dx = (1.36) dx D’altra parte l’ultimo integrale è uguale ad 1 (si tratta infatti dell’integrale su tutto il dominio di una funzione gaussiana) per cui possiamo scrivere: m X (t ) = e tµ + σ 2t 2 2 (1.37) Lasciamo al lettore verificare, utilizzando la funzione generatrice dei momenti, che effettivamente i parametri µ e σ 2 sono rispettivamente la media e la varianza della distribuzione. Una variabile aleatoria viene detta distribuita secondo una normale standard se la media è 0 e la standard deviation è 1. Nel corso del testo utilizzeremo anche una notazione abbastanza diffusa tramite la quale si indica che una generica variabile aleatoria X è distribuita come una normale con media µ e varianza σ 2: X ~ N (µ,σ ) . Figura 1.9 – Densità di Probabilità e Distribuzione Cumulata Normale (µ = 4, σ = 0.5)
  23. 23. 20 Introduzione al metodo Monte Carlo Per l’analisi di distribuzioni gaussiane Excel mette a disposizione due funzioni: una per la distribuzione generica e l’altra specializzata al caso della normale standard. DISTRIB.NORM(). Restituisce la distribuzione normale con media e distribuzione standard specificate. La sintassi è la seguente DISTRIB.NORM(x;media;dev_standard;cumulativo) dove x è il valore per il quale si desidera la distribuzione, media è la media della distribuzione, dev_standard è la deviazione standard e cumulativo è un valore logico che determina la forma assunta dalla funzione. Se cumulativo è VERO, DISTRIB.NORM restituirà la funzione di distribuzione cumulata, se è FALSO restituirà la funzione densità di probabilità. DISTRIB.NORM.ST(). Restituisce la funzione di distribuzione normale standard. La distribuzione ha una media uguale a 0 e una deviazione standard uguale a 1 Sintassi: DISTRIB.NORM.ST(z) essendo z il valore per il quale si desidera la distribuzione. Distribuzione LogNormale Sia X una variabile aleatoria con distribuzione normale, allora la variabile Y = eX definisce una variabile aleatoria con distribuita in maniera log-normale. Se la variabile X ha media µ e standard deviation σ, allora la funzione densità di probabilità di z è data da f Z ( z) = 1 zσ 2π e − 1 2σ 2 (ln z − µ )2 (1.38) con z ≥ 0 . La media e la varianza della variabile Z possono essere espresse in funzione dei corrispondenti momenti di X tramite le relazioni E[ Z ] = e 1 2 µ+ σ 2 2 ( (1.39) 2 ) 2 σ Z = e 2 µ +σ eσ − 1 = e 2 µ ω (ω − 1) (1.40) avendo posto ω = exp(σ 2 ) ≥ 1 . I fattori di asimmetria e curtosi sono dati rispettivamente da
  24. 24. Introduzione al metodo Monte Carlo 21 β1 = (ω − 1)1 / 2 (ω + 2 ) (1.41) β 2 = ω 4 + 2ω 3 + 3ω 2 − 3 (1.42) Notate che per valori di σ non nulli, sia l’asimmetria è sempre maggiore di zero e la curtosi è sempre maggiore di 3. Questo vuol dire che la distribuzione log-normale è sempre asimmetrica a destra e leptocurtica. Figura 1.10 – Densità di Probabilità e Distribuzione Cumulata Lognormale Nel grafico riportato in Figura 1.10 sono disegnati gli andamenti delle funzioni di densità e cumulata. Per quest’ultima è stata utilizzata la funzione Excel DISTRIB.LOGNORM() la cui sintassi è la seguente DISTRIB.LOGNORM(x;media;dev_standard) dove la media e la standard deviation sono relative al logaritmo di x. La funzione Excel in questo caso restituisce solo la distribuzione cumulata. Distribuzione Gamma Infine un breve cenno alla distribuzione Gamma che è utilizzata nella teoria della struttura a termine dei tassi di interesse. Questa funzione viene utilizzata in generale nello studio di variabili aleatorie con distribuzione asimmetrica e nell’analisi delle code. L’espressione della funzione densità di probabilità è:
  25. 25. 22 Introduzione al metodo Monte Carlo f X (α , β ) = 1 x α −1e − x / β β Γ(α ) α (1.43) essendo ∞ Γ(z ) = ∫ t z −1e −t dt (1.44) 0 In Excel è disponibile la funzione DISTRIB.GAMMA()la cui sintassi è la seguente DISTRIB.GAMMA(x;alfa;beta;cumulativo) in cui alfa e beta sono i parametri della distribuzione e cumulativo è, come al solito, un parametro logico che indica se si desidera calcolare la densità di probabilità o la distribuzione cumulata. La distribuzione Gamma è definita solo per valori positivi della x e strettamente positivi dei parametri alfa e beta. Figura 1.11 – Densità di Probabilità e Distribuzione Cumulata Gamma
  26. 26. Introduzione al metodo Monte Carlo 23 1.6 Covarianza e Correlazione Date due variabili aleatorie X ed Y con varianza finita, si definisce covarianza la quantità definita da σ XY = Cov( X , Y ) = E[ XY ] − E[ X ]E[Y ] (1.45) Se la covarianza è nulla le due variabili si dicono non correlate. Solitamente viene introdotto un coefficiente di correlazione definito come ρ XY = σ XY σ Xσ Y (1.46) I cui valori massimi e minimi dipendono dal tipo di distribuzione considerata 2. Due variabili si dicono indipendenti se la funzione di distribuzione congiunta FXY(x, y)3 è fattorizzabile nel prodotto delle marginali FX(x)FY(Y). Due variabili indipendendi con varianza finita sono anche non correlate ma non è vero il viceversa. La funzione COVARIANZA() di Excel ha la seguente sintassi COVARIANZA(matrice1; matrice2) dove matrice1 e matrice2 rappresentano due intervalli di celle contenenti le serie di cui si vuole valutare la covarianza. Date due variabili aleatorie X ed Y, questa funzione utilizza lo stimatore 1 n ∑ ( xi − µ X )( yi − µY ) n i =1 (1.47) essendo le medie rispettivamente di X e Y. E’ possibile inoltre calcolare direttamente il coefficiente di correlazione tramite la funzione corrispondente di Excel. 1.7 Che cos’è un Processo Stocastico Consideriamo una successione discreta di istanti di tempo t1 < t 2 < K < t n . In generale possiamo descrivere il comportamento di un sistema che evolve nel tempo in maniera 2 E’ consuetudine (errata!) ritenere che l’indice di correlazione sopra definito abbia come dominio di variazione l’intervallo chiuso [-1,1]. In realtà ciò non è vero! Il dominio dell’indice di correlazione lineare è sicuramente contenuto nel precedente intervallo ma i valori massimo e minimo che ρ può assumere dipendono dalle distribuzioni di probabilità delle due variabili aleatorie X ed Y. Una descrizione esauriente di questo risultato è al di là degli scopi di questo libro, il lettore interessato è rinviato all’articolo di Embrechts et. al. citato in bibliografica. 3 Il significato da attribuire alla funzione di distribuzione congiunta di due o più variabili è analogo a quello visto per il caso univariato FXY ( x, y ) = P ( X ≤ x e Y ≤ y ) . Rinviamo ai testi di statistica citati in bibliografia per la definizione delle distribuzioni marginali.
  27. 27. 24 Introduzione al metodo Monte Carlo imprevedibile tramite una corrispondente sequenza di variabili aleatorie X1, X2, ..., Xn. Parleremo in questo caso di processo stocastico discreto. Naturalmente possiamo anche definire processi stocastici nel tempo continuo sia su un dominio finito, come ad esempio [0, 1], sia su un dominio infinito, ad esempio [0, ∞). Da un punto di vista formale consideriamo uno spazio di probabilità (Ω, A , P) e un insieme non vuoto, T, i cui elementi sono gli istanti che vengono presi in considerazione. Definiamo processo stocastico X = {X (t ) : t ∈ T } una funzione di due variabili X : T × Ω → R tale che X (t ) = X (t , .) è una variabile aleatoria per ogni t ∈ T . X (. , ω ) : T → R viene chiamata realizzazione o traiettoria del processo stocastico considerato. Ogni realizzazione in pratica non è altro che un’osservazione dell’evoluzione temporale della quantità descritta dal processo. Figura 1.12 – Due diverse realizzazioni di un processo stocastico La simulazione di un processo stocastico è dunque legata alla possibilità di generare successioni di numeri casuali. Una domanda sorge tuttavia spontanea: come può un elaboratore, macchina totalmente deterministica, generare numeri casuali e quindi per loro natura non deterministici? La risposta è molto semplice: non può! Qualunque sequenza di numeri prodotta da un computer viene sempre generata per mezzo di qualche algoritmo per cui non si può parlare di casualità essendo la sequenza predeterminata. Come vedremo nei prossimi capitoli, in compenso, con un computer si possono generare sequenze di numeri che sembrano casuali.
  28. 28. 2 La Simulazione Monte Carlo La ricerca nel campo della fisica ha dimostrato in modo lampante che, almeno nella stragrande maggioranza dei fenomeni naturali la cui regolarità e invariabilità ha condotto alla formulazione del postulato della causalità generale, è il caso la radice comune della stretta rispondenza alle leggi riscontrata. Erwin Schroedinger “Che cos’è una legge fisica”, 1922 Da un punto di vista del tutto generale con il termine Monte Carlo si intende una tecnica numerica che faccia uso di numeri casuali per risolvere un problema. Per il momento assumiamo che il lettore comprenda, per lo meno a livello intuitivo, che cosa sia un numero casuale. Più avanti avremo modo di ritornare sulla definizione di numero casuale e, come vedremo, questo porterà a delle questioni tutt’altro che banali. Storicamente la prima applicazione su larga scala di metodi computazionali basati sull'uso di numeri casuali furono gli studi di diffusione ed assorbimento di neutroni (una particella elementare che compone il nucleo atomico) in vari tipi di materiale nell'ambito del progetto per la realizzazione della prima bomba atomica. Prima di passare ad alcuni esempi pratici, cerchiamo di dare una definizione formalmente più precisa. Il metodo Monte Carlo consiste nel rappresentare la soluzione di un problema come parametro di un’ipotetica popolazione ed usare una sequenza di numeri casuali per costruire un campione della popolazione dal quale possano essere estratte stime statistiche del parametro. E’ opportuno soffermarsi sulla natura dei problemi che è possibile affrontare con il metodo Monte Carlo. Semplificando al massimo la questione, è possibile dividere tali problemi in due grandi categorie Problemi di natura intrinsecamente probabilistica in cui sono coinvolti fenomeni legati alla fluttuazione stocastica di variabili aleatorie. Due problemi tipici che rientrano in questa categoria sono il pricing di un’opzione e la stima del VaR di un portafoglio. Problemi di natura essenzialmente deterministica, del tutto privi cioè di componenti aleatorie, ma la cui strategia di soluzione può essere riformulata in modo tale da risultare equivalente alla determinazione del valore di aspettazione di una funzione di variabili stocastiche. Nel caso di un problema del primo tipo è possibile stabilire una corrispondenza diretta fra popolazione simulata e popolazione studiata. Tali applicazioni sono dette
  29. 29. 26 Introduzione al metodo Monte Carlo simulazioni dirette. Nel secondo caso la formulazione del problema può essere tale da rendere l’applicazione del metodo Monte Carlo poco evidente soprattutto se il problema in esame è intrinsecamente analitico. Vediamo subito un esempio pratico. Con riferimento alla fig. 2.1 consideriamo dapprima dei problemi di natura probabilistica (la valutazione del premio per un’opzione di tipo europeo scritta su un titolo azionario che non paga dividendi e la determinazione del VaR) ed un problema di natura prettamente deterministica come la determinazione dell’area racchiusa da una figura piana, ad esempio un cerchio. Cominciamo dal primo problema. Il pricing di un’opzione è affrontato usualmente nel contesto della cosiddetta valutazione neutrale rispetto al rischio. Indicando con fT il valore dell’opzione stessa alla scadenza T, il valore ad oggi, f, sarà dato da [ ˆ f = E fT e − r T ] (2.1) essendo Ê il valore di aspettazione risk-neutral ed r il valore medio fra t = 0 e t = T del tasso privo di rischio. Qualora si assuma di conoscere con certezza il valore di r il problema può essere semplificato e la (2.1) diventa ˆ f = e − r T E [ fT ] (2.2) La formulazione del problema rende evidente la sua natura intrinsecamente probabilistica. L’applicazione del metodo Monte Carlo nel caso in esame si riduce essenzialmente alla generazione di un numero sufficientemente elevato di stime di fT da cui estrarre il valore medio. A tal fine è necessario innanzi tutto introdurre un’ipotesi sul modo in cui il prezzo del titolo sottostante si evolve nel tempo; l’assunzione più comune è che il prezzo dell’azione segua un moto geometrico browniano. Secondo questa ipotesi il tasso di variazione del prezzo in un intervallo di tempo infinitesimo è descritto da dS = µSdt + σSdz (2.3) dove µ è il tasso di rendimento atteso e σ è la volatilità del prezzo dell’azione. La simulazione viene condotta dividendo l’intervallo di vita del derivato in N intervalli ciascuno di ampiezza ∆t. Si può dimostrare che la versione discreta della (2.3) è data da ∆S = µS∆t + σSε ∆t (2.4) dove ∆S è la variazione di prezzo nell’intervallo ∆t ed ε è un numero casuale estratto da una distribuzione normale (supponiamo per il momento di avere una qualche procedura che ci permetta di generare numeri casuali con distribuzione di probabilità assegnata). I valori di µ e σ possono essere stimati da un’analisi delle serie storiche dei prezzi per il titolo sottostante l’opzione. A questo punto siamo in grado di calcolare i valori assunti da ∆S (e quindi da S) agli istanti 0, ∆t, 2∆t, ….fino alla scadenza T. Si noti che il
  30. 30. Introduzione al metodo Monte Carlo 27 processo di simulazione richiede la generazione di N numeri casuali indipendenti normalmente distribuiti. Una volta simulato il valore del titolo sottostante al tempo T siamo in grado di ricavare il valore dell’opzione alla stessa data. Supponendo che l’opzione sia di tipo call avremo semplicemente fT = max(ST − K ,0) (2.5) essendo K lo strike price. Ripetendo la procedura appena descritta un numero molto elevato di volte siamo in grado di ottenere una distribuzione di valori per fT dalla quale è possibile estrarre il valore di aspettazione che compare nella (2.2). Lo stesso problema può essere risolto con tecniche analitiche sia tipo numerico, come l’approccio basato sull’uso di alberi binomiali, sia ricercando, laddove le ipotesi non siano troppo restrittive per un uso pratico, una soluzione esatta come avviene nel caso dell’analisi svolta da Black e Scholes che in un lavoro ormai storico hanno ricavato una formula chiusa per il pricing di opzioni europee. Restando all’interno del primo tipo di problematiche vediamo come formalizzare il problema del VaR di un portafoglio in maniera adatta all’utilizzo di tecniche Monte Carlo. Supponiamo che il valore corrente del portafoglio sia V(t), sia ∆t il periodo di tempo su cui intendiamo stimare il VaR e infine V (t + ∆t ) indichi il valore del portafoglio al termine di questo periodo. La perdita di valore del portafoglio nel periodo considerato è pari a L = ∆V = V (t + ∆ ) − V (t ) e il VaR, xp, associato ad un certo livello di probabilità p è definito dalla relazione (2.6) P( L > x p ) = p PROBLEMA FORMULAZIONE VALUTAZIONE DEL PREZZO DI UN’OPZIONE (PROBABILISTICO) Simulazione diretta TIPO A (STATISTICO) SOLUZIONE Numeri casuali ESTRATTA DAL CAMPIONE (APPROSSIMATA) Metodi di valutazione NUMERICA Ad esempio: Alberi Binomiali Integrazione numerica “Crude” Monte Carlo CALCOLO DELL’AREA DI UN CERCHIO (DETERMINISTICO) TIPO B geometria (ANALITICO) Ad esempio: Formula di Black & Scholes S = πR2 ESATTA Figura 2.1
  31. 31. 28 Introduzione al metodo Monte Carlo Per valutare tale probabilità col metodo Monte Carlo possiamo simulare una serie di valori per tutti i fattori di rischio cui è sensibile il portafoglio. La rivalutazione del portafoglio per ogni serie di nuovi valori dei fattori di rischio viene ripetuta un numero sufficientemente elevato di volte al fine di ottenere una distribuzione significativa della perdita. Dalla distribuzione ottenuta si risale così al VaR come percentile al livello di probabilità predefinito. Figura 2.2 – Il calcolo di Pi greco. Vediamo infine il problema di tipo geometrico che, al di là dell’ovvia banalità della soluzione analitica, non sembra presentare alcuna relazione con l’utilizzo di sequenze di numeri casuali. Consideriamo per semplicità un cerchio di raggio unitario di area pari a π. Poniamoci ora sotto una prospettiva leggermente diversa da quella usuale ed osserviamo che l’area di questo cerchio può essere misurata stimando la probabilità che un punto scelto a caso all’interno di un quadrato di lato pari a 2 cada all’interno del cerchio inscritto in esso. Con riferimento alla figura 2.2 (dove per semplicità ci siamo limitati alla considerazione del primo quadrante in un sistema di assi coordinati con origine nel centro del cerchio) la procedura per la determinazione del valore di π può essere descritta come segue: 1. si estraggono due numeri casuali, indipendenti, uniformemente distribuiti nell’intervallo [0,1]. Questa coppia di numeri rappresenta le coordinate di un punto del piano appartenente al quadrato di lato unitario; 2. si determina la distanza del punto così generato dall’origine degli assi, se tale distanza è minore o uguale a 1 il punto cade all’interno della superficie del cerchio altrimenti no; 3. si ripete la procedura sopra descritta un numero N di volte e si misura il rapporto fra il numero dei casi in cui il punto cade all’interno del cerchio, Nacc, e N stesso, questo rapporto rappresenta una stima della probabilità che un punto con coordinate scelte a caso cada all’interno del cerchio, tale probabilità è chiaramente uguale al rapporto fra l’area del quadrante del cerchio e quella del quadrato unitario quindi si ha π =4 N acc N
  32. 32. Introduzione al metodo Monte Carlo 29 Non c’è bisogno di dire che nessuno di noi stimerebbe l’area di un cerchio con questa procedura, tuttavia problemi di natura analitica meno banali di quello presentato possono trarre grande giovamento dalla riformulazione in termini di processi aleatori al punto che, contrariamente a quello che si potrebbe pensare, tecniche di simulazione per la soluzione di problemi deterministici di tipo fisico e matematico erano già state sviluppate molto prima degli anni 40. Storicamente il primo esempio di simulazione Monte Carlo ante litteram risale addirittura al 1777 anno in cui il matematico e naturalista francese Buffon nel suo Essai d’arithmetique morale descrisse un esperimento di natura aleatoria che gli consentì di stimare, con una precisione per l’epoca accettabile, il valore di π. 2.1 Simulazione Monte Carlo e Integrazione Numerica Esiste una connessione formale fra l’utilizzo del metodo Monte Carlo e il concetto di integrazione di una funzione. Prima di tutto osserviamo come i problemi discussi nel paragrafo precedente possono essere ricondotti entrambi al calcolo di integrali. Il caso relativo all’area del cerchio è evidente 1 Area del cerchio = 4∫ 1 − x 2 dx (2.7) 0 Il prezzo di un’opzione come abbiamo visto non è altro che il valore scontato del valore di aspettazione del prezzo alla scadenza, il fattore di rischio sottostante (il prezzo dell’azione) risulta distribuito in accordo ad una distribuzione log-normale perciò abbiamo: f (S , t ) = e−rT σ 2πT ∞ ∫ 0 f ( S ′) −(log( S / S ′) +[ r −(1 / 2)σ 2 ]T ) 2 / 2σ 2T e dS ′ S′ (2.8) Infine, per quanto riguarda il calcolo del Value-at-Risk, osserviamo che indicata con I(L>x) la funzione indicatrice definita come  1 se L > x I ( L > x) =  0 altrimenti (2.9) e indicando con f(z) la densità di probabilità congiunta dei fattori di rischio, possiamo scrivere P( L > x) = ∫ I ( L > x) f ( z )dz = E[ I ( L > x)] (2.10) Più in generale possiamo affermare che ogni estrazione di un campione di numeri casuali può essere utilizzata come stimatore di un integrale. Come esempio concreto
  33. 33. 30 Introduzione al metodo Monte Carlo consideriamo il caso relativo all’integrazione di una funzione di una variabile b reale I = ∫ g ( y )dy ; tramite un opportuno cambio di variabile possiamo sempre ricondurci al a caso più semplice in cui l’intervallo di integrazione è compreso fra 0 ed 1: 1 I = ∫ f ( x)dx (2.11) 0 Il punto fondamentale del nostro ragionamento consiste nel riconoscere che l’espressione scritta sopra rappresenta anche il valore di aspettazione della funzione f di una variabile aleatoria a valori uniformemente distribuiti nell’intervallo [0, 1]. Diventa così possibile stimare il valore del nostro integrale tramite una media aritmetica di n valori di f(xi) dove ciascun xi rappresenta un campione estratto da una distribuzione uniforme in [0, 1]. In altre parole possiamo affermare che la quantità ~ 1 In = n n ∑ f (x ) (2.12) i i =1 rappresenta uno stimatore non distorto di I. La varianza di questa stima risulta pari a: 1 n  n  11 ~ 1 σ2 var( I n ) = var  ∑ f ( xi )  = 2 var  ∑ f ( xi )  = ∫ [ f ( x) − I ]2 dx = n  n i =1  n i =1  n0     (2.13) come si vede l’errore quadratico medio dello stimatore, che può essere interpretato come l’errore quadratico medio della simulazione Monte Carlo, decresce all’aumentare di n come 1 / n . Questo risultato risulta del tutto indipendente dalla dimensione del problema. E’ proprio quest’ultima caratteristica che rende attraente il metodo Monte Carlo per la risoluzione di problemi con un numero elevato di dimensioni. In questo caso tipicamente il metodo Monte Carlo risulta convergere verso il valore finale più velocemente dei metodi numerici tradizionali in cui il numero di iterazioni per raggiungere un’approssimazione prefissata cresce con l’aumentare del numero di dimensioni. E’ comunque conveniente a questo punto formalizzare il problema in modo più rigoroso. Consideriamo il seguente integrale r r I = ∫ f ( x ) dx (2.14) D r dove abbiamo indicato col simbolo x il vettore multidimensionale ( x1, x2 ,K, xn ) e con r dx l’elemento di volume infinitesimo in n dimensioni dx1dx2 K dxn , f(x) è una funzione integrabile secondo Lebesgue definita sul dominio D. Ogniqualvolta l’integrale (2.14) esiste, il suo valore è uguale a quello dell’integrale di Lebesgue-Stieltjes r r I LS = ∫ κ ( z )dF ( z ) Z (2.15)
  34. 34. Introduzione al metodo Monte Carlo 31 r r dove { f ( x ), x ∈ D} e D determinano la forma assunta dalla nuova regione di r r integrazione Z, la funzione {κ ( z ), z ∈ Z } è misurabile e la funzione non decrescente r r {F ( z ), z ∈ Z } per ogni sottoinsieme misurabile di Z, con A e B tali che A ⊆ B ⊆ Z , soddisfa la relazione 0 ≤ F ( A) ≤ F ( B) ≤ F ( Z ) = 1 F(z) può quindi essere considerata una funzione di distribuzione e questo permette di r interpretare l’integrale (2.15) come il valore di aspettazione di κ ( z ) dove z è una variabile aleatoria n-dimensionale la cui funzione di distribuzione è proprio F(z). Questo ci permette di affermare in modo del tutto generale che la quantità n I LS 1 n r = ∑κ ( zi ) n i =1 (2.16) r dove zi è un campionamento di n valori indipendenti di Z estratti dalla distribuzione F(Z), è uno stimatore privo di errori sistematici dell’integrale (2.15). Vale la pena notare che l’integrale di Lebesgue-Stiltjes associato all’integrale di Lebesgue non è unico. Infatti, se consideriamo una nuova funzione F* definita in modo che dF(z)/dF*(z) esista per ogni z appartenente a D, e poniamo κ * ( z ) = κ ( z )dF ( z ) / dF * ( z ) otteniamo r r r r ∫ κ ( z )dF ( z ) = ∫ κ * ( z )dF * ( z ) Z (2.17) Z Come vedremo più avanti questa opportunità risulta di grande aiuto nella ricerca di metodologie per la riduzione della varianza.
  35. 35. 32 Introduzione al metodo Monte Carlo
  36. 36. 3 Generatori di Numeri Casuali Random numbers should not be generated with a method chosen at random. Some theory should be used. Donald Knuth, “L’arte Programmazione”, vol. 2 3.1 della Tre tipi di generatori I generatori di numeri casuali che possono essere utilizzati nel metodo Monte Carlo appartengono a tre categorie generali classificate in accordo alla natura dei numeri prodotti: • Numeri veramente casuali (truly random numbers): sono numeri la cui sequenza è assolutamente impredicibile (anche in via teorica) e devono essere prodotti sfruttando opportuni fenomeni fisici di cui è nota l’intrinseca aleatorietà (es. decadimento radioattivo di un nucleo atomico). Esistono serie di numeri di questo tipo registrate su nastri o pubblicate su appositi manuali. In generale il loro uso è estremamente difficoltoso, le serie di numeri veramente casuali sono quasi sempre composte da un numero di dati insufficiente per effettuare simulazioni attendibili pertanto non le discuteremo ulteriormente. • Numeri pseudo casuali (pseudorandom numbers): sono numeri prodotti da un computer per mezzo di un algoritmo. Ovviamente essendo generati da un processo di calcolo deterministico essi non sono numeri veramente casuali in quanto la sequenza può essere predeterminata. Tuttavia è possibile simulare in maniera efficiente una sequenza di numeri che appaia del tutto casuale a chiunque non conosca l’algoritmo usato per generarla. Questi sono i numeri più utilizzati per le simulazioni Monte Carlo e verranno discussi più approfonditamente nel seguito del capitolo. • Numeri quasi casuali (quasirandom numbers): si tratta di numeri prodotti anch’essi da un algoritmo numerico, tuttavia in questo caso non si cerca di riprodurre una sequenza aleatoria bensì di disporre di una serie di numeri distribuiti nella maniera più uniforme possibile al fine di ridurre la varianza dei risultati delle integrazioni Monte Carlo. Tali sequenze non risultano appropriate per qualsiasi applicazione del metodo Monte Carlo, tuttavia laddove il loro uso è consigliato possono portare a dei miglioramenti impressionati nelle performance dei metodi numerici che ne fanno uso. Le sequenze di numeri, sia pseudo che quasi casuali, sono caratterizzate dall’essere periodiche. Dopo un certo intervallo di numeri prodotti, detto periodo, i generatori iniziano a riproporre gli stessi numeri casuali della sequenza appena conclusa. Chiaramente una delle proprietà più importanti di qualunque tipo di generatore è quella di avere un periodo che risulti il più grande possibile. Discuteremo questa ed altre caratteristiche facendo riferimento ad un particolare metodo di generazione di numeri
  37. 37. 34 Introduzione al metodo Monte Carlo casuali il cosiddetto generatore lineare congruente che ha il pregio di essere estremamente semplice e computazionalmente efficiente. 3.2 Il generatore Lineare Congruente Virtualmente tutti i generatori di numeri pseudo casuali impiegati in pratica sono basati sul generatore lineare congruente, da un valore iniziale, J0, si genera una sequenza di numeri basati sulla formula iterativa J i = ( aJ i −1 + c ) mod m (3.1) I parametri a, c e m determinano la qualità del generatore; a viene detto moltiplicatore, c incremento e m è il cosiddetto modulo. La formula appena descritta genera numeri interi compresi fra 0 e m. Usualmente si utilizzano generatori di numeri casuali uniformemente distribuiti fra 0 ed 1, per questo è sufficiente scegliere la sequenza U i = J i / m . Dalla formula risulta evidente che la sequenza di numeri casuali si ripeterà dopo un ciclo che, al più, potrà essere di lunghezza m. In generale se indichiamo con L la lunghezza di parola (word length) di un computer espressa in numero di bit, il massimo intero rappresentabile è pari a 2 L − 1 , poiché per motivi pratici un bit è spesso perso (in quanto riservato per indicare il segno del numero), la scelta usuale è quella di porre m = 2 L −1 − 1 . Come abbiamo già accennato, il principale vantaggio del generatore lineare congruente va ricercato nella sua efficienza. Esso è molto veloce richiedendo pochissime operazioni per chiamata, questo è uno dei principali motivi che hanno finito per renderlo di uso universale. Fra i punti deboli di questo metodo il maggiore è rappresentato senz’altro dalla presenza di correlazione sequenziale fra i numeri generati; vediamo di capire di cosa si tratta. Come risulta chiaro dalla (3.1) ciascun numero prodotto dal generatore lineare congruente è completamente determinato dal numero generato al passo precedente. Questo fa sì che i valori dei numeri prodotti siano fortemente correlati fra loro. Ad esempio a numeri piccoli seguiranno preferibilmente numeri piccoli con una probabilità superiore a quella che dovremmo attenderci se i numeri fossero veramente casuali. La correlazione fra due numeri diminuisce all’aumentare della distanza che li separa espressa in termini di passo di generazione. Uno degli effetti più evidenti di questa correlazione consiste nel seguente fatto. Si generino n numeri casuali e si formino n/2 coppie di numeri scegliendo valori generati successivamente uno all’altro (U n , U n +1 ) . Consideriamo poi queste coppie come coordinate di punti su un piano. Se i numeri fossero veramente casuali dovremo aspettarci di veder riempire uniformemente il quadrato unitario. Invece quello che si osserva è che tali punti non si distribuiscono affatto in maniera uniforme ma, al contrario, tendono ad allinearsi lungo segmenti di retta. Esempio 3.1 – Supponiamo di generare un migliaio di punti nel quadrato di lato unitario utilizzando come motore il generatore lineare congruente (3.1) con i seguenti
  38. 38. Introduzione al metodo Monte Carlo 35 valori per i parametri: a = 1229, b = 1, c = 2048 e valore iniziale della sequenza pari a 0. Questi numeri sono tali da dar luogo ad un pessimo generatore di numeri casuali come si può facilmente verificare riportando in un grafico i punti così ottenuti (Fig.3 a). La correlazione sequenziale può essere facilmente rimossa con tecniche di mescolamento (shuffling), il numero prodotto al passo j-esimo non costituisce la risposta j-esima del generatore ma viene utilizzato per fornire ad un passo successivo un’uscita scelta in maniera casuale fra una serie di numeri precedentemente generati. Come si può vedere in Fig.3 b con questa semplice procedura il risultato migliora decisamente 1 1 0.9 0.9 0.8 0.8 0.7 0.7 0.6 0.6 0.5 0.5 0.4 0.4 0.3 0.3 0.2 0.2 0.1 0.1 0 0 0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 b) a) Figura 3.1 – Risultati del generatore lineare congruente con a = 1229, b = 1, c = 2048 e valore iniziale nullo. Il generatore non utilizza la procedura di shuffling nel primo caso 3.3 Le funzioni Rnd() e Randomize() La funzione Rnd() restituisce un valore numerico di tipo Single che contiene un numero casuale. La sintassi è la seguente: Rnd[(num)] L'argomento facoltativo num può essere un valore Single o una qualsiasi espressione numerica valida. I valori restituiti dalla funzione dipendono dal valore passato come argomento. Per ogni base iniziale specificata, viene generata la stessa sequenza di numeri, in quanto ogni successiva chiamata alla funzione Rnd() utilizza il numero casuale precedente come base per il numero successivo nella sequenza. In particolare, se il parametro num è minore di zero Rnd() genera sempre lo stesso numero, utilizzando num come base; se num è maggiore di zero viene restituito il successivo numero casuale nella sequenza; se num è uguale a zero viene restituito il numero generato per ultimo; infine se il parametro in input viene omesso, Rnd() restituirà il successivo numero casuale nella sequenza.
  39. 39. 36 Introduzione al metodo Monte Carlo Esempio 3.2 - Il ciclo seguente For i = 1 To 5 Cells(i, 1).Value = Rnd(-1) Next produce in output la serie costante 0.22400701 0.22400701 0.22400701 0.22400701 0.22400701 Se utilizzate Rnd() con un valore positivo For i = 1 To 5 Cells(i, 1).Value = Rnd(1) Next otterrete invece 0.035845816 0.086352348 0.164263904 0.17973578 0.573200524 Se a questo punto richiamate Rnd(0) otterrete in output sempre l’ultimo numero generato 0.573200524 0.573200524 0.573200524 0.573200524 0.573200524 Prima di richiamare Rnd(), è consigliabile utilizzare l'istruzione Randomize senza argomento per inizializzare il generatore di numeri casuali con una base connessa al timer del sistema con la seguente sintassi Randomize[(numero)]
  40. 40. Introduzione al metodo Monte Carlo 37 Randomize utilizza il parametro numero per inizializzare il generatore di numeri casuali della funzione Rnd() assegnandogli un nuovo valore base. Se numero viene omesso, il valore restituito dal timer di sistema verrà utilizzato come nuova base. Per ripetere sequenze di numeri casuali, è sufficiente richiamare Rnd() con un argomento negativo immediatamente prima dell'utilizzo di Randomize con un argomento numerico. L'utilizzo di Randomize con lo stesso valore di numero non determinerà la ripetizione della sequenza precedente. Se Randomize non viene utilizzata, quando la funzione Rnd (senza argomenti) viene chiamata per la prima volta, utilizza come base lo stesso numero. Per le chiamate successive la funzione utilizzerà l'ultimo numero generato. Ricordate che la funzione Rnd() restituisce un valore minore di 1 ma maggiore o uguale a zero. Per generare interi casuali in un dato intervallo, utilizzare la seguente formula: Int((limitesup - limiteinf + 1) * Rnd + limiteinf) In questo contesto, limitesup indica il numero maggiore presente nell'intervallo, mentre limiteinf indica il numero minore. 3.4 Test statistici sui generatori di numeri casuali Nell’esempio 3.1 abbiamo visto come la presenza di correlazione sequenziale del generatore lineare congruente possa alterare in maniera drammatica i risultati di un esperimento che faccia uso di numeri casuali. Di fatto, come abbiamo già osservato, il generatore lineare congruente, non produce numeri veramente casuali. Diventa quindi essenziale disporre di test statistici che ci permettano di giudicare la qualità di una serie di numeri quasi-random anche al fine di poter paragonare le serie prodotte da diversi generatori per selezionare quello che meglio soddisfa le nostre esigenze. E’ opportuno ricordare che in tutte le considerazioni relative alla scelta del generatore di numeri casuali da utilizzare si dovrà sempre tenere conto anche dell’efficienza numerica del generatore stesso a causa dell’elevato numero di variabili aleatorie che è necessario generare nelle applicazioni pratiche del metodo Monte Carlo. Esistono moltissimi test statistici che possono essere utilizzati per controllare la qualità di un generatore; tra i più usati vogliamo ricordare il test di χ2 e il test di KolmogorovSmirnov. Entrambi si basano su una comparazione fra la funzione di distribuzione cumulata estratta da un campione dei numeri casuali prodotti dal generatore con la funzione di distribuzione cumulata ricavata dalla funzione di densità di probabilità in accordo alla quale il generatore ha prodotto i numeri stessi. Vediamo un esempio concreto di applicazione del test di χ2 sul generatore lineare congruente per due diversi insiemi di parametri rimandando alla letteratura per una descrizione completa delle
  41. 41. 38 Introduzione al metodo Monte Carlo varie tipologie di test. Dato l’algoritmo lineare congruente sono noti diversi insiemi di parametri che permettono di ottenere buoni generatori di numeri casuali. Ad esempio il generatore definito da a = 1812433253 c dispari m = 232 produce un buona distribuzione di punti su macchine a 32 bit. Per eseguire un test su questo generatore possiamo impiegarlo per produrre un numero elevato di valori (almeno 10000) raccolti in 100 intervalli equispaziati lungo il segmento [0,1]. Il numero attesto di valori all’interno di ciascun intervallo è pari a 100. A questo punto calcoliamo il valore di χ2 e verifichiamo se il generatore è accettabile utilizzando i valori riportati in Tabella 1. La tabella riporta, per ciascun valore dei gradi di libertà k, il valore χ12−α ,k per 2 cui la probabilità P (χ 2 < χ 1−α ,k ) è pari al valore della colonna corrispondente. Ad esempio nella riga corrispondente a 10 gradi di libertà, sotto la colonna p = 95% troviamo il valore 18.3; questo significa che con 10 gradi di libertà dovremmo trovare un valore di χ2 superiore a 18.31 in media 5 volte su 100. Quando il numero di gradi di libertà supera 30 possiamo usare una formula asintotica in funzione dei percentili xp riportati per completezza nell’ultima riga della tabella. Una volta trovata la probabilità corrispondente al valore di χ2 misurato possiamo applicare il seguente criterio Knuth (1981): P(χ2) < 1% o P(χ2) > 99% ⇒ rigetto 1% < P(χ2) < 5% o 95% < P(χ2) < 99% ⇒ sospetto 5% < P(χ2) < 10% o 90% < P(χ2) < 95% ⇒ leggermente sospetto Il criterio viene applicato ad almeno tre serie prodotte dal generatore e il risultato è definitivamente negativo se due serie su tre danno risultato negativo. Come esempio pratico abbiamo applicato la procedura appena descritta al generatore lineare congruente caratterizzato dai parametri definiti poco sopra, i valori di χ2 misurati su tre serie indipendenti di 1000 numeri sono risultati pari a: 94.2 95.6 88.8 Utilizzando la formula asintotica con k = 99, troviamo i seguenti valori di χ2 p = 1% 61.66594 p = 5% p = 25% p = 50% p = 75% p = 95% p = 99% 77.04955481.38991 98.333333108.13518123.20325134.73861
  42. 42. Introduzione al metodo Monte Carlo 39 Come si vede i valori trovati cadono tutti nell’intervallo compreso fra il 25% e il 50% di probabilità, il nostro generatore ha quindi superato il test. La stessa prova eseguita scegliendo i parametri dell’esempio 1 ha dato invece i seguenti risultati 57.6 62.9 60.1 In questo caso tutti i valori sono tali che la probabilità corrispondente risulta inferiore all’1%, un’ulteriore conferma del fatto che il set di parametri che caratterizza questo generatore corrisponde a numeri molto correlati fra loro e quindi molto lontani dall’emulare un insieme di numeri veramente casuali. Tabella 3.1 – Valori di probabilità per la distribuzione χ 2 p = 1% p = 5% p = 25% p = 50% p = 75% p = 95% P = 99% k=1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635 k=2 0.02010 0.1026 0.5753 1.386 2.773 5.991 210 k=3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34 k=4 0.2971 0.7107 1.923 3.357 5.385 488 13.28 k=5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09 k=6 0.8720 1.635 3.455 5.348 7.841 12.59 16.81 k=7 1.239 2.167 4.255 6.346 037 14.07 18.48 k=8 1.646 2.733 5.071 7.344 10.22 15.51 20.09 k=9 2.088 3.325 5.899 8.343 11.39 16.92 21.67 k = 10 2.558 3.940 6.737 342 12.55 18.31 23.21 k = 20 8.260 10.85 15.45 134 23.83 31.41 37.57 k = 30 14.95 18.49 24.48 234 34.80 43.77 50.89 1.64 2.33 k > 30 xp ≈ k + 2k x p + -2.33 -1.64 -0.675 0.00 2 2 2 xp − 3 3 0.675
  43. 43. 40 Introduzione al metodo Monte Carlo
  44. 44. 4 Generazione di Distribuzioni non Uniformi Non ho ancora trovato un problema che, per quanto fosse complicato, a considerarlo nel modo giusto non diventasse ancora più complicato. Poul Anderson 4.1 Il “Transformation Method” Nei precedenti paragrafi abbiamo visto come generare sequenze di numeri casuali uniformemente distribuite. Utilizzando un generatore di questo tipo la probabilità di ottenere un risultato con un valore compreso fra x e x+dx è data da dx per 0 < x < 1 p ( x ) dx =   0 altrimenti (4.1) Supponiamo ora di generare una serie di numeri casuali uniformemente distribuiti e di calcolarne una qualche funzione definita y=y(x). La distribuzione di probabilità di y, che indicheremo con g(y), può essere ricavata ricordando che g ( y )dy = p ( x) dx (4.2) da cui g ( y ) = p( x) dx dy A scopo di esempio supponiamo che uniformemente, si ha g ( y ) dy = dx dy = e − y dy dy (4.3) y ( x) = − ln( x) con x variabile distribuita (4.4) y risulta distribuita esponenzialmente. Il problema appena discusso può anche essere posto in maniera diversa. Supponiamo infatti di conoscere la distribuzione di probabilità della variabile y e cerchiamo di determinare quale deve essere la relazione funzionale che lega y a x. In altre parole, supponendo sempre di avere una distribuzione p(x) uniforme, il problema che dobbiamo affrontare è quello di risolvere l’equazione differenziale g ( y) = dx dy (4.5) la cui soluzione è x = ∫ g ( y ) dy = F ( y ) da cui (4.6)
  45. 45. 42 Introduzione al metodo Monte Carlo y = F −1 ( x ) (4.7) Il metodo appena esposto va sotto il nome di Transformation Method. Seguendo questa procedura possiamo definire un semplice algoritmo per la generazione di variabili casuali da distribuzioni diverse da quella uniforme. L’algoritmo si riassume nei seguenti passi: 1. Si genera un numero casuale x distribuito uniformemente fra 0 ed 1; 2. Si determina, qualora risulti possibile, l’inversa della funzione di ripartizione della distribuzione che si desidera replicare; 3. Si determina il valore di tale funzione in x; 4. Si torna al punto 1 e si ripete il ciclo n volte. I numeri così ottenuti risulteranno distribuiti in accordo con la funzione desiderata. 4.1.1 Utilizzo delle funzioni del foglio di lavoro di Microsoft Excel in Visual Basic Una caratteristica molto importante offerta dal Visual Basic è la possibilità di utilizzare direttamente nel codice funzioni del foglio di lavoro di Microsoft Excel. Per un elenco completo delle funzioni del foglio di lavoro disponibili si rinvia all’elenco presente nella guida in linea 4. In Visual Basic le funzioni del foglio di lavoro di Microsoft Excel sono disponibili tramite l'oggetto WorksheetFunction. Nella seguente routine Sub viene utilizzata la funzione del foglio di lavoro Min per determinare il valore minimo in un intervallo di celle. La variabile myRange viene innanzitutto dichiarata come oggetto Range, quindi viene associata all'intervallo A1:C10 di Sheet1. Ad un'altra variabile, answer, viene assegnato il risultato della funzione Min su myRange. Infine, il valore di answer viene visualizzato in una finestra di messaggio. Sub UseFunction() Dim myRange As Range Set myRange = Worksheets("Sheet1").Range("A1:C10") answer = Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub Se viene utilizzata una funzione del foglio di lavoro che richiede un riferimento di intervallo quale argomento, è necessario specificare un oggetto Range. Ad esempio, è possibile utilizzare la funzione del foglio di lavoro Match per eseguire ricerche in un 4 Alcune funzioni del foglio di lavoro sono superflue in Visual Basic. La funzione Concatenate, ad esempio, non è necessaria poiché in Visual Basic è possibile utilizzare l'operatore & per concatenare più valori di testo.
  46. 46. Introduzione al metodo Monte Carlo 43 intervallo di celle. Occorre quindi immettere in una cella del foglio di lavoro una formula quale = CONFRONTA(9,A1:A10,0). Tuttavia, in una routine Visual Basic è possibile specificare un oggetto Range per ottenere lo stesso risultato. Sub FindFirst() myVar = Application.WorksheetFunction.Match(9, Worksheets(1).Range("A1:A10"), 0) MsgBox myVar End Sub E’ importante notare che non è detto che una funzione Visual Basic con lo stesso nome di una funzione Microsoft Excel operi in modo identico. Ad esempio, Application.WorksheetFunction.Log e Log restituiranno valori diversi. E’ possibile anche immettere una funzione del foglio di lavoro in una cella. Per fare questo è necessario definire la funzione come valore della proprietà Formula del corrispondente oggetto Range. Nell'esempio seguente la funzione del foglio di lavoro CASUALE, che genera un numero casuale, viene assegnata alla proprietà Formula dell'intervallo A1:B3 di Sheet1 nella cartella di lavoro attiva. Sub InsertFormula() Worksheets("Sheet1").Range("A1:B3").Formula = "=RAND()" End Sub 4.1.2 Come Simulare una variabile distribuita Normalmente Come esempio del metodo descritto nel paragrafo precedente proviamo a generare una sequenza di numeri casuali con distribuzione normale. Per raggiungere il nostro scopo abbiamo bisogno della funzione inversa della distribuzione cumulata che, fortunatamente, Excel mette già a nostra disposizione. Le funzioni che potete inserire direttamente nei fogli di calcolo sono in realtà due: INV.NORM(). Restituisce l'inversa della distribuzione normale cumulativa per la media e la deviazione standard specificate. La sintassi é INV.NORM(probabilità;media;dev_standard) dove probabilità è la probabilità corrispondente alla distribuzione normale, media è la media aritmetica della distribuzione, dev_standard è la deviazione standard della distribuzione. INV.NORM utilizza una tecnica iterativa per il calcolo della funzione. Dato un valore di probabilità, INV.NORM applica il metodo delle iterazioni fino a quando la precisione del risultato non rientra in ± 3x10^-7. Se il risultato di INV.NORM non converge dopo 100 iterazioni, la funzione restituirà il valore di errore #N/D.
  47. 47. 44 Introduzione al metodo Monte Carlo INV.NORM.ST(). Restituisce l'inversa della distribuzione normale standard cumulativa. La distribuzione ha una media uguale a 0 e una deviazione standard uguale a 1 Sintassi: INV.NORM.ST(probabilità) dove probabilità è la probabilità corrispondente alla distribuzione normale. Anche questa funzione utilizza un metodo di calcolo iterativo analogo a quello impiegato in INV.NORM. Le due funzioni sono richiamabili da VBA tramite l’oggetto WorksheetFunction con una sintassi leggermente diversa da quella utilizzata da Excel nei suoi fogli di calcolo. Se desiderate generare n variabili con distribuzione normale standard potete utilizzare il seguente codice Randomize For i = 1 To n Cells(i ,1).Value = Application.WorksheetFunction.NormSInv(Rnd()) Next Si noti che in questo caso l’unico argomento richiesto dalla funzione è un numero casuale uniformemente distribuito fra 0 ed 1. Nel caso in cui desideriate generare variabili con distribuzione normale caratterizzate da una media M e standard deviation Sigma è sufficiente utilizzare la funzione NormInv() del tutto analoga a INV.NORM(); un esempio di codice in questo caso è Randomize For i = 1 To n Cells(i ,1).Value = Application.WorksheetFunction.NormInv(Rnd(), M,Sigma) Next Nel file “Richiami di Statistica 2.xls” il lettore troverà un esempio di generazione di variabili aleatorie con distribuzione normale. In linea di principio il metodo appena visto si presta alla generazione di variabili aleatorie distribuite in accordo ad una qualunque funzione di densità di probabilità purché questa sia continua. In pratica tuttavia un’applicazione diretta di tale metodo può risultare molto onerosa sotto il profilo del calcolo. Questo accade in particolare per la distribuzione gaussiana per la quale non risulta possibile esprimere in forma analitica l’inversa della funzione di ripartizione. In casi come questo l’integrale della funzione deve essere calcolato numericamente con evidente perdita di tempo. Il metodo di BoxMuller per la generazione di variabili aleatorie distribuite normalmente evita questo problema. Questa procedura è basata sull’osservazione che se U1 e U2 sono due variabili aleatorie indipendenti distribuite uniformemente fra 0 ed 1 allora le variabili G1 e G2 definite dalle relazioni
  48. 48. Introduzione al metodo Monte Carlo 45 G1 = − 2 ln(U1 ) cos(2πU 2 ) (4.8) G2 = − 2 ln(U1 ) sin(2πU 2 ) sono due variabili indipendenti distribuite normalmente. Esempio 4.1 – Utilizziamo il generatore lineare congruente con i valori dei parametri definiti nell’esempio precedente per generare N coppie di punti nel piano con coordinate distribuite normalmente applicando la trasformazione di Box-Muller. Quello che si trova è abbastanza sorprendente e sicuramente diverso da quello che ci aspettavamo. Le coppie di numeri sono correlate clamorosamente una all’altra. Questo si verifica facilmente osservando che (dalla (3.1)) U i +1 = [(aU i + c ) mod m]/ m ricordando la definizione dell’operazione di “modulo” possiamo scrivere U i +1 = 1 {(aU i + c ) − m INT (aU i + c )} = a U i + c − k = αU i + γ − k m m m essendo k un numero intero. A causa della periodicità delle funzioni trigonometriche, si ha: cos(2πU i +1 ) = cos[2π (αU i + γ )] sin(2πU i +1 ) = sin[2π (αU i + γ )] Quindi in questo caso particolare le relazioni di Box-Muller diventano G1 = − 2 ln(U1 ) cos (2π (αU1 + γ )) G2 = − 2 ln(U1 ) sin(2π (αU1 + γ )) Entrambe le nuove variabili dipendono solo dalla prima variabile U1 generata inoltre il luogo dei punti descritto dalle equazioni scritte sopra è una spirale logaritmica, Geweke (1995b). 4.2 La simulazione di un processo di Wiener Il processo di Wiener prende il nome dal fisico-matematico tedesco Norbert Wiener ed è una descrizione matematica del fenomeno fisico noto come moto browniano ovverosia del moto casuale a cui è sottoposta una piccola particella di materiale sospesa in una soluzione liquida. Il moto browniano trova la sua spiegazione nella teoria cinetica della materia in quanto il moto della particella altro non è che il risultato dei numerosissimi urti che questa riceve dalle molecole del liquido circostante. Nella letteratura i termini
  49. 49. 46 Introduzione al metodo Monte Carlo processo di Wiener e moto browniano sono pertanto usati come sinonimi anche se, a rigore, il primo individua un modello matematico mentre il secondo andrebbe riservato per indicare il processo fisico corrispondente. Nella matematica finanziaria i processi di Wiener svolgono un ruolo estremamente importante per la descrizione della componente stocastica della dinamica di prezzi. 3 2 1 0 -3 -2 -1 0 1 2 3 -1 -2 -3 Figura 4.1 – Risultati dell’applicazione del metodo di Box-Muller alle coppie di numeri casuali prodotti dal generatore lineare congruente dell’esempio 1 senza shuffling. Definiamo processo di Wiener standard W = {W (t ), t ≥ 0 } un processo stocastico gaussiano nel tempo continuo con incrementi indipendenti tale che • • • W (0) = 0 con probabilità 1; E [W (t )] = 0 ; σ 2 [W (t ) − W ( s )] = t − s per ogni 0 ≤ s ≤ t ; Nella Figura 4.2 sono riportate alcune realizzazioni di un processo di Wiener realizzate utilizzando la procedura riportata nel riquadro seguente Sub Wiener() Dim i As Integer Dim nPunti As Integer Dim Dim Dim Dim Dim t0 As Single tf As Single t As Single Delta As Single x As Single
  50. 50. Introduzione al metodo Monte Carlo 47 Dim wt As Single t0 = 0 tf = Range("t_finale").Value nPunti = Range("NrPunti").Value Delta = (tf - t0) / nPunti t = t0 - Delta wt = 0 Randomize (Timer) For i = 1 To nPunti t = t + Delta x = Application.WorksheetFunction.NormSInv(Rnd()) If x < 10 And x > -10 Then wt = wt + x * Sqr(Delta) Cells(i + 1, 1).Value = t Cells(i + 1, 2).Value = wt End If Next Calculate Cells(k + 5, 16).Value = Cells(5, 15).Value Cells(5, 17).Value = k Cells(k + 5, 19).Value = Cells(5, 18).Value Cells(k + 5, 20).Value = Range("B202").Value k = k + 1 End Sub Figura 4.2 – Alcune realizzazioni di un processo di Wiener
  51. 51. 48 Introduzione al metodo Monte Carlo 4.3 Il “Rejection Method” Un altro metodo estremamente diffuso per generare variabili aleatorie a distribuzione non uniforme è il cosiddetto Rejection Method. Esso si basa sul seguente teorema enunciato da von Neumann nel 1951, Fishman, (1996) Teorema Sia f(z) con a ≤ z ≤ b una funzione di distribuzione di probabilità, supponiamo che sia possibile trovare una seconda funzione h(z) > 0 e con integrale finito tale che f(z)=cg(z)h(z) essendo 0 ≤ g ( z ) ≤ 1 . La costante c può essere scelta in modo da normalizzare l’integrale della funzione f(z) per cui possiamo assumere senza perdere in generalità c= 1 b ∫ g ( z )h( z )dz a Sia infine Z una variabile aleatoria con funzione di distribuzione h(z) e U indichi un campione estratto da una distribuzione uniforme U(0,1), allora se noi selezioniamo le estrazioni di Z tali che U ≤ g (Z ) i valori così ottenuti saranno distribuiti secondo f(z). Per dimostrare il teorema appena enunciato osserviamo prima di tutto che le variabili aleatorie U e Z hanno una funzione di distribuzione di probabilità congiunta data da fU , Z (u , z ) = h( z ) 0 ≤ u ≤1 a≤z≤b Da questa possiamo ricavare la funzione di distribuzione di probabilità di Z condizionale a U ≤ g (Z ) g (z) hZ (z | U ≤ g ( Z ) ) = ∫ g ( z) ∫ h( z )du fU , Z (u , z )du 0 pr[U ≤ g ( Z )] = 0 pr[U ≤ g ( Z )] = D’altra parte abbiamo b g ( z) a 0 pr[U ≤ g ( Z )] = ∫ dz ∫ b du fU , Z (u , z ) = ∫ h( z ) g ( z ) dz = a da cui hZ (z | U ≤ g ( Z ) ) = c h( z ) g ( z ) = f ( z ) 1 c h( z ) g ( z ) pr[U ≤ g ( Z )]
  52. 52. Introduzione al metodo Monte Carlo 49 come volevamo dimostrare. Da un punto di vista implementativo possiamo sfruttare questo teorema per definire un semplice algoritmo; per semplicità definiamo la funzione e(z) pari a c h(z). Cominciamo con l’osservare che dalla definizione di g(z) si ricava immediatamente che e(z) è una funzione maggiorante della distribuzione che intendiamo campionare f(z), ci riferiremo ad e(z) con il nome di funzione di paragone. In termini di e(z) la condizione di accettazione U ≤ g (Z ) può essere riformulata come e( Z ) ≤ g ( Z ) . A questo punto possiamo descrivere un algoritmo di generazione di numeri casuali con distribuzione assegnata secondo il rejection method: 1. Si genera un numero casuale y’ con distribuzione uniforme fra 0 e A essendo b A = ∫ e( z ) dz a 2. Si ricava il valore x = E-1(y’) essendo x E ( x ) = ∫ e( z )dz . I punti x saranno a distribuiti in accordo alla funzione e(z) (in pratica stiamo utilizzando il transformation method discusso prima); 3. Si genera un secondo numero casuale, y”, uniformemente distribuito fra 0 ed e(x); 4. Se risulta soddisfatta la condizione y′′ ≤ f (x) accettiamo x; 5. Si ripete la procedura n volte Un punto cruciale, da cui dipende il successo dell’applicazione di questo metodo, è rappresentato dalla scelta della funzione di paragone e(z). Tale funzione deve essere sempre maggiore o uguale alla funzione di distribuzione che intendiamo campionare e tale che sia facilmente computabile l’inversa della corrispondente funzione di ripartizione. 4.4 Generazione di variabili con correlazione assegnata r Indichiamo con x = ( x1, x2 ,..., xn ) un vettore di variabili aleatorie indipendenti ciascuna delle r quali distribuita secondo una normale standard, la matrice di varianza-covarianza di x sarà pertanto data dalla matrice unità di dimensione n× n. Supponiamo di voler derivare da questo insieme di variabili un secondo set di variabili, che indicheremo con r y = ( y1, y2 ,..., yn ) , non più indipendenti bensì dotato di matrice di varianza-covarianza r assegnata Σ. Il nuovo insieme di variabili aleatorie y può essere ricercato come r combinazione lineare delle variabili indipendenti x , cioè si pone r r y = Ax (4.9)

×