Kiedy fizyka spotyka się z finansami: wykorzystanie sztucznej inteligencji do rozwiązania równania Blacka-Scholesa

Oto jak używać sieci neuronowych opartych na fizyce do rozwiązywania modeli finansowych przy użyciu języka Python.

ZastrzeżenieTo nie jest porada finansowa. Mam doktorat z inżynierii lotniczej i kosmicznej ze szczególnym uwzględnieniem uczenia maszynowego. Nie jestem Doradca finansowy. Niniejszy artykuł ma na celu wyłącznie zademonstrowanie potencjału sieci neuronowych opartych na fizyce (PINN) w kontekście finansowym.

Kiedy miałem 16 lat, zakochałem się w fizyce. Powód był prosty, ale potężny: wierzyłem, że fizyka sprawiedliwy.

Nigdy nie popełniłem błędu w ćwiczeniu, ponieważ prędkość światła zmieniła się z dnia na dzień lub ponieważ nagle mogłem...x Negatywne. Za każdym razem, gdy czytałem artykuł z fizyki i myślałem: „To nie ma sensu” Okazało się, że To ja nie zrozumiałem.

Fizyka jest więc zawsze sprawiedliwa i dlatego zawsze ZakonnicaFizyka ukazuje tę doskonałość i sprawiedliwość poprzez swój zbiór reguł, znany jako równania różniczkowe.

Najprostsze równanie różniczkowe jakie znam wygląda tak:

Bardzo proste: zaczynamy tutaj, x0=0, w chwili t=0, poruszamy się ze stałą prędkością 5 m/s. Oznacza to, że po 1 sekundzie jesteśmy 5 metrów (lub mil, jeśli wolisz) od początku układu współrzędnych; po 2 sekundach jesteśmy 10 metrów od początku układu współrzędnych; po 43128 sekundach... Myślę, że rozumiesz, o co chodzi.

Jak już mówiliśmy, to jest wyryte w kamieniu: idealne, doskonałe i niepodważalne. Wyobraź sobie jednak to w prawdziwym życiu. Wyobraź sobie, że jesteś na spacerze lub jedziesz samochodem. Nawet jeśli starasz się jechać z zadaną prędkością, nigdy nie będziesz w stanie jej utrzymać. Twój umysł będzie w pewnych momentach galopował; może się rozproszysz, może zatrzymasz się na czerwonym świetle, a najprawdopodobniej nastąpi kombinacja powyższych. Może więc proste równanie różniczkowe, o którym wspomnieliśmy wcześniej, nie wystarczy. Możemy spróbować przewidzieć twoją lokalizację na podstawie równania różniczkowego, Ale Wsparcie Sztuczna inteligencjaKoncepcja ta jest niezwykle istotna przy modelowaniu złożonych systemów.

Pomysł ten jest stosowany w Sieci neuronowe oparte na fizyce (PINN). Opiszemy to szczegółowo później, ale chodzi o to, że próbujemy dopasować Ktokolwiek Dane i to, co wiemy z równania różniczkowego opisującego zjawisko. Oznacza to, że wymuszamy, aby nasze rozwiązanie generalnie spełniało nasze oczekiwania względem fizyki. Wiem, że brzmi to jak czarna magia, ale obiecuję, że stanie się to jaśniejsze w tym artykule.

A teraz najważniejsze pytanie:

 

Co mają wspólnego finanse z fizyką i opartymi na fizyce sieciami neuronowymi?

Okazuje się, że równania różniczkowe są przydatne nie tylko dla osób zainteresowanych prawami wszechświata, ale mogą być również przydatne w Modele finansoweNa przykład model wykorzystuje Blacka-Scholesa Równanie różniczkowe służące do określenia ceny opcji kupna, przy pewnych ścisłych założeniach, w celu uzyskania Portfel wolny od ryzyka.

Cel tego bardzo złożonego wprowadzenia był dwojaki:

  • Trochę Cię zdezorientuję, więc możesz czytać dalej :)
  • Zainteresuj się na tyle, żeby zobaczyć dokąd to wszystko zmierza.

Mam nadzieję, że mi się udało 😁. Jeśli tak, reszta artykułu będzie przebiegać według następujących kroków:

  1. Omówimy Model Blacka-Scholesa, jego założenia i równanie różniczkowe
  2. Porozmawiamy o Sieci neuronowe oparte na fizyce (PINN)skąd się wzięło i dlaczego jest przydatne
  3. Opracujemy własny algorytm, który będzie trenował PINN na Black-Scholesie, wykorzystując Python و Pochodnia و OOP.
  4. Pokażemy wyniki naszego algorytmu.

Nie mogę się doczekać! Idę do laboratorium! 🧪

1. Model Blacka-Scholesa: dogłębne spojrzenie

 

Jeśli jesteś zainteresowany przeczytaniem oryginalnego artykułu badawczego na temat modelu Blacka-Scholesa, znajdziesz go tutaj. Tutaj. Zdecydowanie warto przeczytać :)

Okej, teraz musimy zrozumieć świat. Finanse Gdzie jesteśmy, jakie są zmienne i jakie prawa nimi rządzą. Zrozumienie podstaw finansów i ich związku z teorią Blacka-Scholesa jest kluczowe.

Po pierwsze, w finansach istnieje potężne narzędzie zwane Ogórek Opcja kupna. Opcja kupna daje prawo (ale nie obowiązek) do zakupu akcji po określonej cenie w określonej przyszłości (np. za rok), która nazywana jest ceną wykonania. Cena).

Pomyślmy o tym przez chwilę, dobrze? Załóżmy, że dziś cena akcji wynosi 100 dolarów. Załóżmy również, że posiadamy opcję kupna z ceną wykonania 100 dolarów. Załóżmy, że za rok cena akcji wzrośnie do 150 dolarów. Świetnie! Możemy wykorzystać tę opcję kupna, aby kupić akcje, a następnie natychmiast je odsprzedać! Właśnie zarobiliśmy 150 dolarów – 100 dolarów = 50 dolarów. Z drugiej strony, jeśli cena akcji spadnie do 80 dolarów za rok, nie możemy tego zrobić. Właściwie lepiej byłoby w ogóle nie korzystać z opcji kupna, aby nie stracić pieniędzy.

Więc teraz, gdy o tym pomyślimy, pomysł jest taki, kupić akcję و Sprzedaj opcję Popatrz W pełni zintegrowanyMam na myśli to, że losowość ceny akcji (fakt, że rośnie i spada) może w rzeczywistości Rozjaśnij to Zachowując odpowiednią liczbę opcji. To się nazywa Zabezpieczenie delty. Jest to podstawowa strategia zarządzania ryzykiem.

Na podstawie zbioru założeń możemy wyprowadzić uczciwa cena opcji Aby otrzymać portfel Bez ryzykaKoncepcja ta jest podstawą modelu Blacka-Scholesa.

Nie chcę zanudzać Was szczegółami wyprowadzenia (szczerze mówiąc, w oryginalnym artykule nie jest to trudne do zrozumienia), ale równanie różniczkowe dla portfela wolnego od ryzyka wygląda następująco:

Gdzie:

  • C jest ceną opcji w czasie t
  • sigma Chodzi o zmienność akcji.
  • r Jest to stopa wolna od ryzyka.
  • t jest czasem (gdzie t=0 teraz i T w dacie końcowej)
  • S jest to aktualna cena akcji

Na podstawie tego równania możemy wyznaczyć uczciwą cenę opcji kupna dla portfela wolnego od ryzyka. Równanie jest zamknięte i analityczne i wygląda następująco:

z:

gdzie N(x) jest skumulowaną funkcją rozkładu (CDF) standardowego rozkładu normalnego, K jest ceną wykonania, a T jest datą wygaśnięcia.

Na przykład tak wygląda wykres. Cena akcji (x) Naprzeciwko Opcja kupna (y), zgodnie z modelem Blacka-Scholesa.

Brzmi świetnie i w ogóle, ale co to ma wspólnego z fizyką i PINN? Równanie wydaje się być analityczne, więc dlaczego PINN? Dlaczego AI? Dlaczego w ogóle to czytam? Odpowiedź poniżej 👇:

 

2. Sieci neuronowe oparte na fizyce

 

Jeśli interesują Cię sieci neuronowe wykorzystujące fizykę (PINN), możesz zapoznać się z oryginalnym artykułem. Tutaj. Ponownie, warto przeczytać. 🙂

Teraz równanie powyżej AnalitycznyAle znowu, to równanie dla uczciwej ceny w idealnym scenariuszu. Co się stanie, jeśli na chwilę to zignorujemy i spróbujemy oszacować cenę opcji na podstawie ceny akcji i czasu? Na przykład, moglibyśmy użyć sieci neuronowej typu feed-forward i wytrenować ją za pomocą propagacji wstecznej. To podejście stanowi podstawę wykorzystania sieci neuronowych w wycenie opcji.

W tym mechanizmie szkoleniowym minimalizujemy błąd:

L = |Estimated C - Real C|:

To dobre i najprostsze podejście do sieci neuronowej, jakie można zastosować. Problem polega na tym, że całkowicie ignorujemy równanie Blacka-Scholesa. Czy istnieje inny sposób? Czy możemy go uwzględnić?

Oczywiście, że możemy, jeśli ustawimy błąd na:

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

gdzie PDE(C,S,t) wynosi:

Powinna być jak najbliższa 0:

Ale pytanie wciąż pozostaje. Dlaczego to jest „lepsze” niż proste równanie Blacka-Scholesa? Dlaczego nie po prostu użyć równania różniczkowego? Cóż, ponieważ czasami, w życiu, rozwiązanie równania różniczkowego nie gwarantuje „prawdziwego” rozwiązania. Fizyka często przybliża pewne rzeczy i robi to w sposób, który może prowadzić do rozbieżności między tym, czego oczekujemy, a tym, co widzimy. Właśnie dlatego sieci neuronowe oparte na fizyce (PINN) są tak niesamowitym i wspaniałym narzędziem: próbujesz dopasować się do fizyki, ale jesteś rygorystyczny co do tego, że wyniki muszą odpowiadać temu, co „widzisz” w swoim zbiorze danych. Ta integracja modelu fizycznego i danych eksperymentalnych czyni to podejście wyjątkowym.

W naszym przypadku, aby uzyskać portfel wolny od ryzyka, może się okazać, że teoretyczny model Blacka-Scholesa nie do końca odpowiada zaszumionym, stronniczym lub niekompletnym danym rynkowym, które obserwujemy. Być może zmienność nie jest stała. Być może rynek nie jest efektywny. Być może założenia leżące u podstaw równania nie sprawdzają się. W takich sytuacjach przydatne może okazać się podejście takie jak PINN. Nie tylko znajdujemy rozwiązanie, które spełnia równanie Blacka-Scholesa, ale także „ufamy” temu, co widzimy na podstawie danych. Pozwala to na stworzenie modelu, który jest bardziej elastyczny i adaptowalny do rzeczywistych warunków rynkowych.

Dobra, dość teorii. Czas zacząć kodować. 👨‍💻

 

3. Praktyczne zastosowanie z wykorzystaniem Pythona

Można znaleźć pełny kod, a także świetny plik README.md, doskonały notatnik i bardzo przejrzysty kod szablonowy. TutajKod ten został zaprojektowany specjalnie w celu rozwiązania równania Blacka-Scholesa przy użyciu sieci neuronowych PINN, zaawansowanej metody w dziedzinie modelowania finansowego.

Uwaga: Ta część będzie nieco intensywna (dużo kodu), więc jeśli nie interesuje Cię programowanie, możesz pominąć ten rozdział i przejść do następnego. Wyniki przedstawię w bardziej intuicyjny sposób :)

Dziękuję Ci bardzo, że udało Ci się dotrzeć tak daleko ❤️
Zobaczmy, jak to zrobić. Przyjrzyjmy się teraz, jak zastosować tę technikę do rozwiązywania równań Blacka-Scholesa, skupiając się na aspektach praktycznych i szczegółowych.

3.1 Plik Config.json

Cały kod można uruchomić za pomocą bardzo prostego pliku konfiguracyjnego, który nazwałem konfiguracja.json.

Możesz umieścić go gdziekolwiek chcesz, jak zobaczymy później.

Ten plik jest niezbędny, ponieważ definiuje wszystkie parametry, które regulują naszą symulację, generowanie danych i trenowanie modelu. Pozwólcie, że szybko wyjaśnię, co reprezentuje każda wartość:

  • K: Cena wykonania – Cena, po której opcja daje Ci prawo do zakupu akcji w przyszłości.
  • T: Czas do terminu płatności, w latach. Więc T = 1.0 Oznacza to, że opcja wygasa za jedną jednostkę (np. za rok) od teraz.
  • r: stopa procentowa wolna od ryzyka Stopa procentowa używana do dyskontowania wartości przyszłych. To jest stopa procentowa, którą określamy w naszej symulacji.
  • sigma: fluktuacja Akcje, które określają, jak trudna lub „ryzykowna” jest prognoza ceny akcji. Ponownie, jest to parametr symulacji.
  • N_data: liczba syntetyczne punkty danych który chcemy utworzyć do treningu. To również określi rozmiar modelu.
  • min_S و max_S: Zakres cen akcji Co chcemy pobrać, tworząc dane syntetyczne? Minimalną i maksymalną cenę naszych akcji.
  • bias: Opcjonalne przesunięcie dodane do cen opcjiAby zasymulować systematyczną zmianę danych. Ma to na celu stworzenie kontrastu między światem rzeczywistym a danymi Blacka-Scholesa.
  • noise_variance: poziom hałasu Dodano do cen opcji w celu symulacji pomiaru lub szumu rynkowego. Ten parametr dodano z tego samego powodu, co poprzednio.
  • epochs: liczba duplikaty na którym będzie trenowany model.
  • lr: szybkość uczenia się Dla optymalizatora. Kontroluje, jak szybko model jest aktualizowany podczas treningu.
  • log_interval:Ile razy (w odniesieniu do wieku) chcemy Drukuj rekordy Aby monitorować postępy szkolenia.

Każdy z tych parametrów odgrywa określoną rolę – niektóre kształtują symulowany przez nas świat finansów, a inne kontrolują interakcję naszej sieci neuronowej z tym światem. Niewielkie zmiany w tym zakresie mogą skutkować zupełnie innym zachowaniem, dzięki czemu plik jest zarówno odporny, jak i wrażliwy. Zmiana wartości w tym pliku JSON radykalnie zmieni wynik kodu.

3.2 main.py (plik main.py)

Przyjrzyjmy się teraz, jak reszta kodu wykorzystuje tę konfigurację w praktyce.

Główna część naszego kodu pochodzi z main.pyAby wytrenować sieć PINN przy użyciu Torch, black_scholes.py.

Oto plik main.py:

Więc co możesz zrobić to:

  1. Utwórz własny plik config.json
  2. Uruchom polecenie python main.py --config config.json

Plik main.py jest używany przez wiele innych plików.

3.3 black_scholes.py i jego pomocnicy

Aplikacja modelu Blacka-Scholesa znajduje się w pliku. black_scholes.py:

Pliku tego można używać do budowania, trenowania, eksportowania i przewidywania modelu.
Funkcja ta korzysta również z plików pomocniczych, takich jak data.py, loss.py i model.py.
W pliku znajduje się szablon Torch. model.py:

Generator danych (w kontekście pliku konfiguracyjnego) znajduje się wewnątrz pliku. dane.py:

Zintegrowana funkcja straty obejmująca wartość skośną to strata.pyFunkcja ta jest niezbędna do zwiększenia dokładności modelu.

4. Wyniki

Otóż ​​po uruchomieniu pliku main.py nasza sieć neuronowa typu feedforward (FFNN) zostaje wytrenowana i otrzymujemy następujące dane:

Jak widać, błąd modelu nie jest dokładnie równy zero, ale równanie różniczkowe cząstkowe (PDE) modelu jest znacznie mniejsze niż dane. Oznacza to, że model (naturalnie) nadmiernie konkuruje z naszymi przewidywaniami, aby spełnić równania różniczkowe. Dokładnie o tym mówiliśmy wcześniej: poprawiamy wydajność zarówno pod względem naszych danych, jak i modelu Blacka-Scholesa.

Możemy zaobserwować jakościowo wysoką zgodność między zaszumionym i obciążonym stronniczo (dość realistycznym) zbiorem danych ze świata rzeczywistego a siecią PINN.

Oto wyniki dla t = 0, a cena akcji zmienia się wraz z opcją kupna przy stałej wartości t. Całkiem fajnie, prawda? Ale to jeszcze nie koniec! Możesz przeanalizować wyniki, korzystając z powyższego kodu, na dwa sposoby:

  1. Gra z wieloma parametry znajduje się w config.json
  2. Zobacz prognozy na t>0

Cieszyć się! :)

5. Wnioski

Dziękuję bardzo, że dotarłeś tak daleko. To była naprawdę długa podróż 😅
Oto, co omówiliśmy w tym artykule:

  1. Zaczęliśmy od fizyki.i jak jego prawa, zapisane w postaci równań różniczkowych, są sprawiedliwe, piękne i (zwykle) przewidywalne.
  2. Przeszliśmy do finansówPoznaliśmy model Blacka-Scholesa — równanie różniczkowe, którego celem jest wycena opcji w sposób wolny od ryzyka.
  3. Badaliśmy sieci neuronowe uwzględniające fizykę (PINN)., rodzaj sieci neuronowej, która nie tylko dopasowuje dane, ale także respektuje leżące u jej podstaw równanie różniczkowe. Sieci PINN to potężne narzędzie do modelowania złożonych systemów.
  4. Wszystko zrobiliśmy w Pythonie.Korzystamy z PyTorch i czystej bazy danych testowych, która umożliwia modyfikowanie parametrów, generowanie danych syntetycznych i trenowanie własnych PINN-ów w celu rozwiązania równania Blacka-Scholesa.
  5. Sfotografowaliśmy rezultaty. Widzieliśmy, jak sieć uczyła się dopasowywać nie tylko do zaszumionych danych, ale także do zachowań oczekiwanych na podstawie równania Blacka-Scholesa.

Wiem, że ogarnięcie tego wszystkiego naraz nie jest łatwe. W niektórych kwestiach byłem z konieczności zwięzły, być może krótsze niż było to konieczne. Jeśli jednak chcesz zobaczyć to jaśniej, spójrz ponownie na… Folder GitHub. Nawet jeśli nie interesuje Cię oprogramowanie, dostępny jest przejrzysty plik README.md i prosty szablon. przykład/BlackScholesModel.ipynb Projekt jest wyjaśniony krok po kroku.

 

Możliwość dodawania komentarzy nie jest dostępna.