Development2022.03.29 10 min. czytania
Wykrywanie Pump & Dump metodami ML

Pandemia COVID-19 wpłynęła na życie i zwyczaje miliardów ludzi na całym świecie. Jednym z nowo obserwowanych trendów jest widoczny wzrost zainteresowania rynkami finansowymi, jak obrazuje to rysunek 1.

Nie sposób nie zauważyć pięciokrotnego wzrostu obrotów generowanego przez indywidualnych inwestorów lub mówiąc inaczej – „zwykłych Kowalskich”. Podobny trend jest również obserwowany na giełdach kryptowalut. Powodów takiego stanu rzeczy jest wiele. Jednym z nich może być chęć ochrony kapitału przed potencjalnym kryzysem gospodarczym lub wysoką inflacją. Abstrahując od przyczyn, warto zadać sobie pytanie – jakie mogą być tego konsekwencje? Jedną z nich jest pojawienie się rzeszy mało doświadczonych inwestorów, których brak obycia z realiami rynkowymi może stanowić poważne zagrożenie w obliczu nie zawsze legalnych praktyk niektórych uczestników rynku.
Pump & Dump (Opis mechanizmu)
Pump & Dump to nazwa procesu manipulacji wyceną aktywu na rynku. Polega na sztucznym wywołaniu wzrostu ceny, poprzez budowanie złudzenia nagłego zainteresowania udziałami danej spółki. Gdy cena osiągnie odpowiednio wysoki poziom, osoba organizująca akcję sprzedaje wcześniej pozyskane akcje po zawyżonej cenie.
Rozbijmy ten mechanizm na etapy:
- Generowanie zwiększonego ruchu na spółce poprzez skupowanie akcji.
- Po dwóch, trzech dniach ciągłych wzrostów spowodowanych skupem, spółka przyciąga uwagę pozostałych uczestników rynku, którzy chcąc wykorzystać wzrost ceny, wystawiają oferty kupna.
- Gdy odpowiednia liczba inwestorów zainteresuje się spółką, organizator dokonuje kupna dużej liczby akcji, niejako „czyszcząc” kolejkę. Powoduje to gwałtowny wzrost notowania. Pozostali gracze widząc dynamikę, również chcą stać się posiadaczami udziałów spółki, podbijając cenę jeszcze wyżej. “Bańka” zaczyna żyć własnym życiem – sama się napędza.
- Po osiągnieciu odpowiedniego pułapu cenowego, organizator rozpoczyna stopniowo pozbywać się swoich udziałów, sprzedając je po zawyżonej cenie.
Kolejne dni to korekta i powrót kursu do poziomu z okolic sprzed całej akcji.
Aby operacja była możliwa do przeprowadzenia, ofiara ataku (czyli spółka) musi spełniać kilka kryteriów. Przede wszystkim jej kapitalizacja musi być odpowiednio niska, co zmniejsza wielkość kapitału wymaganego do przeprowadzenia akcji. Drugie kryterium to płynność spółki. Tutaj idealnie, aby była ona niska i ciągle istniała. Dzięki temu możliwe jest wygenerowanie ruchu w fazie pierwszej, a jednocześnie nasze transakcje są dominujące na danej spółce.

Uczenie maszynowe
Wzrost mocy obliczeniowych komputerów na przestrzeni ostatnich lat oraz postępująca cyfryzacja danych wytworzyły warunki sprzyjające rozwojowi zaawansowanych form analizy danych. W szczególności skorzystały na tym algorytmy sztucznej inteligencji. W wielkim skrócie, aby czerpać korzyści z tzw. modeli, musimy je wcześniej wytrenować, a więc „pokazać” historyczne dane związane z badanym problemem. Można zrealizować to na kilka sposobów. Dwa najpopularniejsze to tzw. uczenie nadzorowane oraz nienadzorowane. W przypadku tego pierwszego, wymagane jest określenie klasy dla każdej obserwacji – co jest widoczne na zdjęciu, czego dotyczy tekst lub czy dana transakcja jest oszustwem. W technikach nienadzorowanych, ograniczamy się jedynie do samych danych, bez określenia klasy każdej obserwacji. Jak to zazwyczaj bywa, każde z podejść ma swoje plusy i minusy. Niejednokrotnie, wytworzenie opisu danych niezbędnego do zastosowania technik nadzorowanych jest czynnością wymagającą dużych nakładów pracy oraz czasu, często angażując wiele osób o specyficznych umiejętnościach. Naturalnie, podnosi to koszt projektu oraz wydłuża czas jego realizacji.
Z tej perspektywy, uczenie nienadzorowane wydaje się lepsze. Nie jest to jednak cała prawda. Algorytmy nienadzorowane zazwyczaj działają w oparciu o podobieństwo. Grupują dane w tzw. klastry, które łączą najbardziej podobne obserwacje lub wskazują te odstające od pozostałych. Niestety, Data Scientist ma ograniczoną kontrolę nad tym procesem, co oznacza, że model może zwracać uwagę na inne aspekty danych, niż by to wynikało z intencji autora. Zazwyczaj oznacza to mniej precyzyjne predykcje, co przekłada się na słabsze wyniki w porównaniu do metod nadzorowanych. Z drugiej strony, brak wymogu oznaczenia każdej obserwacji skraca czas przygotowania danych. Może się również zdarzyć, że pozostawienie pełnej interpretacji danych po stronie modelu doprowadzi do odkrycia zależności wcześniej przeoczonych przez Data Scientist’a lub błędnie zignorowanych. Mimo wszystko, w praktyce bardziej pożądane są rozwiązania oparte o uczenie nadzorowane, ze względu na większą kontrolę nad procesem uczenia, możliwość dostosowania klas obserwacji do analizowanego problemu oraz lepsze wyniki.
Realizacja
Zastanówmy się nad możliwością automatycznego wykrywania opisanych wcześniej praktyk Pump & Dump. Niewątpliwie cechami charakterystycznymi mechanizmu są mocne wzrosty ceny i wolumenu. Jednocześnie nie dysponujemy oficjalną bazą zidentyfikowanych przypadków manipulacji. Manualne oznaczenie wszystkich dostępnych danych zajęłoby tygodnie pracy osoby wykwalifikowanej w wykrywaniu nieprawidłowości giełdowych. Takie przedsięwzięcie wykracza poza ramy zaplanowane na obecny artykuł. Zgodnie z wcześniejszym opisem technik uczenia maszynowego, skupię się na algorytmach typu nienadzorowanego. Niosą one za sobą ryzyko niezamierzonego wskazania prawidłowych notowań jako przypadków manipulacji. Wynika to z dużego podobieństwa Pump & Dump do sytuacji, jaka może mieć miejsce przykładowo po opublikowaniu nadspodziewanie dobrych wyników finansowych spółki. Ewentualne niuanse rozróżniające te dwa przypadki mogą nie zostać uwzględnione przez model, na co Data Scientist ma ograniczony wpływ.
Posiadając całą przedstawioną dotychczas wiedzę, postarajmy się zbudować model sztucznej inteligencji, którego zadaniem będzie wykrywanie nietypowych zdarzeń.
GAN
Generative Adversarial Networks, w skrócie GAN, to sposób trenowania modeli uczenia maszynowego, gdzie dwie sieci konkurują ze sobą. Zadaniem jednej z nich (generatora) jest wytwarzanie obserwacji, podczas gdy druga sieć (dyskryminator) próbuje rozróżnić obserwacje prawdziwe od wygenerowanych. Jako zbiór treningowy (prawdziwe obserwacje dla dyskryminatora) służą historyczne notowania spółek z giełdy NewConnect podzielone na sekwencje o długości od 5 do 90 dni.
Spółki notowane na rynku NewConnect wydają się być lepszym poligonem testowym niż te z szerzej znanego rynku głównego Giełdy Papierów Wartościowych. Wynika to przede wszystkim z ich bardziej podatnej na ataki Pump & Dump charakterystyki. W porównaniu do swoich odpowiedników z GPW cechują się mniejszą kapitalizacją, płynnością oraz popularnością. Z kolei długość sekwencji wynika z obserwacji historycznych notowań. Nie da się jednoznacznie stwierdzić, w którym momencie rozpoczyna się operacja manipulacji oraz kiedy się zakończy. Mimo wszystko 5 kolejnych notowań wydaje się wartością minimalną. Dłuższe okresy mają za zadanie uzupełnienie danych o szerszy kontekst.
Długość sekwencji | Liczebność zbioru treningowego | Liczebność zbioru testowego |
5 | 499 932 | 11 985 |
30 | 12 026 | 11 785 |
Idea stojąca za proponowanym rozwiązaniem jest dość prosta. Przebiegi wytwarzane przez generator upodabniają się do prawdziwych notowań, tak aby oszukać dyskryminator. Biorąc pod uwagę, że niestandardowe zmiany kursu/wolumenu zdarzają się stosunkowo rzadko, obydwie sieci dostosowują się do standardowych szeregów. Oznacza to, że wytrenowany dyskryminator powinien oznaczyć przypadek Pump & Dump jako „fałszywkę”.

Proces optymalizacji rozwiązania odbywał się iteracyjnie, zaczynając od treningów na mocno ograniczonej ilości danych oraz mniejszej sieci, które stopniowo były zwiększane po osiągnięciu punktu przetrenowania (ang. overfitting). Na potrzeby ewaluacji przygotowałem mały zbiór testowy, gdzie ręcznie oznaczyłem podejrzane przypadki uchwycone na giełdzie NewConnect.
Podejście pierwsze – warstwy Fully Connected
Warstwy Fully Connected, jako najprostsze elementy Deep Learningu, przetestowałem jako pierwsze. Posłużyły jako budulec dyskryminatora oraz generatora w ramach architektury GAN. Ze względu na swoje zdolności do „zapamiętywania” obserwacji, w początkowym etapie (dla ograniczonej ilości obserwacji) dawały bardzo dobre efekty. Niestety słabo radziły sobie z uogólnianiem na większej ilości danych.

Podejście drugie – LSTM
Z racji natury analizowanych danych (szeregi czasowe), naturalnym wydaje się zastosowanie warstw rekurencyjnych, a konkretniej LSTM (Long Short Term Memory). Ich główną zaletą jest branie pod uwagę całego szeregu punktów, a nie jedynie pojedynczej obserwacji. Wspomniana funkcjonalność jest realizowana przez układ bramek, które łączą napływające dane z informacjami uzyskanymi z poprzednich punktów sekwencji.

Niestety podobnie jak w poprzednim przypadku, wyniki nie są zadawalające. Sprawdziłem zarówno podejście z generatorem Fully Connected oraz dyskryminatorem LSTM, jak i takie, gdzie obydwie sieci opierały się o LSTM.

Podejście trzecie – konwolucja
Sieci konwolucyjne (splotowe) są powszechnie wykorzystywane w takich zagadnieniach jak przetwarzania obrazu, NLP czy sieci grafowe. Ze względu na tematykę artykułu, wykorzystamy je do interpretacji szeregów czasowych. Na potrzeby analizowanego przypadku wykorzystałem tzw. „Causal Convolution”.
Standardowa operacja splotu, zaaplikowana do jednowymiarowego szeregu czasowego, uwzględnia zarówno punkty znajdujące się „przed”, jak i „po” punkcie, dla którego wyliczana jest konwolucja, w tym konkretnym przypadku nazywana jednowymiarową. Przeanalizujmy to na przykładzie z rysunku poniżej. Nasz szereg to ciąg liczb po jednej dziennie (kolor zielony). Aplikujemy splot z wymiarem jądra równym 3, co zostało symbolicznie przedstawione kolorem szarym oraz strzałkami. Oznacza to, że podczas wyliczania nowego szeregu, wartość dla dnia 11.07.2021 jest wyliczana na podstawie danych z dni 10.07.2021, 11.07.2021 oraz 12.07.2021.

Jak widzimy, klasyczna konwolucja, w połączeniu z danymi o określonej kolejności, rodzi problem „zaglądania” w przyszłość. Causal Convolution ogranicza dane wejściowe jedynie do tych „historycznych”, zachowując tym samym przyczyno-skutkowość. Realizowane jest to poprzez niesymetryczne jądro splotu, które uwzględnia jedynie dane z przeszłości.

Wyniki uzyskane w ten sposób wyglądały stosunkowo najatrakcyjniej.

Wyniki
Uzyskanie sieci generującej realistycznie wyglądające notowania giełdowe nie jest prostym zagadnieniem. Mimo, że jest to swego rodzaju produkt uboczny, powstająxcy podczas trenowania dyskryminatora, można traktować go jako dobry wyznacznik jakości sieci typu GAN. Niestety w większości zrealizowanych treningów, wygenerowane przebiegi nie przypominały prawdziwych notowań. Dodatkowo, na jakość uzyskiwanych wyników wpłynęło zjawisko tzw. „mode colapse”, które powoduje ograniczenie różnorodności danych pochodzących od generatora.
Wyniki uzyskane na zbiorze testowym cechował znaczny rozrzut. Ten sam model dyskryminatora, w zależności od czasu treningu, mógł wskazywać wszystkie obserwacje ze zbioru testowego jako fałszywe, prawdziwe lub robiąc to w sposób całkowicie losowy. Z tego względu, ciężko mówić o jakiejś konkretnej wartości metryki. Ewentualnie otrzymany wysoki wynik klasyfikacji (np. AUC powyżej 0.8), może być spowodowany przypadkowym dostosowaniem się dyskryminatora do stosunkowo niewielkiego zbioru testowego.

Metody klasyczne
Zweryfikujmy możliwości detekcji nietypowych zdarzeń przy pomocy bardziej ugruntowanych technik – klasycznego uczenia maszynowego oraz zbioru reguł. W tym celu zmienię nieco format danych. Pojedynczą obserwacją w zbiorze będzie notowanie z danego dnia oraz cechy opisujące zmianę wartości danej akcji. Oczywiście wpłynie to na liczność zbiorów danych.
Liczebność zbioru treningowego | Liczebność zbioru testowego |
468 663 | 10 783 |
Modelowanie
Na pierwszy plan weźmy algorytm Isolation Forest. Jego celem jest wskazanie nietypowych obserwacji w zbiorze. W wielkim skrócie – algorytm dokonuje podziałów na podstawie wartości wybranej zmiennej. Zarówno wybór cechy, jak i wartości, względem której następuje podział, są wybierane losowo. Obserwacje odstające potrzebują istotnie mniejszej ilości podziałów, aby zostać wyizolowanymi. Zweryfikujmy skuteczność Isolation Forrest na grupie spółek, co do których mamy podejrzenie, że są ofiarami ataku Pump & Dump.

Na wykresie powyżej (rysunek 11) widzimy notowania oraz ich pochodne dla jednej ze spółek. Operacje, którym zostały poddane oryginalne dane, to przede wszystkim ustandaryzowanie zakresu oraz wyznaczenie dziennych różnic (gradientów). Przypadki zidentyfikowane jako nietypowe zostały oznaczone czerwonymi liniami w górnej części wykresu. Wydaje się, że model całkiem dobrze poradził sobie z wykryciem anomalii w obserwowanych danych. Podobne spostrzeżenie nasuwają się po przeanalizowaniu drugiego wykresu, tj. rysunku 12.

Do jego wytworzenia wykorzystałem algorytm PCA, który zredukował liczbę wymiarów do dwóch (wcześniej nie istniejących), co umożliwiło stworzenie czytelnej wizualizacji. Każdy punkt reprezentuje jedną obserwację. Kolory rozróżniają, czy została ona uznana za normalną, czy anormalną. Wyraźnie widoczne jest skupienie niebieskich punktów, podczas gdy te reprezentujące obserwacje anormalne znajdują się zdecydowanie dalej od centrum. Jest to poniekąd potwierdzenie skuteczności modelu w identyfikowaniu nietypowych obserwacji.
Na koniec wykresy macierzy pomyłek oraz ROC dla zbioru testowego:


Zestaw reguł
Opisane dotychczas metody nie wyczerpują wszystkich dostępnych rozwiązań. Dla zwiększenia kompletności analizy problemu warto skonfrontować wyniki z podejściem opartym o zestaw reguł. Jest ono najprostsze koncepcyjnie, co nie musi oznaczać gorszych rezultatów.
Jako wyznacznik „normalności” wykorzystałem sumę odległości danej obserwacji od średniej, wyrażoną w jednostkach odległości standardowej. Przykładowo, dla przypadku obserwacji, gdzie wartość pierwszej cechy wynosi 5, średnia 3, a odchylenie standardowe 2, wynik to:

Operacja jest powtarzana dla pozostałych cech, a wartości bezwzględne sumowane. Dwa poniższe wykresy przedstawiają rozkład uzyskanych wyników, odpowiednio dla sum, jak i pojedynczych kolumn.


Zgodnie z oczekiwaniami, rozkład jest silnie skupiony wokół niskich wartości. Jako kryterium przynależności do grupy anomalnej przyjąłem zaobserwowanie wartości przekraczającej 99 centyl, dla sumy odległości lub dowolnej cechy opisującej pojedyncze notowanie. Poniżej widzimy analogiczne wizualizacje jak dla podejścia z modelem Isolation Forest. Wydaje się, że wyniki otrzymane z wykorzystaniem reguł są nieco gorsze.




Wnioski
Prace wykonane w ramach artykułu można podzielić na dwa obszary – generowanie notowań oraz wykrywanie nietypowych przypadków. To pierwsze zdecydowanie nie należy do prostych zadań. Trenowanie modeli opartych o architekturę GANów wiąże się z wieloma problemami, takimi jak dobór odpowiednio balansujących się dyskryminatora i generatora, optymalne parametry treningu itp. Mimo wszystko, rozwiązanie wykorzystujące sieci typu „Causal Convolution” może posłużyć jako punkt wyjścia do dalszych badań w tym kierunku. Uzyskane w ten sposób wyniki wyglądały całkiem realistycznie.
W kwestii wykrywania praktyk Pump & Dump lepiej spisały się standardowe metody wykrywania anomalii: Isolation Forest oraz zestaw reguł. Na wcześniej przygotowanym zbiorze testowym osiągnęły wyniki, które mogą świadczyć o użyteczności modeli. Jednocześnie należy zwrócić uwagę na brak oficjalnych danych na temat przypadków wykrycia opisywanych praktyk oraz skali procederu, a co za tym idzie, dobrze zdefiniowanego zbioru. Nie każdy istotny skok notowań bądź wolumenu transakcji musi oznaczać nielegalne praktyki, co dodatkowo wprowadza kolejny stopień trudności do ogółu rozwiązania.
Podsumowując, opisane oraz zastosowanie techniki nienadzorowanego uczenia maszynowego zdołały namierzyć prawdopodobne przypadki manipulacji giełdowych. Zgodnie z przewidywaniami, otrzymane wyniki są obarczone niedokładnościami wynikającymi z natury uczenia nienadzorowanego.