Riskhantering med neurala nätverk

Kvantitativ riskhantering i Python

Jamsheed Shorish

Computational Economist

Portföljuppdatering i realtid

  • Riskhantering
    • Definierade riskmått (VaR, CVaR)
    • Skattade riskmått (parametriska, historiska, Monte Carlo)
    • Optimerad portfölj (t.ex. Modern portföljteori)
  • _Ny_ marknadsinformation => uppdatera portföljvikter
    • Problem: portföljoptimering är kostsamt
    • Lösning: $\text{weights} = f(\text{prices})$
    • Evaluera $f$ i realtid
    • Uppdatera $f$ bara ibland
Kvantitativ riskhantering i Python

Neurala nätverk

  • Neuralt nätverk: $\text{output} = f(\text{input})$
    • Neuron: sammankopplad bearbetningsnod i funktionen
  • Ursprungligen utvecklat på 1940–1950-talet
  • Tidigt 2000-tal: neurala nätverk tillämpas på "big data"
    • Bildigenkänning och bildbehandling
    • Finansiella data
    • Sökmotordata
  • Djupinlärning: neurala nätverk som del av maskininlärning
    • 2015: Google lanserar open source-biblioteket TensorFlow för djupinlärning i Python
Kvantitativ riskhantering i Python

Struktur hos neurala nätverk

  • Lager: sammankopplade bearbetningsneuroner
    • Indatalager

indatalager i neuralt nätverk

Kvantitativ riskhantering i Python

Struktur hos neurala nätverk

  • Struktur hos neurala nätverk
    • Indatalager
    • Dolt lager

dolt lager i neuralt nätverk

Kvantitativ riskhantering i Python

Struktur hos neurala nätverk

  • Struktur hos neurala nätverk
    • Indatalager
    • Dolt lager
    • Utdatalager
  • Träning: lär sig sambandet mellan indata och utdata

bild av indatalager, dolt lager och utdatalager

Kvantitativ riskhantering i Python

Struktur hos neurala nätverk

  • Struktur hos neurala nätverk
    • Indatalager
    • Dolt lager
    • Utdatalager
  • Träning: lär sig sambandet mellan indata och utdata
    • Tillgångspriser => Indatalager

bild med tillgångspriser som matas in i neuralt nätverk

Kvantitativ riskhantering i Python

Struktur hos neurala nätverk

  • Struktur hos neurala nätverk
    • Indatalager
    • Dolt lager
    • Utdatalager
  • Träning: lär sig sambandet mellan indata och utdata
    • Tillgångspriser => Indatalager
    • Bearbetning i indata- och dolt lager

bild med viktkanter i neuralt nätverk

Kvantitativ riskhantering i Python

Struktur hos neurala nätverk

  • Struktur hos neurala nätverk
    • Indatalager
    • Dolt lager
    • Utdatalager
  • Träning: lär sig sambandet mellan indata och utdata
    • Tillgångspriser => Indatalager
    • Bearbetning i indata- och dolt lager
    • Bearbetning i dolt och utdatalager

bild av vikter från dolt lager till utdatalager

Kvantitativ riskhantering i Python

Struktur hos neurala nätverk

  • Struktur hos neurala nätverk
    • Indatalager
    • Dolt lager
    • Utdatalager
  • Träning: lär sig sambandet mellan indata och utdata
    • Tillgångspriser => Indatalager
    • Bearbetning i indata- och dolt lager
    • Bearbetning i dolt och utdatalager
    • Utdata => portföljvikter

bild av utdatalager presenterat som portföljvikter

Kvantitativ riskhantering i Python

Använda neurala nätverk för portföljoptimering

  • Träning
    • Jämför utdata med befintliga "bästa" portföljvikter
    • Mål: minimera "felet" mellan utdata och vikter
    • Litet fel => nätverket är tränat
  • Användning
    • Indata: nya, osedda tillgångspriser
    • Utdata: förutsagda "bästa" portföljvikter för nya tillgångspriser
    • Bästa vikter = riskhantering
Kvantitativ riskhantering i Python

Skapa neurala nätverk i 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))
Kvantitativ riskhantering i Python

Träna nätverket i Python

  • Historiska tillgångspriser: matrisen training_input
  • Historiska portföljvikter: vektorn training_output
  • Kompilera modellen med:
    • angiven felminimering ('loss')
    • angiven optimeringsalgoritm ('optimizer')
  • Anpassa modellen till träningsdata
    • epochs: antal träningsomgångar för att uppdatera interna parametrar
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Kvantitativ riskhantering i Python

Riskhantering i Python

  • Användning: tillhandahåll nya tillgångspriser (t.ex. i realtid)
    • Ny vektor new_asset_prices ges till indatalagret
  • Evaluera nätverket med model.predict() på nya priser
    • Resultat: predicted portföljvikter
  • Samla tillräckligt med data över tid => träna om nätverket
    • Testa nätverket på tidigare data => backtesting
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Kvantitativ riskhantering i Python

Nu kör vi en övning!

Kvantitativ riskhantering i Python

Preparing Video For Download...