Zarządzanie ryzykiem z siecią neuronową

Ilościowe zarządzanie ryzykiem w Pythonie

Jamsheed Shorish

Computational Economist

Aktualizacja portfela w czasie rzeczywistym

  • Zarządzanie ryzykiem
    • Zdefiniowane miary ryzyka (VaR, CVaR)
    • Szacowane miary ryzyka (parametryczne, historyczne, Monte Carlo)
    • Zoptymalizowany portfel (np. Nowoczesna Teoria Portfela)
  • Nowe informacje rynkowe => aktualizacja wag portfela
    • Problem: optymalizacja portfela jest kosztowna
    • Rozwiązanie: $\text{weights} = f(\text{prices})$
    • Wyznaczanie $f$ w czasie rzeczywistym
    • Aktualizacja $f$ tylko sporadycznie
Ilościowe zarządzanie ryzykiem w Pythonie

Sieci neuronowe

  • Sieć neuronowa: $\text{output} = f(\text{input})$
    • Neuron: wzajemnie połączony węzeł przetwarzający
  • Początki: lata 40.–50. XX wieku
  • Wczesne lata 2000.: zastosowanie sieci neuronowych do „big data"
    • Rozpoznawanie i przetwarzanie obrazów
    • Dane finansowe
    • Dane wyszukiwarek
  • Głębokie uczenie: sieci neuronowe jako część uczenia maszynowego
    • 2015: Google udostępnia open-source'ową bibliotekę Tensorflow do głębokiego uczenia w Pythonie
Ilościowe zarządzanie ryzykiem w Pythonie

Struktura sieci neuronowej

  • Warstwy: połączone neurony przetwarzające
    • Warstwa wejściowa

warstwa wejściowa sieci neuronowej

Ilościowe zarządzanie ryzykiem w Pythonie

Struktura sieci neuronowej

  • Struktura sieci neuronowej
    • Warstwa wejściowa
    • Warstwa ukryta

warstwa ukryta sieci neuronowej

Ilościowe zarządzanie ryzykiem w Pythonie

Struktura sieci neuronowej

  • Struktura sieci neuronowej
    • Warstwa wejściowa
    • Warstwa ukryta
    • Warstwa wyjściowa
  • Uczenie: odkrywanie zależności między wejściem a wyjściem

obraz warstw wejściowej, ukrytej i wyjściowej

Ilościowe zarządzanie ryzykiem w Pythonie

Struktura sieci neuronowej

  • Struktura sieci neuronowej
    • Warstwa wejściowa
    • Warstwa ukryta
    • Warstwa wyjściowa
  • Uczenie: odkrywanie zależności między wejściem a wyjściem
    • Ceny aktywów => warstwa wejściowa

obraz cen aktywów podawanych do sieci neuronowej

Ilościowe zarządzanie ryzykiem w Pythonie

Struktura sieci neuronowej

  • Struktura sieci neuronowej
    • Warstwa wejściowa
    • Warstwa ukryta
    • Warstwa wyjściowa
  • Uczenie: odkrywanie zależności między wejściem a wyjściem
    • Ceny aktywów => warstwa wejściowa
    • Przetwarzanie w warstwach wejściowej i ukrytej

obraz krawędzi wag w sieci neuronowej

Ilościowe zarządzanie ryzykiem w Pythonie

Struktura sieci neuronowej

  • Struktura sieci neuronowej
    • Warstwa wejściowa
    • Warstwa ukryta
    • Warstwa wyjściowa
  • Uczenie: odkrywanie zależności między wejściem a wyjściem
    • Ceny aktywów => warstwa wejściowa
    • Przetwarzanie w warstwach wejściowej i ukrytej
    • Przetwarzanie w warstwach ukrytej i wyjściowej

obraz wag między warstwą ukrytą a wyjściową

Ilościowe zarządzanie ryzykiem w Pythonie

Struktura sieci neuronowej

  • Struktura sieci neuronowej
    • Warstwa wejściowa
    • Warstwa ukryta
    • Warstwa wyjściowa
  • Uczenie: odkrywanie zależności między wejściem a wyjściem
    • Ceny aktywów => warstwa wejściowa
    • Przetwarzanie w warstwach wejściowej i ukrytej
    • Przetwarzanie w warstwach ukrytej i wyjściowej
    • Wyjście => wagi portfela

obraz warstwy wyjściowej jako wagi portfela

Ilościowe zarządzanie ryzykiem w Pythonie

Sieci neuronowe w optymalizacji portfela

  • Uczenie
    • Porównanie wyników z istniejącymi „najlepszymi" wagami portfela
    • Cel: minimalizacja „błędu" między wynikiem a wagami
    • Mały błąd => sieć jest wytrenowana
  • Zastosowanie
    • Wejście: nowe, nieznane ceny aktywów
    • Wyjście: przewidywane „najlepsze" wagi portfela dla nowych cen
    • Najlepsze wagi = zarządzanie ryzykiem
Ilościowe zarządzanie ryzykiem w Pythonie

Tworzenie sieci neuronowych w Pythonie

 

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))
Ilościowe zarządzanie ryzykiem w Pythonie

Uczenie sieci w Pythonie

  • Historyczne ceny aktywów: macierz training_input
  • Historyczne wagi portfela: wektor training_output
  • Kompilacja modelu z:
    • wybraną minimalizacją błędu ('loss')
    • wybranym algorytmem optymalizacji ('optimizer')
  • Dopasowanie modelu do danych uczących
    • epochs: liczba iteracji uczenia aktualizujących parametry
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Ilościowe zarządzanie ryzykiem w Pythonie

Zarządzanie ryzykiem w Pythonie

  • Zastosowanie: podanie nowych (np. czasu rzeczywistego) danych cenowych
    • Nowy wektor new_asset_prices przekazany do warstwy wejściowej
  • Ewaluacja sieci za pomocą model.predict() na nowych cenach
    • Wynik: predicted wagi portfela
  • Wystarczająca ilość danych => ponowne uczenie sieci
    • Test sieci na poprzednich danych => backtesting
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Ilościowe zarządzanie ryzykiem w Pythonie

Czas na ćwiczenia!

Ilościowe zarządzanie ryzykiem w Pythonie

Preparing Video For Download...