Řízení rizik pomocí neuronových sítí

Kvantitativní řízení rizik v Pythonu

Jamsheed Shorish

Computational Economist

Aktualizace portfolia v reálném čase

  • Řízení rizik
    • Definované míry rizika (VaR, CVaR)
    • Odhadované míry rizika (parametrické, historické, Monte Carlo)
    • Optimalizované portfolio (např. Moderní teorie portfolia)
  • Nové tržní informace => aktualizace vah portfolia
    • Problém: optimalizace portfolia je nákladná
    • Řešení: $\text{weights} = f(\text{prices})$
    • Vyhodnocení $f$ v reálném čase
    • Aktualizace $f$ pouze příležitostně
Kvantitativní řízení rizik v Pythonu

Neuronové sítě

  • Neuronová síť: $\text{output} = f(\text{input})$
    • Neuron: vzájemně propojený zpracovávací uzel funkce
  • Počátky v 40.–50. letech 20. století
  • Počátek 2000. let: aplikace neuronových sítí na „velká data"
    • Rozpoznávání a zpracování obrazu
    • Finanční data
    • Data vyhledávačů
  • Hluboké učení: neuronové sítě jako součást strojového učení
    • 2015: Google vydává open-source knihovnu TensorFlow pro hluboké učení v Pythonu
Kvantitativní řízení rizik v Pythonu

Struktura neuronové sítě

  • Vrstvy: propojené zpracovávající neurony
    • Vstupní vrstva

vstupní vrstva neuronové sítě

Kvantitativní řízení rizik v Pythonu

Struktura neuronové sítě

  • Struktura neuronové sítě
    • Vstupní vrstva
    • Skrytá vrstva

skrytá vrstva neuronové sítě

Kvantitativní řízení rizik v Pythonu

Struktura neuronové sítě

  • Struktura neuronové sítě
    • Vstupní vrstva
    • Skrytá vrstva
    • Výstupní vrstva
  • Trénování: učení vztahu mezi vstupem a výstupem

schéma vstupní, skryté a výstupní vrstvy

Kvantitativní řízení rizik v Pythonu

Struktura neuronové sítě

  • Struktura neuronové sítě
    • Vstupní vrstva
    • Skrytá vrstva
    • Výstupní vrstva
  • Trénování: učení vztahu mezi vstupem a výstupem
    • Ceny aktiv => vstupní vrstva

schéma s cenami aktiv vstupujícími do neuronové sítě

Kvantitativní řízení rizik v Pythonu

Struktura neuronové sítě

  • Struktura neuronové sítě
    • Vstupní vrstva
    • Skrytá vrstva
    • Výstupní vrstva
  • Trénování: učení vztahu mezi vstupem a výstupem
    • Ceny aktiv => vstupní vrstva
    • Zpracování ve vstupní + skryté vrstvě

schéma s váhovými hranami v neuronové síti

Kvantitativní řízení rizik v Pythonu

Struktura neuronové sítě

  • Struktura neuronové sítě
    • Vstupní vrstva
    • Skrytá vrstva
    • Výstupní vrstva
  • Trénování: učení vztahu mezi vstupem a výstupem
    • Ceny aktiv => vstupní vrstva
    • Zpracování ve vstupní + skryté vrstvě
    • Zpracování ve skryté + výstupní vrstvě

schéma vah ze skryté na výstupní vrstvu

Kvantitativní řízení rizik v Pythonu

Struktura neuronové sítě

  • Struktura neuronové sítě
    • Vstupní vrstva
    • Skrytá vrstva
    • Výstupní vrstva
  • Trénování: učení vztahu mezi vstupem a výstupem
    • Ceny aktiv => vstupní vrstva
    • Zpracování ve vstupní + skryté vrstvě
    • Zpracování ve skryté + výstupní vrstvě
    • Výstup => váhy portfolia

schéma výstupní vrstvy jako vah portfolia

Kvantitativní řízení rizik v Pythonu

Neuronové sítě pro optimalizaci portfolia

  • Trénování
    • Porovnání výstupu s předem zavedenými „nejlepšími" vahami portfolia
    • Cíl: minimalizovat „chybu" mezi výstupem a vahami
    • Malá chyba => síť je natrénována
  • Použití
    • Vstup: nové, neznámé ceny aktiv
    • Výstup: predikované „nejlepší" váhy portfolia pro nové ceny aktiv
    • Nejlepší váhy = řízení rizik
Kvantitativní řízení rizik v Pythonu

Vytváření neuronových sítí v Pythonu

 

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))
Kvantitativní řízení rizik v Pythonu

Trénování sítě v Pythonu

  • Historické ceny aktiv: matice training_input
  • Historické váhy portfolia: vektor training_output
  • Kompilace modelu s:
    • zvolenou minimalizací chyby ('loss')
    • zvoleným optimalizačním algoritmem ('optimizer')
  • Trénování modelu na trénovacích datech
    • epochs: počet trénovacích cyklů pro aktualizaci interních parametrů
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Kvantitativní řízení rizik v Pythonu

Řízení rizik v Pythonu

  • Použití: poskytnutí nových (např. v reálném čase) dat o cenách aktiv
    • Nový vektor new_asset_prices předán vstupní vrstvě
  • Vyhodnocení sítě pomocí model.predict() na nových cenách
    • Výsledek: predicted váhy portfolia
  • Nashromáždění dostatku dat => přetrénování sítě
    • Testování sítě na historických datech => backtesting
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Kvantitativní řízení rizik v Pythonu

Let's practice!

Kvantitativní řízení rizik v Pythonu

Preparing Video For Download...