Когда физика встречается с финансами: использование ИИ для решения уравнения Блэка-Шоулза

Вот как использовать физико-информационные нейронные сети для решения финансовых моделей с помощью Python.

Предупреждение : Данная статья не является финансовой консультацией. У меня докторская степень в области аэрокосмической инженерии с упором на машинное обучение; я не являюсь финансовым консультантом. Цель данной статьи — исключительно продемонстрировать возможности нейронных сетей, основанных на физических принципах (PINN), в финансовом контексте.

В 16 лет я влюбился в физику. Причина была проста, но веская: я верил, что физика справедлива.

Я никогда не ошибался в упражнениях из-за того, что скорость света изменилась за одну ночь, или из-за того, что e x внезапно стало отрицательным. Каждый раз, когда я читал статью по физике и думал: «Это как-то не имеет смысла», оказывалось, что это я сам не понимал.

Следовательно, физика всегда справедлива, и по этой причине она всегда совершенна . Физика демонстрирует это совершенство и справедливость посредством своего свода правил, известных как дифференциальные уравнения.

Самое простое дифференциальное уравнение, которое я знаю, это:

Всё очень просто: мы начинаем здесь, x₀ = 0, в момент времени t=0, а затем движемся с постоянной скоростью 5 м/с. Это значит, что через одну секунду мы окажемся в 5 метрах (или милях, если хотите) от начальной точки; через две секунды — в 10 метрах от начальной точки; через 0 43128 секунд… Думаю, вы поняли.

Как мы уже говорили, это незыблемое правило: идеально, совершенно и неоспоримо. Однако представьте это в реальной жизни. Представьте, что вы гуляете или едете на машине. Даже если вы изо всех сил стараетесь двигаться с заданной скоростью, вам никогда не удастся поддерживать её постоянно. В определённые моменты ваши мысли будут метаться; вы можете отвлечься, остановиться на светофоре, и, скорее всего, произойдёт сочетание всего этого. Поэтому простого дифференциального уравнения, о котором мы говорили ранее, может быть недостаточно. Что мы можем сделать, так это попытаться предсказать ваше положение в дифференциальном уравнении, но с помощью искусственного интеллекта . Эта концепция имеет решающее значение при моделировании сложных систем.

Эта идея применяется в нейронных сетях, основанных на физических принципах (PINN). Мы опишем их подробнее позже, но основная концепция заключается в том, что мы пытаемся согласовать данные с тем, что нам известно из дифференциального уравнения, описывающего явление. Это означает, что мы заставляем наше решение в целом удовлетворять тому, что мы ожидаем от физики. Я знаю, это звучит как черная магия, но я обещаю, что в этой статье все станет намного понятнее.

А теперь главный вопрос:

 

Какое отношение финансы имеют к физике и нейронным сетям на ее основе?

Оказывается, дифференциальные уравнения полезны не только для тех, кто интересуется законами Вселенной; они также могут быть полезны в финансовых моделях . Например, модель Блэка-Шоулза использует дифференциальное уравнение для определения цены опциона колл при соблюдении определенных строгих предположений, чтобы получить безрисковый портфель.

Цель этого весьма сложного введения была двоякой:

  • Немного запутаю вас, чтобы вы могли продолжить чтение :)
  • Проявите любопытство и посмотрите, к чему все это приведет.

Надеюсь, мне это удалось 😁. Если вы это сделаете, то остальная часть статьи будет посвящена следующим шагам:

  1. Мы обсудим Модель Блэка-Шоулза, его предположения и его дифференциальное уравнение
  2. Мы поговорим о Физические нейронные сети (PINN), откуда он взялся и чем он полезен
  3. Мы разработаем собственный алгоритм, который обучает PINN на основе алгоритма Блэка-Шоулза, используя Питон и факел и ООП.
  4. Мы покажем результаты нашего алгоритма.

Я взволнован! В лабораторию! 🧪

1. Модель Блэка-Шоулза: подробный взгляд

 

Если вас заинтересовала оригинальная статья о модели Блэка-Шоулза, вы можете найти её здесь . Определённо стоит прочитать 🙂

Итак, теперь нам нужно понять мир финансов, в котором мы находимся, какие переменные существуют и какие правила им управляют. Понимание основ финансов и их связи с моделью Блэка-Шоулза имеет решающее значение.

Во-первых, в сфере финансов существует мощный инструмент, называемый опционом колл . Опцион колл дает вам право (но не обязанность) купить акции по определенной цене в будущем (например, через год), которая называется ценой исполнения.

Давайте задумаемся об этом на минутку, ладно? Предположим, что цена акций сегодня составляет 100 долларов. Предположим также, что у нас есть опцион колл с ценой исполнения 100 долларов. Теперь предположим, что в течение года цена акций вырастет до 150 долларов. Это потрясающе! Мы можем использовать этот колл-опцион, чтобы купить акции, а затем немедленно продать их обратно! Мы только что получили прибыль в размере 150 долларов - 100 долларов = 50 долларов. С другой стороны, если цена акций упадет до 80 долларов в течение года, мы не сможем этого сделать. На самом деле, нам лучше вообще не пользоваться своим правом покупки, чтобы не терять деньги.

Итак, если задуматься, идея покупки акций и продажи опционов кажется идеально сбалансированной . Я имею в виду, что случайность цены акций (тот факт, что она колеблется) может быть фактически смягчена за счет владения правильным количеством опционов. Это называется дельта-хеджированием, и это фундаментальная стратегия управления рисками.

Исходя из ряда предположений, мы можем определить справедливую цену опциона для получения безрискового портфеля . Эта концепция является основополагающей для модели Блэка-Шоулза.

Я не хочу утомлять вас всеми подробностями вывода (честно говоря, в оригинальной статье это несложно понять), но дифференциальное уравнение для безрискового портфеля выглядит следующим образом:

Имя:

  • C цена опциона в момент времени t
  • sigma Это волатильность акций.
  • r Это безрисковая ставка.
  • t время (при t=0 сейчас и T в конечной дате)
  • S текущая цена акций

Из этого уравнения мы можем вывести справедливую цену опциона колл для безрискового портфеля. Уравнение замкнутое и аналитическое и выглядит следующим образом:

с:

где N(x) — кумулятивная функция распределения (CDF) стандартного нормального распределения, K — цена исполнения, а T — дата истечения срока.

Например, это график зависимости цены акции (x) от цены опциона колл (y) согласно модели Блэка-Шоулза.

Это, конечно, звучит здорово, но какое отношение это имеет к физике и PINN? Уравнение, похоже, аналитическое, так почему же PINN? Почему искусственный интеллект? Зачем я вообще это читаю? Ответ ниже 👇:

 

2. Нейронные сети, основанные на физике

 

Если вас интересуют нейронные сети, основанные на физических принципах (PINN), вы можете ознакомиться с оригинальной статьей здесь . Повторюсь, её стоит прочитать. 🙂

Приведенное выше уравнение является аналитическим , но, опять же, оно представляет собой справедливую цену в идеальном сценарии. Что произойдет, если мы на мгновение отвлечемся от этого и попытаемся угадать цену опциона, основываясь на цене акции и времени? Например, мы могли бы использовать нейронную сеть прямого распространения и обучить ее с помощью обратного распространения ошибки. Этот подход лежит в основе использования нейронных сетей в ценообразовании опционов.

В этом механизме обучения мы минимизируем ошибку:

L = |Estimated C - Real C|:

Это хорошо, и это самый простой подход с использованием нейронной сети, который вы можете реализовать. Проблема здесь в том, что мы полностью игнорируем уравнение Блэка-Шоулза. Так есть ли другой путь? Можем ли мы их объединить?

Конечно, мы можем это сделать, если установим ошибку следующим образом:

L = |Estimated C - Real C|+ PDE(C,S,t)

где PDE(C,S,t) равно:

Он должен быть как можно ближе к 0:

Но вопрос все еще остается. Почему это «лучше» простого уравнения Блэка-Шоулза? Почему бы нам просто не использовать дифференциальное уравнение? Ну, потому что иногда в жизни решение дифференциального уравнения не гарантирует вам «истинного» решения. Физика обычно приближает вещи, и делает это таким образом, что может возникнуть разница между тем, что мы ожидаем, и тем, что видим. Вот почему нейронные сети, основанные на физике (PINN), являются таким удивительным и замечательным инструментом: вы пытаетесь соответствовать физике, но вы строго следите за тем, чтобы результаты соответствовали тому, что вы «видите» в своем наборе данных. Именно интеграция физической модели и экспериментальных данных отличает этот подход.

В нашем случае, возможно, для получения безрискового портфеля мы обнаруживаем, что теоретическая модель Блэка-Шоулза не совсем соответствует зашумленным, предвзятым или неполным рыночным данным, которые мы наблюдаем. Возможно, волатильность не является постоянной величиной. Возможно, рынок неэффективен. Возможно, предположения, лежащие в основе уравнения, не выдерживают критики. Вот тут-то и может пригодиться такой подход, как PINN. Мы не только находим решение, удовлетворяющее уравнению Блэка-Шоулза, но и «доверяем» тому, что видим из данных. Это позволяет создать более гибкую модель, которая легко адаптируется к реальным рыночным условиям.

Ладно, хватит теории. Давайте писать код. 👨‍💻

 

3. Практическое применение с использованием Python

Полный код, а также отличный файл README.md, замечательную рабочую тетрадь и очень понятный тест производительности можно найти здесь . Этот код специально разработан для решения уравнения Блэка-Шоулза с использованием нейронных сетей PINN, передовой технологии в области финансового моделирования.

Примечание: эта часть будет немного интенсивной (много кода), и если вас не интересует программное обеспечение, смело переходите к следующей главе. Я покажу результаты более простым способом :)

Спасибо большое, что зашли так далеко ❤️
Давайте посмотрим, как это можно реализовать. Давайте теперь рассмотрим, как применять этот метод для решения уравнений Блэка-Шоулза, уделяя особое внимание практическим и детальным аспектам.

3.1 Файл config.json

Весь код можно запустить, используя очень простой конфигурационный файл, который я назвал config.json.

Как мы увидим позже, вы можете разместить его где угодно.

Этот файл имеет важное значение, поскольку он определяет все параметры, управляющие нашим моделированием, генерацией данных и обучением модели. Позвольте мне быстро объяснить, что представляет собой каждое значение:

  • K: Цена исполнения – Цена, по которой опцион дает вам право купить акции в будущем.
  • T: Время до даты платежа, в годах. разрешение T = 1.0 Это означает, что срок действия опциона истекает через одну единицу (например, через год).
  • r: безрисковая процентная ставка Используется для дисконтирования будущих значений. Это процентная ставка, которую мы указываем в нашем моделировании.
  • sigma: колебания Акция, которая определяет, насколько сложно предсказать цену акции или насколько она «рискованна». Опять же, это параметр моделирования.
  • N_data: число синтетические точки данных Который мы хотим создать для обучения. Это также определит размер узора.
  • min_S и max_S: Диапазон цен акций Которые мы хотим использовать при создании синтетических данных. Наша минимальная и максимальная цена акций.
  • bias: К ценам опционов добавлено опционное смещение, чтобы имитировать систематический сдвиг в данных. Это делается для того, чтобы создать контраст между реальным миром и данными Блэка-Шоулза.
  • noise_variance: уровень шума Добавляется к ценам опционов для имитации измерения или рыночного шума. Этот параметр добавлен по той же причине, что и раньше.
  • epochs: число повторения на котором будет обучаться модель.
  • lr: скорость обучения Для благотворителя. Это контролирует скорость обновления модели во время обучения.
  • log_interval:Количество раз (в терминах возраста), которое мы хотим Печать записей Для контроля за ходом обучения.

Каждый из этих параметров играет определенную роль: некоторые из них формируют финансовый мир, который мы моделируем, а другие контролируют, как наша нейронная сеть взаимодействует с этим миром. Небольшие изменения здесь могут привести к совершенно иному поведению, делая этот файл одновременно мощным и чувствительным. Изменение значений этого JSON-файла радикально изменит вывод вашего кода.

3.2 main.py (файл main.py)

Теперь давайте посмотрим, как остальная часть кода использует эту конфигурацию на практике.

Основная часть нашего кода взята из файла main.py , который используется для обучения вашей нейронной сети PINN с помощью Torch, и файла black_scholes.py.

Это файл main.py:

Итак, что вы можете сделать:

  1. Создайте свой собственный файл config.json
  2. Выполнить команду python main.py --config config.json

Файл main.py используется многими другими файлами.

3.3 black_scholes.py и его плагины

Применение модели Блэка-Шоулза находится в файле black_scholes.py :

Этот файл можно использовать для построения, обучения, экспорта и прогнозирования модели.
Функция также использует некоторые вспомогательные файлы, такие как data.py, loss.py и model.py.
Внутри файла находится шаблон Torch. модель.py:

Конструктор данных (обратите внимание на файл конфигурации) находится внутри файла data.py :

Встроенная функция потерь, учитывающая значение асимметрии, находится в файле loss.py. Эта функция необходима для повышения точности модели.

4. Результаты

Итак, когда мы запускаем main.py, наша нейронная сеть прямого распространения (FFNN) обучается, и мы получаем следующее:

Как видите, ошибка модели не равна точно 0, но уравнение PDE модели намного меньше данных. Это означает, что модель (естественно) заставляет наши прогнозы строго соответствовать дифференциальным уравнениям. Это именно то, о чем мы говорили ранее: мы улучшаем производительность с точки зрения имеющихся у нас данных и с точки зрения модели Блэка-Шоулза.

Мы можем наблюдать качественно высокое соответствие между зашумленным + смещенным (довольно реалистичным) реальным набором данных и сетью PINN.

Это результаты, когда t = 0, а цена акций изменяется вместе с опционом колл при фиксированном значении t. Круто, не правда ли? Но это еще не конец! Вы можете изучить результаты, используя приведенный выше код, двумя способами:

  1. Играя со многими параметры находится в config.json
  2. Посмотреть прогнозы на т>0

Я слушаю! :)

5. Выводы

Большое спасибо, что пришли сюда. На самом деле, это был долгий путь 😅
Вот что мы рассмотрели в этой статье:

  1. Мы начали с физики.и как ее законы, записанные в виде дифференциальных уравнений, справедливы, красивы и (обычно) предсказуемы.
  2. Мы перешли к финансамИ мы познакомились с моделью Блэка-Шоулза — дифференциальным уравнением, целью которого является оценка опционов безрисковым способом.
  3. Мы исследовали нейронные сети, основанные на физике (PINN)., тип нейронной сети, которая не просто подгоняет данные, но и учитывает базовое дифференциальное уравнение. PINN — мощный инструмент для моделирования сложных систем.
  4. Мы все сделали на Python.Использование PyTorch и чистой базы данных эталонных тестов, которая позволяет вам настраивать параметры, генерировать синтетические данные и обучать ваши собственные PINN для решения уравнения Блэка-Шоулза.
  5. Мы сфотографировали результаты. Мы увидели, как сеть научилась соответствовать не только зашумленным данным, но и поведению, ожидаемому от уравнения Блэка-Шоулза.

Я понимаю, что усвоить всё это за один раз непросто. В некоторых местах я был излишне краток, возможно, даже короче, чем нужно. Однако, если вы хотите получить более ясное понимание, ещё раз, загляните в папку на GitHub. Даже если вас не интересует программное обеспечение, там есть понятный файл README.md и простой пример example/BlackScholesModel.ipynb , который пошагово объясняет проект.

 

Комментарии закрыты.