Управление рисками с нейронными сетями

Количественное управление рисками на Python

Jamsheed Shorish

Computational Economist

Обновление портфеля в реальном времени

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

Нейронные сети

  • Нейронная сеть: $\text{output} = f(\text{input})$
    • Нейрон: взаимосвязанный узел обработки внутри функции
  • Первоначально разработаны в 1940–1950-х гг.
  • Начало 2000-х: применение нейронных сетей к «большим данным»
    • Распознавание и обработка изображений
    • Финансовые данные
    • Данные поисковых систем
  • Глубокое обучение: нейронные сети как часть машинного обучения
    • 2015: Google выпускает библиотеку глубокого обучения TensorFlow с открытым исходным кодом для Python
Количественное управление рисками на Python

Структура нейронной сети

  • Слои: связанные нейроны обработки
    • Входной слой

входной слой нейронной сети

Количественное управление рисками на Python

Структура нейронной сети

  • Структура нейронной сети
    • Входной слой
    • Скрытый слой

скрытый слой нейронной сети

Количественное управление рисками на Python

Структура нейронной сети

  • Структура нейронной сети
    • Входной слой
    • Скрытый слой
    • Выходной слой
  • Обучение: выявление зависимости между входом и выходом

входной, скрытый и выходной слои нейронной сети

Количественное управление рисками на Python

Структура нейронной сети

  • Структура нейронной сети
    • Входной слой
    • Скрытый слой
    • Выходной слой
  • Обучение: выявление зависимости между входом и выходом
    • Цены активов => Входной слой

цены активов, поступающие на вход нейронной сети

Количественное управление рисками на Python

Структура нейронной сети

  • Структура нейронной сети
    • Входной слой
    • Скрытый слой
    • Выходной слой
  • Обучение: выявление зависимости между входом и выходом
    • Цены активов => Входной слой
    • Обработка во входном и скрытом слоях

веса рёбер в нейронной сети

Количественное управление рисками на Python

Структура нейронной сети

  • Структура нейронной сети
    • Входной слой
    • Скрытый слой
    • Выходной слой
  • Обучение: выявление зависимости между входом и выходом
    • Цены активов => Входной слой
    • Обработка во входном и скрытом слоях
    • Обработка в скрытом и выходном слоях

веса от скрытого к выходному слою

Количественное управление рисками на Python

Структура нейронной сети

  • Структура нейронной сети
    • Входной слой
    • Скрытый слой
    • Выходной слой
  • Обучение: выявление зависимости между входом и выходом
    • Цены активов => Входной слой
    • Обработка во входном и скрытом слоях
    • Обработка в скрытом и выходном слоях
    • Выход => веса портфеля

выходной слой нейронной сети как веса портфеля

Количественное управление рисками на Python

Нейронные сети для оптимизации портфеля

  • Обучение
    • Сравнение выхода с заранее известными «оптимальными» весами портфеля
    • Цель: минимизировать «ошибку» между выходом и весами
    • Малая ошибка => сеть обучена
  • Применение
    • Вход: новые, ранее не виденные цены активов
    • Выход: предсказанные «оптимальные» веса портфеля для новых цен
    • Оптимальные веса = управление рисками
Количественное управление рисками на Python

Создание нейронных сетей на Python

  • Keras: высокоуровневая Python-библиотека для нейронных сетей и глубокого обучения
  • Подробнее: Introduction to Deep Learning with Keras

 

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
  • Компиляция модели с указанием:
    • функции минимизации ошибки ('loss')
    • алгоритма оптимизации ('optimizer')
  • Обучение модели на обучающих данных
    • 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...