Gestione del rischio con le reti neurali

Gestione quantitativa del rischio in Python

Jamsheed Shorish

Computational Economist

Aggiornare il portafoglio in tempo reale

  • Risk management
    • Misure di rischio definite (VaR, CVaR)
    • Misure di rischio stimate (parametrico, storico, Monte Carlo)
    • Portafoglio ottimizzato (es. Teoria Moderna del Portafoglio)
  • Nuove informazioni di mercato => aggiorna i pesi del portafoglio
    • Problema: ottimizzare il portafoglio costa
    • Soluzione: $\text{weights} = f(\text{prices})$
    • Valuta $f$ in tempo reale
    • Aggiorna $f$ solo occasionalmente
Gestione quantitativa del rischio in Python

Reti neurali

  • Rete neurale: $\text{output} = f(\text{input})$
    • Neurone: nodo di elaborazione interconnesso nella funzione
  • Sviluppate inizialmente negli anni 1940-1950
  • Primi anni 2000: applicazione delle reti neurali ai "big data"
    • Riconoscimento ed elaborazione immagini
    • Dati finanziari
    • Dati dei motori di ricerca
  • Deep Learning: reti neurali come parte del Machine Learning
    • 2015: Google rilascia TensorFlow, libreria open-source di deep learning per Python
Gestione quantitativa del rischio in Python

Struttura di una rete neurale

  • Livelli: neuroni di elaborazione connessi
    • Strato di input

strato di input di una rete neurale

Gestione quantitativa del rischio in Python

Struttura di una rete neurale

  • Struttura della rete neurale
    • Strato di input
    • Strato nascosto

strato nascosto di una rete neurale

Gestione quantitativa del rischio in Python

Struttura di una rete neurale

  • Struttura della rete neurale
    • Strato di input
    • Strato nascosto
    • Strato di output
  • Training: apprendere la relazione tra input e output

immagine di strati di input, nascosti e di output

Gestione quantitativa del rischio in Python

Struttura di una rete neurale

  • Struttura della rete neurale
    • Strato di input
    • Strato nascosto
    • Strato di output
  • Training: apprendere la relazione tra input e output
    • Prezzi degli asset => Strato di input

immagine con prezzi degli asset in input alla rete neurale

Gestione quantitativa del rischio in Python

Struttura di una rete neurale

  • Struttura della rete neurale
    • Strato di input
    • Strato nascosto
    • Strato di output
  • Training: apprendere la relazione tra input e output
    • Prezzi degli asset => Strato di input
    • Elaborazione di strato di input + nascosto

immagine con pesi sui collegamenti nella rete neurale

Gestione quantitativa del rischio in Python

Struttura di una rete neurale

  • Struttura della rete neurale
    • Strato di input
    • Strato nascosto
    • Strato di output
  • Training: apprendere la relazione tra input e output
    • Prezzi degli asset => Strato di input
    • Elaborazione di strato di input + nascosto
    • Elaborazione di strato nascosto + output

immagine dei pesi dallo strato nascosto a quello di output

Gestione quantitativa del rischio in Python

Struttura di una rete neurale

  • Struttura della rete neurale
    • Strato di input
    • Strato nascosto
    • Strato di output
  • Training: apprendere la relazione tra input e output
    • Prezzi degli asset => Strato di input
    • Elaborazione di strato di input + nascosto
    • Elaborazione di strato nascosto + output
    • Output => pesi del portafoglio

immagine dello strato di output presentato come pesi del portafoglio

Gestione quantitativa del rischio in Python

Usare le reti neurali per l'ottimizzazione di portafoglio

  • Training
    • Confronta l'output con i pesi "migliori" preesistenti del portafoglio
    • Obiettivo: minimizzare l'"errore" tra output e pesi
    • Errore piccolo => la rete è addestrata
  • Uso
    • Input: nuovi prezzi degli asset, mai visti
    • Output: pesi "migliori" previsti per i nuovi prezzi
    • Pesi ottimali = risk management
Gestione quantitativa del rischio in Python

Creare reti neurali in Python

 

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense
model = Sequential() model.add(Dense(10, input_dim=4, activation='sigmoid')) model.add(Dense(4))
Gestione quantitativa del rischio in Python

Addestrare la rete in Python

  • Prezzi storici degli asset: matrice training_input
  • Pesi storici del portafoglio: vettore training_output
  • Compila il modello con:
    • funzione di minimizzazione dell'errore ('loss')
    • algoritmo di ottimizzazione ('optimizer')
  • Adatta il modello ai dati di training
    • epochs: numero di cicli di training per aggiornare i parametri interni
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Gestione quantitativa del rischio in Python

Risk management in Python

  • Uso: fornisci nuovi dati di prezzo (es. in tempo reale)
    • Nuovo vettore new_asset_prices dato allo strato di input
  • Valuta la rete con model.predict() sui nuovi prezzi
    • Risultato: pesi del portafoglio predicted
  • Accumula dati nel tempo => ri-addestra la rete
    • Verifica la rete su dati passati => backtesting
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Gestione quantitativa del rischio in Python

Esercitiamoci!

Gestione quantitativa del rischio in Python

Preparing Video For Download...