Machine Learning e Finanza. Una nota per investitori pensanti. Parte2

Marco Corazza
Dipartimento di Economia, Università Ca’ Foscari Venezia

Nella prima parte di questa nota ho fornito un’introduzione generale al machine learning – in italiano: apprendimento automatico – e ho presentato le sue principali caratteristiche. In particolare, ho cercato di porre in evidenza che le tecniche di machine learning, quando applicate all’apprendimento di un qualche fenomeno, non richiedono la conoscenza a priori né del modello che formalizza il fenomeno stesso, né tanto meno delle assunzioni sulle quali tale modello si basa, ciò perché queste tecniche sono capaci di estrarre la conoscenza relativa a tale fenomeno direttamente dai dati.

Invece, in questa seconda parte della nota vedremo come si possa utilizzare uno specifico tipo di machine learning noto come Multilayer Perceptron (MLP) – in un brutto italiano: Percettrone Multistrato, o Multilivello – per prezzare opzioni finanziarie di tipo europeo quotate in mercati reali e ne confronteremo i risultati, cioè i prezzi calcolati, con quelli derivanti dall’applicazione alle stesse opzioni del noto modello di Black-Scholes-Merton.

Prima di iniziare a presentare questo approccio ed i risultati relativi, do una sintetica descrizione di cos’è un MLP.

Si tratta di uno strumento di apprendimento che si ispira ai principi di funzionamento del cervello degli esseri viventi superiori. Questo strumento può essere visto come una rete di unità di calcolo, dette neuroni artificiali o nodi, organizzati in strati. Alcuni di questi nodi ricevono i dati dall’ambiente esterno e sono chiamati nodi di input (quelli blu nella figura), altri nodi svolgono i calcoli relativi all’apprendimento del fenomeno indagato e sono chiamati nodi nascosti (quelli gialli nella figura), e infine altri nodi ancora rilasciano il risultato della computazione verso l’ambiente esterno e sono chiamati nodi di output (quelli rossi nella figura).

Passiamo ora a presentare l’applicazione del MLP al prezzaggio di un’opzione call di tipo europeo scritta su di un indice azionario, per poi illustrare i risultati ottenuti.

Un primo passo importante nello sviluppo di un’applicazione di questo tipo consiste nel disegno della struttura del MLP, ovvero nella determinazione del numero ottimo di nodi di input, di nodi nascosti e di quelli di output che permettono al MLP di ottenere le migliori prestazioni. Inoltre, anche la determinazione del numero ottimo di livelli in cui si organizzano i nodi nascosti risulta importante.

grafico

In prima battuta si potrebbe ragionevolmente pensare che il numero ottimo di nodi di input e di output dipenda dal fenomeno che si sta investigando. Con specifico riferimento all’applicazione qui considerata – il prezzaggio di un’opzione call di tipo europeo scritta su di un indice azionario –, gli input sono sei, cioè: il prezzo dell’attività sottostante P, la volatilità del rendimento dell’attività sottostante σ, il prezzo di esercizio K, il tasso privo di rischio r, il tasso di dividendo pagato dall’attività sottostante q (si noti che r e q non sono esattamente dei tassi, ma per comodità qui li chiameremo così) e il tempo residuo alla scadenza τ.

Quindi, si sarebbe indotti a pensare che, poiché le variabili che descrivono il fenomeno investigato sono sei, allora anche i nodi di input del MLP dovrebbero essere sei. Generalmente, questo modo di dimensionare il livello dei nodi di input è quello corretto.

Ma nelle applicazioni del MLP in cui sia possibile diminuire il numero di nodi di input, e l’applicazione che stiamo qui considerando è una di quelle in cui è possibile, è sempre conveniente farlo. Prima di vedere come sia possibile implementare un MLP avente un numero di nodi inferiore al numero di variabili che descrivono il fenomeno indagato, cerco di illustrare perché ciò sia conveniente. In generale, a parità di tutti gli altri aspetti, all’aumentare del numero di nodi di input di un MLP, aumenta anche la sua complessità. In questo contesto, con l’espressione “aumenta anche la sua complessità”, sostanzialmente intendo una crescente “intricatezza” della procedura di settaggio necessaria per ottenere un apprendimento corretto. Pertanto, ridurre (quando possibile, ovviamente) in numero di nodi di input di un MLP comporta una più agevole gestione della fase di apprendimento di quest’ultimo.

Ora, però, si tratta di vedere come sia possibile diminuire il numero di nodi di input. Questa possibilità non dipende dalle proprietà del MLP ma, piuttosto, è legata alle caratteristiche del fenomeno che si sta investigando. In particolare, con riferimento al prezzaggio di un’opzione call di tipo europeo scritta su di un sottostante azionario che paghi dividendi durante la vita dell’opzione medesima, è possibile dimostrare che invece di utilizzare i due tassi presentati sopra, rispettivamente il tasso privo di rischio r=r0 ed il tasso di dividendo pagato dal sottostante q=q0, se ne può utilizzare soltanto uno dato dalla differenza dei due, ovvero r=r0q0 (e porre l’altro uguale a zero, ovvero q=0). Utilizzando questa caratteristica teorica, le variabili che descrivono il fenomeno investigato sono passate da sei a cinque. Ancora con riferimento al prezzaggio di un’opzione call di tipo europeo scritta su di un sottostante non necessariamente azionario, è possibile dimostrare che invece di utilizzare i due prezzi presentati sopra, rispettivamente il prezzo dell’attività sottostante P=P0 e prezzo di esercizio K=K0, se ne può utilizzare soltanto uno dato dal rapporto tra i due, ovvero P=P0/K0 (e porre l’altro uguale a uno, ovvero K=1). Utilizzando quest’altra proprietà teorica, le variabili che descrivono il fenomeno investigato sono passate da cinque a quattro.

Una volta determinato il numero di nodi di input, è necessario procedere alla determinazione del numero ottimo di livelli in cui si organizzano i nodi nascosti (questi livelli sono anche chiamati livelli nascosti), e del numero ottimo di nodi nascosti per ognuno di questi livelli. Per quanto riguarda la prima questione, quella relativa alla determinazione del numero ottimo di livelli nascosti, ci vengono in aiuto dei risultati teorici concernenti i MLP che, sulla base di ipotesi abbastanza ragionevoli, assicurano che per applicazioni del tipo di quella che stiamo qui considerando sia sufficiente un solo livello nascosto. Invece, per quanto riguarda la seconda questione, quella relativa alla determinazione del numero ottimo di nodi nascosti, al momento non esistono risultati di natura teorica in grado di supportarci in questa scelta. Pertanto, solitamente si procede per tentativi (tentativi che, ovviamente, sono metodologicamente fondati), ovvero:

  • Passo 0) inizialmente, si considera un MLP avente un ridotto numero di nodi nascosti, uno o due;
  • Passo 1) utilizzando l’insieme di coppie di input e output a disposizione, si addestra il MLP considerato;
  • Passo 2) ad addestramento concluso, si calcola l’errore commesso da questo MLP, cioè si calcola una sorta di distanza tra l’output vero (che, si ricorda, nell’applicazione qui considerata è il prezzo di mercato di un’opzione call di tipo europeo scritta su di un indice azionario) e quello calcolato dal MLP;
  • Passo 3) si considera un nuovo MLP in cui il numero di nodi nascosti è stato aumentato di un’unità;
  • Passo 4) se il nuovo numero di nodi nascosti è minore o uguale a un valore prefissato, si torna al Passo 1), altrimenti si va al Passo 5); generalmente, questo valore prefissato è determinato sulla base di una qualche ben testata regola empirica;
  • Passo 5) dati tutti i MLP addestrati, il numero ottimo di nodi nascosti è quello del MLP avente l’errore minore.

In questa procedura, ognuno degli addestramenti deve essere condotto in maniera tale da evitare l’odioso fenomeno noto come overfitting o anche overtraining. In poche parole, si ha overfitting quando l’errore commesso dal MLP al termine dell’addestramento è piccolo o molto piccolo (il che potrebbe far presupporre che sia stato condotto un buon apprendimento) e, contemporaneamente, l’errore commesso dal MLP così addestrato una volta applicato a nuove coppie di input e output, ovvero dati non utilizzati ai fini dell’addestramento, è grande o molto grande (il che fa capire che l’apprendimento è stato effettuato “a pappagallo”).

Per dirla con le parole, tradotte in italiano, di Christopher M. Bishop, un importante studioso e ricercatore nell’ambito del machine learning, «l’obiettivo dell’addestramento della rete [neurale artificiale] non è imparare una rappresentazione esatta dei dati di addestramento stessi, ma piuttosto costruire un modello del processo che genera i dati. Questo è importante affinché la rete dimostri una buona capacità di generalizzazione, ovvero di fare buone previsioni per nuovi input». Per evitare il comparire di questo fenomeno, solitamente si ricorrere a specifiche strategie di addestramento, il cui livello di tecnicalità peraltro esula dai fini di questa nota.

A questo punto, le fasi di design e di addestramento del MLP si possono considerare concluse, e si può passare al suo utilizzo per il prezzaggio dell’opzione call di tipo europeo scritta su di un indice azionario di cui sopra. In particolare, nella prossima ed ultima parte di questa nota presenterò i risultati, cioè i prezzi dell’opzione calcolati dal MLP, e li confronteremo con quelli ottenuti dall’applicazione del modello di Black-Scholes-Merton alla stessa opzione.


Resta sempre aggiornato sul mondo della finanza e degli investimenti!

Iscriviti alla nostra Newsletter

Seguici su:

 LinkedIn

28 Marzo 2024