Okładka książki „Machine Learning for Algorithmic Trading” Stefana Jansena, drugie wydanie, Packt Publishing

Recenzja książki

Machine Learning for Algorithmic Trading

  • Praktyka 8/10 ile da się wdrożyć
  • Głębia 6/10 siła argumentu
  • Aktualność 9/10 czy nie zestarzała się

To jest encyklopedia uczenia maszynowego w handlu: ponad osiemset stron, dwadzieścia kilka rozdziałów, ponad sto sześćdziesiąt notatników na GitHubie i cała droga od surowych danych do przetestowanej strategii. Trzymamy ją w bibliotece z dwóch powodów. Pierwszy jest oczywisty: to najbliższa rzecz planowi tego, co sami budujemy, czyli systemu badawczego opartego na ML. Drugi waży więcej. Jansen nie sprzedaje marzenia. Przez całą książkę pokazuje, jak rzadko model naprawdę bije rynek i w których miejscach najłatwiej okłamać samego siebie, kiedy się próbuje.

Sztych: otwarty wielki tom encyklopedii, z którego kart wije się inżynierski rurociąg z trybów i przewodów; surowa ruda przechodzi etap po etapie i kończy jako jeden mały wypolerowany wskaźnik pomiarowy.
Cała droga od surowych danych do przetestowanej strategii w jednym tomie: mapa pipeline'u, nie przepis. Sztych Bractwa Rynku.

Encyklopedia, nie przepis

Jansen nie pisze o jednym modelu ani o jednej strategii. Pisze o całym procesie, który nazywa workflow ML4T (od pomysłu, przez dane i cechy, po model, backtest i ocenę wyników), i to jest największa wartość tej książki. Dostajesz mapę całego pipeline’u, a nie luźny zbiór trików. Kolejne rozdziały to kolejne przystanki na tej drodze: skąd brać dane rynkowe, fundamentalne i alternatywne, jak konstruować czynniki alfa, jak optymalizować portfel, a potem cała galeria metod, od regresji liniowej i lasów losowych, przez boosting, po sieci splotowe, autoenkodery i uczenie ze wzmocnieniem.

Co od razu ustawia ton: autor mówi wprost, czego tu nie ma.

It should not be a surprise that this book does not provide investment advice or ready-made trading algorithms. On the contrary, it intends to communicate that ML faces many additional challenges in the trading domain, ranging from lower signal content to shorter time series that often make it harder to achieve robust results.

Stefan Jansen, Przedmowa

To rzadka uczciwość jak na książkę z „algorithmic trading” w tytule. Jansen celowo wstawia do niej przykłady, które nie dają świetnych wyników, żeby nie zawyżać korzyści z ML i nie ukrywać, ile pracy kosztuje dobry pomysł, właściwe dane i sensowne cechy. Czyta się to jak warsztat, nie jak ofertę kursu, który zrobi z ciebie milionera. Dla nas to pierwszy sygnał, że trafiła na właściwą półkę.

Sygnał ginie w szumie

Reszta książki tłumaczy, dlaczego handel jest jednym z najtrudniejszych poligonów dla uczenia maszynowego, i dotyka rzeczy, którą my w warsztacie traktujemy jak prawo fizyki: w danych finansowych sygnału jest bardzo mało, a szumu bardzo dużo. To nie jest ImageNet, gdzie kot jest kotem na milionach zdjęć. Tu relacja, której szukasz, jest słaba, niestabilna i tonie w przypadkowych ruchach ceny.

The use of powerful models with a high capacity to learn patterns requires particular care to avoid overfitting when the signal-to-noise ratio is as low as is often the case with financial data.

Stefan Jansen, Rozdział 23

Z tego jednego zdania wynika połowa dyscypliny, której się trzymamy. Im potężniejszy model, tym łatwiej nauczy się szumu zamiast sygnału, bo ma pojemność, żeby zapamiętać przypadek. Przy niskim stosunku sygnału do szumu prosty model często wygrywa z bardziej wymyślnym, nie dlatego że jest mądrzejszy, tylko dlatego że ma mniej miejsca, żeby się oszukać. Jansen wraca do tego kompromisu między obciążeniem a wariancją wielokrotnie, i robi dobrze, bo to jest ten moment, w którym entuzjazm wobec głębokich sieci rozbija się o naturę rynku.

Sztych: dłoń przesiewa przez sito ogromną kłębiącą się hałdę chaotycznego żwiru i szumu; w oczku sita ledwie zatrzymuje się jedna maleńka złota drobina prawdziwego sygnału.
W danych finansowych sygnału jest mało, a szumu bardzo dużo. Sztych Bractwa Rynku.

Jeśli męczyć dane dość długo

Tu leży serce książki i powód, dla którego w ogóle warto ją trzymać blisko. Skoro sygnału jest mało, a narzędzi i danych dużo, to najłatwiejszą rzeczą na świecie jest znaleźć wzorzec, którego nie ma. Wystarczy testować dość długo, a coś w końcu „zadziała” na danych historycznych. Jansen nazywa to po imieniu, powołując się na krytykę Marcosa Lópeza de Prado:

In other words, statistical significance often results from large-scale trial-and-error rather than a true systematic relationship, along the lines of “if you torture the data long enough, it will confess.”

Stefan Jansen, Rozdział 23

Męczenie danych aż się przyznają to dokładnie ten mechanizm, który zamienia przeszukiwanie setek wariantów w fałszywe odkrycie. Im więcej prób, tym większa szansa, że jakaś wypadnie świetnie czystym przypadkiem, a overfitting backtestu jest wtedy nie wpadką, tylko nieuniknionym kosztem łatwego dostępu do danych. Jansen nie udaje, że ma na to magiczne lekarstwo. Pokazuje za to konkretne narzędzia, na czele z deflowanym wskaźnikiem Sharpe’a, który koryguje wynik o liczbę przeprowadzonych eksperymentów, i z dyscypliną stawiania hipotezy przed testem, a nie po. To samo robimy u siebie: liczymy w jednostkach R, trzymamy zbiór testowy nietknięty do końca i zakładamy, że pojedynczy ładny backtest jest raczej podejrzany niż obiecujący.

Sztych: arkusz liczb przypięty do tortury i mechanicznie rozciągany, aż się przyznaje; z męczonej kartki wyłania się podejrzanie idealna rosnąca krzywa.
Jeśli męczyć dane dość długo, w końcu się przyznają, czyli wynik z przeszukiwania, nie z prawdy. Sztych Bractwa Rynku.

Dane, które kłamią o czasie

Drugie pęknięcie, na które książka uczula, jest cichsze i przez to groźniejsze: dane, które wiedzą za dużo o przyszłości. Jeśli do treningu wpuścisz informację, której w danym momencie historycznie jeszcze nie było, model nauczy się przewidywać coś, czego w realnym handlu nie zobaczy. Jansen formułuje to twardo:

ML algorithms trained on distorted historical data will almost certainly fail during live trading.

Stefan Jansen, Rozdział 1

„Almost certainly fail” to mocne słowa i są na miejscu. Look-ahead bias i przeciek danych nie psują wyniku trochę, one go unieważniają, bo backtest mierzy wtedy coś, czego nie da się powtórzić na żywo. Stąd uparte powtarzanie zasady point-in-time: dane mają odzwierciedlać tylko to, co było wiadome w danej chwili. Brzmi banalnie, dopóki nie zacznie się składać własnego zbioru danych z trzecich źródeł, gdzie znacznik czasu publikacji bywa przesunięty i trzeba go ręcznie cofać. To jest robota nudna i niewdzięczna, a decyduje o tym, czy strategia w ogóle ma prawo bytu.

Sztych: wielka tarcza zegara z jasną pionową linią teraźniejszości; mechaniczna dłoń sięga na stronę przyszłości, wyrywa świecący punkt danych i wpuszcza go z powrotem do leja zasilającego maszynę uczącą.
Dane, które wiedzą za dużo o przyszłości, unieważniają backtest. Sztych Bractwa Rynku.

Alfa się rozpuszcza

Załóżmy, że przeszedłeś przez wszystkie pułapki i naprawdę znalazłeś przewagę. Książka i tu studzi, przypominając, że rynek nie stoi w miejscu. Przewaga, którą znajdziesz, nie jest przewagą, którą zatrzymasz.

Factor decay is a major challenge: the excess returns from new anomalies have been shown to drop by a quarter from discovery to publication, and by over 50 percent after publication due to competition and crowding.

Stefan Jansen, Rozdział 1

Te liczby warto zapamiętać. Ćwierć nadwyżki znika między odkryciem a publikacją, ponad połowa po publikacji, bo inni robią to samo i tłok zjada efekt. To jest argument przeciwko traktowaniu jakiegokolwiek czynnika jak wiecznego źródła zysku i za ciągłym monitorowaniem, czy to, co działało rok temu, działa dalej. W naszym kontekście znaczy to jedno: nawet dobrze zwalidowana strategia ma datę przydatności, a praca nie kończy się na wdrożeniu, tylko na nim się zaczyna.

Sztych: pojedyncza świecąca złota sztabka przewagi rynkowej rozpływa się w smudze dymu, gdy zewsząd sięgają po nią chciwe dłonie; sztabka jest już w połowie roztopiona.
Przewaga, którą znajdziesz, nie jest przewagą, którą zatrzymasz: alfa się rozpuszcza. Sztych Bractwa Rynku.

Jak tego używamy

Po co my, ludzie od jednego instrumentu, wzięliśmy do biblioteki książkę o całym zoo metod ML na akcjach? Nie jako podręcznik finansów, bo tych zasad nie potrzebujemy. Wzięliśmy ją jako mapę inżynierską dokładnie tego pipeline’u, który składamy: system R&D na kontrakcie MES (Micro E-mini S&P 500), gdzie najpierw są pomiary, koszty i logika setupów, a warstwa ML ma później wspierać decyzje o wielkości pozycji i momencie wyjścia.

Trzy rzeczy bierzemy stąd wprost. Pierwsza to szkielet workflow: rozdzielenie fazy badawczej (projekt i ocena czynników) od fazy egzekucji (sygnał, zlecenie, ryzyko portfela), bo to porządkuje myślenie i nie pozwala mylić ładnego wykresu z działającą strategią. Druga to dyscyplina wobec liczb: zanim ucieszymy się jakimkolwiek wynikiem, korygujemy go o liczbę prób i pytamy, czy to nie jest przeszukana do skutku iluzja. Trzecia to higiena danych w czasie, czyli żelazne pilnowanie walidacji krzyżowej bez zaglądania w przyszłość.

Jednego książka za nas nie zrobi i sama to przyznaje: nie policzy naszych kosztów. Nagroda dla naszego systemu musi być liczona po prowizji, po spreadzie i po poślizgu, w jednostkach R, bo inaczej zoptymalizujemy wynik z symulacji, którego na rachunku nie zobaczymy. Jansen daje narzędzia i nazywa miejsca, gdzie najłatwiej skłamać samemu sobie. Resztę, czyli wpięcie tego w realia jednego instrumentu intraday, musimy dopisać sami.

Sztych: rysunek techniczny podzielony pionowym szwem na dwie połowy; po lewej warsztat badawczy z wagą, suwmiarką i szkłem powiększającym nad czynnikami, po prawej linia egzekucji z manometrem, dźwignią i zaworem ryzyka zasilającym jedno wyjście.
Rozdzielenie fazy badawczej od egzekucji na jednym instrumencie: szkielet, który bierzemy z książki wprost. Sztych Bractwa Rynku.

Gdzie książka pęka

Najuczciwiej o grubej książce mówi się, wskazując, gdzie się łamie. Pierwsze pęknięcie to cena za szerokość. Dwadzieścia kilka rozdziałów znaczy, że każda metoda dostaje tyle miejsca, by zadziałać w przykładzie, ale nie tyle, by ją zrozumieć do dna. To kompendium i książka kucharska, nie wykład teorii. Po matematykę lasów losowych, boostingu czy autoenkoderów i tak trzeba sięgnąć gdzie indziej, a Jansen sam podsuwa akademickie odnośniki na końcu każdego rozdziału.

Drugie pęknięcie: produktem jest tu kod, a kod starzeje się szybciej niż idea. Przykłady stoją na konkretnych wersjach (pandas 1.0, TensorFlow 2.2, własna odmiana Zipline), więc część notatników już dziś wymaga ręcznego doprowadzenia do biegu, a repozytorium żyje własnym życiem, osobno od papierowej książki. Same zasady, sygnał kontra szum, backtest, który nie kłamie, są trwałe. Otoczka, w której je podano, nie jest.

Trzecie pęknięcie dotyczy akurat nas najmocniej: to jest świat akcji na danych dziennych, miejscami minutowych. Prawie każdy przykład to amerykańskie spółki, koszyki long-short, przekrój wielu instrumentów naraz. My pracujemy na jednym kontrakcie futures, intraday. Dyscyplina przenosi się w całości, bo prawda o szumie i przeuczeniu jest uniwersalna. Konkretne zbiory danych, założenia o świecy dziennej i strategie przekrojowe już się tak gładko nie przekładają, i trzeba o tym pamiętać, zanim się przepisze cudzy notatnik na własny rynek.

Czwarte, na koniec, to wysoki próg wejścia, którego autor nie ukrywa. Książka zakłada Pythona, statystykę i podstawy ML. Kto tego nie ma, utonie, zanim dojdzie do pierwszego backtestu. To nie wada, to uczciwa deklaracja adresata.

Sztych: masywna, ceglasta księga stoi pionowo z głębokimi pęknięciami biegnącymi przez grzbiet; przez jedną szczelinę widać rdzewiejące, starzejące się tryby, a kamienny rdzeń księgi pozostaje nienaruszony.
Zasady są trwałe, otoczka z kodu starzeje się szybciej niż idea. Sztych Bractwa Rynku.

Werdykt

Praktyczność 8, głębia 6, aktualność 9.

Praktyczność wysoko, bo to najpełniejszy plan budowy, jaki mamy w bibliotece: kompletny pipeline od danych do oceny strategii, z kodem na każdym kroku. Ujmuję jej jeden punkt względem czysto warsztatowego McKinneya, którego notatniki po prostu się uruchamiają, bo tutaj droga od kodu do działania jest dłuższa. Osiemset stron trzeba zaadaptować, część przykładów odświeżyć, a daleko od naszego instrumentu trzeba sporo przepisać. To narzędzie o ogromnym potencjale, ale z realnym tarciem.

Głębię stawiam pośrodku i to też jest spójne z tym, co napisałem wyżej. Książka ma autentyczną głębię w jednym wymiarze, w epistemologii ML na rynku: skąd biorą się fałszywe odkrycia, dlaczego backtest kłamie, jak korygować Sharpe’a o liczbę prób. To są rozdziały, do których wracamy. Ale pojedyncza metoda nigdy nie jest tu pociągnięta do teoretycznego dna, a szerokość rozcieńcza głębokość. Stąd szóstka, nie wyżej.

Aktualność najwyżej, i to świadomie. Nic w naszej bibliotece nie jest bliższe inżynierii tego, co budujemy, niż ta pozycja: system badawczy oparty na ML to dokładnie jej temat. Niedopasowanie instrumentu (akcje dzienne zamiast futures intraday) zdjąłem z praktyczności, nie z aktualności, bo dyscyplina i pułapki, o których mówi Jansen, są takie same niezależnie od tego, czym się handluje.

Komu polecić? Praktykowi, który zna już Pythona i podstawy ML i chce zobaczyć cały proces od danych do strategii w jednym miejscu, z uczciwym spisem miejsc, w których łatwo oszukać samego siebie. Kto szuka gotowego algorytmu, który zarabia, odłoży książkę rozczarowany, i dobrze, bo Jansen pierwszy mówi, że go tu nie ma. U nas ta cegła ma rolę roboczą: nie jako wyrocznia, lecz jako mapa pipeline’u i lista pułapek, którą trzymamy pod ręką, kiedy ML wejdzie do naszego systemu na poważnie.