Risicobeheer met neurale netwerken

Kwantitatief risicobeheer in Python

Jamsheed Shorish

Computational Economist

Portefeuille real-time updaten

  • Risicobeheer
    • Gedefinieerde risicomaten (VaR, CVaR)
    • Geschatte risicomaten (parametrisch, historisch, Monte Carlo)
    • Geoptimaliseerde portefeuille (bijv. Modern Portfolio Theory)
  • Nieuwe marktinfo => update portefeuillegewichten
    • Probleem: portefeuille-optimalisatie kostbaar
    • Oplossing: $\text{gewichten} = f(\text{prijzen})$
    • Evalueer $f$ real-time
    • Update $f$ af en toe
Kwantitatief risicobeheer in Python

Neurale netwerken

  • Neuraal netwerk: $\text{output} = f(\text{input})$
    • Neuron: onderling verbonden verwerkingsknoop in de functie
  • Ontwikkeld in de jaren 40–50
  • Begin 2000: toepassing op "big data"
    • Beeldherkenning/-verwerking
    • Financiële data
    • Zoekmachinedata
  • Deep learning: neurale netwerken binnen machine learning
    • 2015: Google brengt de open-source TensorFlow-bibliotheek voor Python uit
Kwantitatief risicobeheer in Python

Opbouw van een neuraal netwerk

  • Lagen: verbonden verwerkende neuronen
    • Invoellaag

invoerlaag van een neuraal netwerk

Kwantitatief risicobeheer in Python

Opbouw van een neuraal netwerk

  • Opbouw van een neuraal netwerk
    • Invoellaag
    • Verborgen laag

verborgen laag van een neuraal netwerk

Kwantitatief risicobeheer in Python

Opbouw van een neuraal netwerk

  • Opbouw van een neuraal netwerk
    • Invoellaag
    • Verborgen laag
    • Uitvoellaag
  • Training: leer relatie tussen input en output

afbeelding van invoer-, verborgen en uitvoerlaag

Kwantitatief risicobeheer in Python

Opbouw van een neuraal netwerk

  • Opbouw van een neuraal netwerk
    • Invoellaag
    • Verborgen laag
    • Uitvoellaag
  • Training: leer relatie tussen input en output
    • Activa­prijzen => invoellaag

afbeelding met activaprijzen die naar een neuraal netwerk gaan

Kwantitatief risicobeheer in Python

Opbouw van een neuraal netwerk

  • Opbouw van een neuraal netwerk
    • Invoellaag
    • Verborgen laag
    • Uitvoellaag
  • Training: leer relatie tussen input en output
    • Activaprijzen => invoellaag
    • Verwerking in invoer + verborgen laag

afbeelding met gewichten in een neuraal netwerk

Kwantitatief risicobeheer in Python

Opbouw van een neuraal netwerk

  • Opbouw van een neuraal netwerk
    • Invoellaag
    • Verborgen laag
    • Uitvoellaag
  • Training: leer relatie tussen input en output
    • Activaprijzen => invoellaag
    • Verwerking in invoer + verborgen laag
    • Verwerking in verborgen + uitvoerlaag

afbeelding van gewichten van verborgen naar uitvoerlaag

Kwantitatief risicobeheer in Python

Opbouw van een neuraal netwerk

  • Opbouw van een neuraal netwerk
    • Invoellaag
    • Verborgen laag
    • Uitvoellaag
  • Training: leer relatie tussen input en output
    • Activaprijzen => invoellaag
    • Verwerking in invoer + verborgen laag
    • Verwerking in verborgen + uitvoerlaag
    • Output => portefeuillegewichten

afbeelding van de uitvoerlaag weergegeven als portefeuillegewichten

Kwantitatief risicobeheer in Python

Neurale netwerken voor portefeuille-optimalisatie

  • Training
    • Vergelijk output met bestaand "beste" portefeuillegewicht
    • Doel: minimaliseer "fout" tussen output en gewichten
    • Kleine fout => netwerk is getraind
  • Gebruik
    • Input: nieuwe, ongeziene activaprijzen
    • Output: voorspelde "beste" portefeuillegewichten voor nieuwe prijzen
    • Beste gewichten = risicobeheer
Kwantitatief risicobeheer in Python

Neurale netwerken maken 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))
Kwantitatief risicobeheer in Python

Het netwerk trainen in Python

  • Historische activaprijzen: training_input-matrix
  • Historische portefeuillegewichten: training_output-vector
  • Compileer model met:
    • gekozen foutminimalisatie ('loss')
    • gekozen optimalisatie-algoritme ('optimizer')
  • Fit model op trainingsdata
    • epochs: aantal trainingsloops om interne parameters te updaten
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Kwantitatief risicobeheer in Python

Risicobeheer in Python

  • Gebruik: voorzie nieuwe (bv. real-time) prijsdata
    • Nieuwe vector new_asset_prices naar de invoerlaag
  • Evalueer met model.predict() op nieuwe prijzen
    • Resultaat: predicted portefeuillegewichten
  • Verzamel genoeg data in de tijd => hertrain netwerk
    • Test op eerdere data => backtesten
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Kwantitatief risicobeheer in Python

Laten we oefenen!

Kwantitatief risicobeheer in Python

Preparing Video For Download...