Управління ризиками нейромережами

Кількісне управління ризиками в Python

Jamsheed Shorish

Computational Economist

Оновлення портфеля в реальному часі

  • Управління ризиками
    • Визначені міри ризику (VaR, CVaR)
    • Оцінені міри ризику (параметричні, історичні, Монте-Карло)
    • Оптимізований портфель (напр., Modern Portfolio Theory)
  • Нова ринкова інформація => оновлення ваг портфеля
    • Проблема: оптимізація портфеля дорога
    • Рішення: $\text{weights} = f(\text{prices})$
    • Обчислювати $f$ у реальному часі
    • Оновлювати $f$ лише зрідка
Кількісне управління ризиками в Python

Нейронні мережі

  • Нейронна мережа: $\text{output} = f(\text{input})$
    • Нейрон: взаємопов'язаний обчислювальний вузол у функції
  • Спершу розроблено у 1940–1950-х
  • Початок 2000-х: застосування до «big data»
    • Розпізнавання зображень, обробка
    • Фінансові дані
    • Дані пошукових систем
  • Deep Learning: нейромережі як частина Machine Learning
    • 2015: Google публікує відкриту бібліотеку TensorFlow для Python
Кількісне управління ризиками в Python

Структура нейронної мережі

  • Шари: з'єднані обчислювальні нейрони
    • Вхідний шар

вхідний шар нейронної мережі

Кількісне управління ризиками в Python

Структура нейронної мережі

  • Структура нейронної мережі
    • Вхідний шар
    • Прихований шар

прихований шар нейронної мережі

Кількісне управління ризиками в Python

Структура нейронної мережі

  • Структура нейронної мережі
    • Вхідний шар
    • Прихований шар
    • Вихідний шар
  • Навчання: вивчити зв'язок між входом і виходом

зображення вхідного, прихованого та вихідного шарів

Кількісне управління ризиками в Python

Структура нейронної мережі

  • Структура нейронної мережі
    • Вхідний шар
    • Прихований шар
    • Вихідний шар
  • Навчання: вивчити зв'язок між входом і виходом
    • Ціни активів => Вхідний шар

зображення з цінами активів, що подаються в мережу

Кількісне управління ризиками в Python

Структура нейронної мережі

  • Структура нейронної мережі
    • Вхідний шар
    • Прихований шар
    • Вихідний шар
  • Навчання: вивчити зв'язок між входом і виходом
    • Ціни активів => Вхідний шар
    • Обробка у вхідному + прихованому шарах

зображення ребер-ваг у нейронній мережі

Кількісне управління ризиками в Python

Структура нейронної мережі

  • Структура нейронної мережі
    • Вхідний шар
    • Прихований шар
    • Вихідний шар
  • Навчання: вивчити зв'язок між входом і виходом
    • Ціни активів => Вхідний шар
    • Обробка у вхідному + прихованому шарах
    • Обробка у прихованому + вихідному шарах

зображення ваг від прихованого до вихідного шару

Кількісне управління ризиками в Python

Структура нейронної мережі

  • Структура нейронної мережі
    • Вхідний шар
    • Прихований шар
    • Вихідний шар
  • Навчання: вивчити зв'язок між входом і виходом
    • Ціни активів => Вхідний шар
    • Обробка у вхідному + прихованому шарах
    • Обробка у прихованому + вихідному шарах
    • Вихід => ваги портфеля

зображення вихідного шару як ваг портфеля

Кількісне управління ризиками в Python

Оптимізація портфеля за допомогою нейромереж

  • Навчання
    • Порівняти вихід із наявними «найкращими» вагами портфеля
    • Мета: мінімізувати «помилку» між виходом і вагами
    • Мала помилка => мережа навчена
  • Використання
    • Вхід: нові, ще не бачені ціни активів
    • Вихід: прогнозовані «найкращі» ваги портфеля для нових цін
    • Найкращі ваги = управління ризиком
Кількісне управління ризиками в Python

Створення нейромереж у 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))
Кількісне управління ризиками в Python

Навчання мережі в Python

  • Історичні ціни активів: матриця training_input
  • Історичні ваги портфеля: вектор training_output
  • Зібрати (compile) модель із:
    • заданою функцією мінімізації помилки («loss»)
    • заданим алгоритмом оптимізації («optimizer»)
  • Навчити (fit) модель на тренувальних даних
    • epochs: кількість циклів навчання для оновлення внутрішніх параметрів
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Кількісне управління ризиками в Python

Управління ризиками в Python

  • Використання: подайте нові (напр., реального часу) дані цін активів
    • Новий вектор new_asset_prices передається у вхідний шар
  • Оцініть мережу на нових цінах через model.predict()
    • Результат: predicted ваги портфеля
  • Назбирайте достатньо даних з часом => перенавчіть мережу
    • Перевірте мережу на минулих даних => бек-тестування
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Кількісне управління ризиками в Python

Давайте потренуємось!

Кількісне управління ризиками в Python

Preparing Video For Download...