Managementul riscului cu rețele neuronale

Managementul Cantitativ al Riscului în Python

Jamsheed Shorish

Computational Economist

Actualizarea portofoliului în timp real

  • Managementul riscului
    • Definirea măsurilor de risc (VaR, CVaR)
    • Estimarea măsurilor de risc (parametrică, istorică, Monte Carlo)
    • Optimizarea portofoliului (ex. Teoria Modernă a Portofoliului)
  • Informații noi de piață => actualizarea ponderilor portofoliului
    • Problemă: optimizarea portofoliului este costisitoare
    • Soluție: $\text{weights} = f(\text{prices})$
    • Evaluarea $f$ în timp real
    • Actualizarea $f$ doar ocazional
Managementul Cantitativ al Riscului în Python

Rețele neuronale

  • Rețea neuronală: $\text{output} = f(\text{input})$
    • Neuron: nod de procesare interconectat în funcție
  • Dezvoltate inițial în anii 1940-1950
  • Începutul anilor 2000: aplicarea rețelelor neuronale la „big data"
    • Recunoașterea și procesarea imaginilor
    • Date financiare
    • Date pentru motoare de căutare
  • Deep Learning: rețele neuronale ca parte a învățării automate
    • 2015: Google lansează biblioteca open-source Tensorflow pentru Python
Managementul Cantitativ al Riscului în Python

Structura rețelei neuronale

  • Straturi: neuroni de procesare conectați
    • Strat de intrare

stratul de intrare al rețelei neuronale

Managementul Cantitativ al Riscului în Python

Structura rețelei neuronale

  • Structura rețelei neuronale
    • Strat de intrare
    • Strat ascuns

stratul ascuns al rețelei neuronale

Managementul Cantitativ al Riscului în Python

Structura rețelei neuronale

  • Structura rețelei neuronale
    • Strat de intrare
    • Strat ascuns
    • Strat de ieșire
  • Antrenare: învățarea relației dintre intrare și ieșire

imagine cu straturile de intrare, ascuns și ieșire

Managementul Cantitativ al Riscului în Python

Structura rețelei neuronale

  • Structura rețelei neuronale
    • Strat de intrare
    • Strat ascuns
    • Strat de ieșire
  • Antrenare: învățarea relației dintre intrare și ieșire
    • Prețuri active => Strat de intrare

imagine cu prețuri de active introduse în rețeaua neuronală

Managementul Cantitativ al Riscului în Python

Structura rețelei neuronale

  • Structura rețelei neuronale
    • Strat de intrare
    • Strat ascuns
    • Strat de ieșire
  • Antrenare: învățarea relației dintre intrare și ieșire
    • Prețuri active => Strat de intrare
    • Procesare în straturile de intrare și ascuns

imagine cu muchii ponderate în rețeaua neuronală

Managementul Cantitativ al Riscului în Python

Structura rețelei neuronale

  • Structura rețelei neuronale
    • Strat de intrare
    • Strat ascuns
    • Strat de ieșire
  • Antrenare: învățarea relației dintre intrare și ieșire
    • Prețuri active => Strat de intrare
    • Procesare în straturile de intrare și ascuns
    • Procesare în straturile ascuns și de ieșire

imagine cu ponderi de la stratul ascuns la stratul de ieșire

Managementul Cantitativ al Riscului în Python

Structura rețelei neuronale

  • Structura rețelei neuronale
    • Strat de intrare
    • Strat ascuns
    • Strat de ieșire
  • Antrenare: învățarea relației dintre intrare și ieșire
    • Prețuri active => Strat de intrare
    • Procesare în straturile de intrare și ascuns
    • Procesare în straturile ascuns și de ieșire
    • Ieșire => ponderi portofoliu

imagine cu stratul de ieșire reprezentat ca ponderi de portofoliu

Managementul Cantitativ al Riscului în Python

Utilizarea rețelelor neuronale pentru optimizarea portofoliului

  • Antrenare
    • Compararea ieșirii cu ponderile „optime" preexistente
    • Scop: minimizarea „erorii" dintre ieșire și ponderi
    • Eroare mică => rețeaua este antrenată
  • Utilizare
    • Intrare: prețuri noi de active, nevăzute anterior
    • Ieșire: ponderi „optime" prezise pentru noile prețuri
    • Ponderi optime = managementul riscului
Managementul Cantitativ al Riscului în Python

Crearea rețelelor neuronale în 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))
Managementul Cantitativ al Riscului în Python

Antrenarea rețelei în Python

  • Prețuri istorice ale activelor: matricea training_input
  • Ponderi istorice ale portofoliului: vectorul training_output
  • Compilarea modelului cu:
    • minimizarea erorii specificate ('loss')
    • algoritmul de optimizare specificat ('optimizer')
  • Ajustarea modelului pe datele de antrenare
    • epochs: numărul de iterații de antrenare pentru actualizarea parametrilor interni
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Managementul Cantitativ al Riscului în Python

Managementul riscului în Python

  • Utilizare: furnizarea de date noi (ex. în timp real) privind prețurile activelor
    • Vectorul nou new_asset_prices transmis stratului de intrare
  • Evaluarea rețelei cu model.predict() pe prețuri noi
    • Rezultat: ponderi predicted ale portofoliului
  • Acumularea de date suficiente în timp => re-antrenarea rețelei
    • Testarea rețelei pe date anterioare => backtesting
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Managementul Cantitativ al Riscului în Python

Să exersăm!

Managementul Cantitativ al Riscului în Python

Preparing Video For Download...