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żenie : Niniejszy artykuł nie stanowi porady finansowej. Posiadam doktorat z inżynierii lotniczej i kosmicznej ze szczególnym uwzględnieniem uczenia maszynowego; nie jestem doradcą finansowym. 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 ważny: wierzyłem, że fizyka jest sprawiedliwa.
Nigdy nie popełniłem błędu w ćwiczeniu, ponieważ prędkość światła zmieniła się z dnia na dzień, ani dlatego, że e x nagle stało się ujemne. Za każdym razem, gdy czytałem artykuł z fizyki i myślałem: „To chyba nie ma sensu”, okazywało się, że to ja nie rozumiałem.
Dlatego fizyka jest zawsze sprawiedliwa i z tego powodu zawsze doskonała . Fizyka demonstruje tę doskonałość i sprawiedliwość za pomocą zbioru reguł, znanych jako równania różniczkowe.

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

To bardzo proste: zaczynamy tutaj, x₀ = 0, w czasie t=0, a następnie poruszamy się ze stałą prędkością 5 m/s. Oznacza to, że po jednej sekundzie jesteśmy 5 metrów (lub mil, jeśli wolisz) od punktu początkowego; po dwóch sekundach jesteśmy 10 metrów od punktu początkowego; po 0 43128 sekundach… Myślę, że rozumiesz.
Jak już mówiliśmy, jest to wyryte w kamieniu: idealne, idealne i niepodważalne. Wyobraź sobie jednak to w prawdziwym życiu. Wyobraź sobie, że jesteś na spacerze lub prowadzisz samochód. Nawet jeśli zrobisz wszystko, co w twojej mocy, aby jechać z zadaną prędkością, nigdy nie będziesz w stanie jej utrzymać. Twój umysł będzie w pewnych momentach galopował; możesz się rozproszyć, możesz zatrzymać się na czerwonym świetle, a najprawdopodobniej nastąpi kombinacja tych rzeczy. Dlatego proste równanie różniczkowe, o którym wspomnieliśmy wcześniej, może nie wystarczyć. Możemy spróbować przewidzieć twoją pozycję w równaniu różniczkowym, ale z pomocą sztucznej inteligencji . Ta koncepcja jest kluczowa w modelowaniu złożonych systemów.
Ta idea znajduje zastosowanie w sieciach neuronowych opartych na fizyce (PINN). Opiszemy je bardziej szczegółowo później, ale podstawowa koncepcja polega na tym, że staramy się dopasować dane do tego, 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 znacznie 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 także w modelach finansowych . Na przykład model Blacka-Scholesa wykorzystuje równanie różniczkowe do określenia ceny opcji kupna, przy pewnych ścisłych założeniach, w celu uzyskania portfela wolnego 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:
- Omówimy Model Blacka-Scholesa, jego założenia i równanie różniczkowe
- Porozmawiamy o Sieci neuronowe oparte na fizyce (PINN)skąd się wzięło i dlaczego jest przydatne
- Opracujemy własny algorytm, który będzie trenował PINN na Black-Scholesie, wykorzystując Python و Pochodnia و OOP.
- 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 modelowego Blacka-Scholesa, znajdziesz go tutaj . Zdecydowanie warto przeczytać 🙂
Dobrze, teraz musimy zrozumieć świat finansów , w którym się znajdujemy, jakie są zmienne i jakie zasady nim rządzą. Zrozumienie podstaw finansów i ich związku z teorią Blacka-Scholesa jest kluczowe.
Po pierwsze, w dziedzinie finansów istnieje potężny instrument zwany opcją kupna . Opcja kupna daje prawo (ale nie obowiązek) do zakupu akcji po określonej cenie w przyszłości (powiedzmy za rok), zwanej ceną wykonania.
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.
Zatem, gdy się nad tym zastanowimy, pomysł kupna akcji i sprzedaży opcji wydaje się idealnie zrównoważony . Chodzi mi o to, że losowość ceny akcji (fakt, że rośnie i spada) można w rzeczywistości złagodzić , posiadając odpowiednią liczbę opcji. Nazywa się to delta hedging i jest fundamentalną strategią zarządzania ryzykiem.
Opierając się na zestawie założeń, możemy wyznaczyć uczciwą cenę opcji , aby uzyskać portfel wolny od ryzyka . Koncepcja ta jest fundamentalna dla 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:
Cjest ceną opcji w czasie tsigmaChodzi o zmienność akcji.rJest to stopa wolna od ryzyka.tjest czasem (gdzie t=0 teraz i T w dacie końcowej)Sjest 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 poniżej znajduje się wykres ceny akcji (x) w stosunku do ceny opcji kupna (y) według modelu 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 oparte na fizyce (PINN), możesz zapoznać się z oryginalnym artykułem tutaj . Warto przeczytać. 🙂
Powyższe równanie ma charakter analityczny , ale ponownie przedstawia uczciwą cenę 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 z sprzężeniem zwrotnym i wytrenować ją z wykorzystaniem 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
Pełny kod, wraz z doskonałym plikiem README.md, doskonałym skoroszytem i bardzo przejrzystym kodem testowym, znajdziesz tutaj . Ten kod został zaprojektowany specjalnie do rozwiązania równania Blacka-Scholesa za pomocą sieci neuronowych PINN, zaawansowanej techniki 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 config.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ęcT = 1.0Oznacza 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 pliku main.py i służy do trenowania sieci PINN przy użyciu Torch oraz black_scholes.py.
Oto plik main.py:
Więc co możesz zrobić to:
- Utwórz własny plik config.json
- 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:
Konstruktor danych (rozważmy plik konfiguracyjny) znajduje się w pliku data.py :
Wbudowana funkcja strat, która uwzględnia wartość skośności, to loss.py. Funkcja ta jest niezbędna do poprawy 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:
- Gra z wieloma parametry znajduje się w config.json
- 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:
- Zaczęliśmy od fizyki.i jak jego prawa, zapisane w postaci równań różniczkowych, są sprawiedliwe, piękne i (zwykle) przewidywalne.
- 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.
- 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.
- 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.
- 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 przyswojenie tego wszystkiego na raz nie jest łatwe. W niektórych kwestiach musiałem być zwięzły, być może krótsze niż było to konieczne. Jeśli jednak chcesz lepiej zrozumieć, ponownie zajrzyj do folderu GitHub. Nawet jeśli nie interesuje Cię samo oprogramowanie, znajdziesz tam przejrzysty plik README.md i prosty plik example/BlackScholesModel.ipynb , który krok po kroku wyjaśnia działanie projektu.
Możliwość dodawania komentarzy nie jest dostępna.