28.08.2015

Sieci neuronowe i ich wykorzystanie w podejmowaniu decyzji inwestycyjnych

Sieci neuronowe są pomocne  w sytuacjach gdzie ciężko poradzić sobie z ogromem napływających informacji, które trzeba przetworzyć i wyciągnąć z nich wnioski. Z tego powodu znalazły zastosowanie w wielu dziedzinach życia. Z powodzeniem można je również stosować do pomocy w podejmowaniu decyzji  inwestycyjnych, bo czy giełda nie jest właśnie takim miejscem gdzie człowiek może poczuć się przytłoczony wielką liczbą napływających informacji?

Sieci neuronowe są zagadnieniem pochodzącym z nauki zwanej sztuczną inteligencją. To struktury matematyczne, których zasada działania jest uproszczonym odwzorowaniem działania ludzkiego mózgu. Mózg jest ”narzędziem”, które być może nie radzi sobie zbyt sprawnie z przemnożeniem dwóch dużych liczb, ale jeśli chodzi o interpretacje obrazów, czy podejmowanie złożonych decyzji długo jeszcze nie zostanie zastąpiony przez komputer, choćby z największą mocą obliczeniową. Mimo matematycznych zdolności procesorów brakuje im możliwości uczenia się.  Są w stanie wykonać tylko te czynności, do których zostały zaprogramowane. Naukowcy próbując odwzorować działanie mózgu stworzyli sieci neuronowe, które pomimo niedoskonałości tego odwzorowania znalazły zastosowanie w wielu dziedzinach. Ich największymi atutami są możliwość uczenia się i zmniejszona wrażliwość na uszkodzenia elementów. Są używane na przykład w medycynie, w NASA – do sterowania ramieniem robota, na lotnisku JFK do szukania bomb, w Ford Motor Company  – w diagnostyce silników. A to tylko kilka ciekawych zastosowań.

Skupmy się teraz na ich architekturze. Nie będę wdawał się w szczegóły aby nikogo nie zniechęcić. Zajmiemy się tylko podstawami, które są bardzo intuicyjne. Sieci są zazwyczaj zbudowane z 3 głównych warstw: wejściowej, ukrytej i wyjściowej. Warstwa wejściowa przyjmuje dane, które są wprowadzane do sieci. Każdy z jej neuronów(neuron to najmniejsza część sieci) wysyła otrzymane dane do każdego z neuronów pierwszej warstwy ukrytej. W warstwie ukrytej badane są powiązania między otrzymanymi danymi. Wnioski płynące z tych analiz przekazywane są do warstwy wyjściowej która łączy je by uzyskać konkretny wynik, przekazywany następnie na zewnątrz sieci jako zmienna wyjściowa.  Z zastrzeżeniem, że warstwa ukryta może się składać z praktycznie nieograniczonej liczby warstw wewnętrznych. W praktyce okazało się, że w większości przypadków do sprawnego działania wystarcza warstwa ukryta składająca się z dwóch warstw wewnętrznych. Najmniejszą część sieci nazywamy neuronem. Oto przykładowy schemat:

Samo działanie sieci może póki co wydawać się niejasne i dlatego posłużę się prostym przykładem zaczerpniętym z artykułu Wolf’a von Rönik’a(S&C V. 21:4 (74-79)). O to model prostej sieci, którą będziemy się posługiwać.

Do sieci zostają podstawione historyczne dane wejściowe(I1,I2,I3). Wewnątrz sieci są ważone odpowiednimi wagami (W1, W2, W3)  i sumowane. Z tak powstałego wyniku odczytujemy zmienną wyjściową. Jeśli jest ona zgodna z wynikiem historycznym,  to podstawiamy następne dane wejściowe i powtarzamy całą procedurę. Jeśli wynik nie odpowiada  historycznemu musimy dobrać inne wartości przyjmowane do ważenia danych wejściowych.

Autor posługując się prostą siecią neuronową chce rozstrzygać czy powinien kupować S&P 500, sprzedawać czy pozostać neutralny wobec rynku. W tym celu za dane wejściowe posłużą:

I1

Stopy procentowe

I2

Stopa bezrobocia

I3

Siła dolara

Przyjęto następujący system, który standaryzuje dane przed wprowadzaniem do sieci:

Stopy procentowe

Stopa bezrobocia

Siła dolara

Powyżej 10%

10

Powyżej 6%

10

Mocny

10

8-10%

0

4-6%

0

Umiarkowany

0

Poniżej 8%

-10

Poniżej 4%

-10

Słaby

-10

Reguły zajmowania pozycji na rynku są następujące:

Kupno

Gdy zmienna wyjściowa jest równa 30

Sprzedaż

Gdy zmienna wyjściowa jest równa -30

Pozycja neutralna

Gdy należy do przedziału (-30,30)

Dla pierwszej iteracji wagom przypisujemy wartość 1. W1=W2=W3=1.  Możemy teraz przystąpić do trenowania naszej sieci. Sieci neuronowe różnią się od strategii mechanicznych tym, że nie określamy z góry warunków, które muszą spełnić dane wejściowe, żeby wygenerować odpowiedni sygnał. To sieć w wyniku trenowania ma odkryć powiązania i wzorce zachodzące pomiędzy danymi na wejściu i odpowiedzieć nam na pytanie jakie warunki muszą być spełnione do wygenerowania sygnału. Trenowanie polega na przedstawianiu sieci  przypadków empirycznych(znanych z doświadczenia) składających się z danych wejściowych i rezultatu. Należy tak zoptymalizować wagi występujące w sieci aby jej działanie wyjaśniało jak najwięcej przypadków historycznych.

Przejdźmy do trenowania naszej sieci. Nasz pierwszy przypadek historyczny wygląda następująco:

Stopa procentowa

10

Stopa bezrobocia

10

Siła dolara

10

Pozycja rynkowa

neutralna

Z tej historycznej sytuacji wynika, że powinniśmy zostać neutralni wobec rynku. Podstawmy dane wejściowe i zobaczmy co zasugeruje sieć w początkowej konfiguracji.

f(I1,I2,I3) = 1*10+1*10+1*10 = 30

Sieć sugeruje kupno, a więc musimy zmienić wagi tak by dopasować jej decyzję do wyniku historycznego. Autor przykładu, aby uprościć sprawę zakłada, że wagi mogą przyjmować tylko 3 wartości: 1,0,-1.  Zmieniamy więc na przykład W3 na -1. Teraz wynik sieci to 10. Czyli dane wyjściowe są zgodne z wynikiem historycznym. Oczywiście wynik pomiędzy -30, a 30 mogliśmy uzyskać z wielu różnych kombinacji wag, ale w tym momencie jest obojętne, którą wybierzemy. Z wprowadzaniem kolejnych danych empirycznych sytuacja będzie się stopniowo komplikować. Przy dużych próbach stosuje się często algorytmy genetyczne w celu znalezienie odpowiednich wag. Przejdźmy do wprowadzenia drugiego zestawu danych empirycznych.

Stopa procentowa

-10

Stopa bezrobocia

10

Siła dolara

10

Pozycja rynkowa

Kupuj

Po podstawieniu do naszej obecnej sieci:

f(I1,I2,I3) = 1*(-10)+1*10+(-1)*10 = -10

Pożądany przez nas poziom to 30. Jest tylko jedna kombinacja wag, która da taki wynik: W1=-1, W2=1, W3=1.

f(I1,I2,I3) =(- 1)*(-10)+1*10+1*10 = 30

Co więcej ta kombinacja sprawia, że również poprzednie dane wejściowe będą dawały wynik zgodny z historycznym.

f(I1,I2,I3)=(-1)*10+1*10+1*10 = 20, a więc sygnał dla pozycji neutralnej.

Generalnie rzecz biorąc im większy jest zbiór zestawów danych historycznych użytych do trenowania sieci tym wagi będą lepiej zoptymalizowane. Mam nadzieję, że po tym przykładzie pojęcia budowy i trenowania sieci się rozjaśniły.

Przewagą sieci neuronowych nad typowymi strategiami mechanicznymi jest ich umiejętność adaptacji. Wraz z napływem nowych informacji wagi będą cały czas doskonalone. A nasza sieć ciągle będzie dopasowywać się do sytuacji rynkowej. Należy jednak pamiętać, że nie jest to żadna magiczna metoda pozwalająca przewidywać przyszłość. Cały czas opieramy się na danych historycznych, które niekoniecznie muszą mieć znaczenie dla przyszłych giełdowych scenariuszy.

Przejdźmy teraz do zagrożeń jakie stwarza wykorzystanie sieci neuronowych. Mimo, że mają wiele zalet, to trzeba podchodzić do nich dość krytycznie i przy ich budowie zwrócić uwagę na podane niżej możliwe problemy.




Po pierwsze zakres danych użytych do trenowania sieci nie może być zbyt wąski. Jeśli tak by było sieć generowałaby dobre sygnały jedynie w ograniczonej liczbie sytuacji, które byłyby podobne do tych z próby treningowej. Dlatego ważne jest, aby dane użyte do treningu odzwierciedlały jak najwięcej różnorodnych właściwości rynku. Na przykład w próbie powinny znaleźć się zarówno okresy w których zmienność była duża jak i te gdy na rynku działo się niewiele. Dążymy do tego aby próba użyta do treningu zawierała całościowy obraz rynku.

Drugą niebezpieczną cechę stanowi odkrycie przez sieć przypadkowej zależności, która realnie nie występuje. Z takim problemem spotkała się amerykańska armia, która stworzyła sieć neuronową mającą wykrywać zakamuflowane czołgi na załadowanych do niej obrazach. Sieć została wytrenowana, wagi były zoptymalizowane tak dokładnie, że na próbie treningowej skuteczność była niemalże idealna. Wdrożenie jej do warunków rzeczywistych okazało się jednak kompletną klapą. Zupełnie nie sprawdzała się, gdy przyszło wykrywać zakamuflowany czołg w realnych sytuacjach. Przeanalizowano możliwe przyczyny rozbieżności wyników i okazało się, że błąd leżał w procesie trenowania sieci. Wszystkie zdjęcia w nim użyte, które rzeczywiście przedstawiały zakamuflowany czołg były zrobione podczas deszczu, gdy niebo było zachmurzone, natomiast zdjęcia bez czołgu były wykonane kilka dni później  przy słonecznej pogodzie. Sieć neuronowa skojarzyła więc pochmurne niebo z wynikami świadczącymi o tym, że na obrazku znajduje się czołg, a słoneczną pogodę z jego brakiem. Ten błąd jeszcze raz każe nam się przyjrzeć danym, których używamy do trenowania sieci.

Ostatnim ale nie mniej ważnym problemem na jaki chciałbym zwrócić uwagę jest optymalizacja. Nie chodzi mi tu o optymalizację wag, bo to jest sprawą kluczową dla działania sieci neuronowej, ale o funkcje zawarte w niektórych oprogramowaniach do tworzenia sieci, które optymalizują również  parametry wskaźników użytych do generowania sygnałów(np. liczby okresów dla średnich użytych w MACD). Optymalizacja tych parametrów jest drogą do nikąd. Owszem, poprawia wynik strategii osiągnięty na danych historycznych, ale robi to dostosowując wskaźniki do charakterystyk rynku mających miejsce tylko w badanym okresie –  na przykład często dobierając parametry wskaźnika tak,  aby dał dobry sygnał przy jednym wielkim ruchu ceny. Jeśli identyczny ruch nie wystąpi w okresie gdy będziemy korzystali już ze strategii na bieżących danych nasza strategia z pewnością nie powtórzy dobrego wyniku testowego. Do optymalizacji parametrów wskaźników trzeba więc podchodzić z duża dozą nieufności.

Aby sprawdzić skuteczność nieskomplikowanej sieci neuronowej posłużyłem się próbną wersją programu Forecaster XL. Chcę sprawdzić z jakim prawdopodobieństwem sieci będzie udawało się przewidzieć kierunek ruchu instrumentu w ciągu jednej sesji. Na badany instrument wybrałem indeks WIG20. Dane dostarczane do sieci to cena otwarcia sesji, oraz jej opóźnienia(ceny otwarcia z 3 ostatnich dni), cena zamknięcia z dnia poprzedniego i również jej trzy opóźnienia oraz kilka podstawowych wskaźników (RSI, MACD, ROC, SMA). Sieć na ich podstawie ma określać czy rozpoczęta sesja(rozpoczęta, ponieważ zakładamy, że w chwili prognozy znamy już cenę dzisiejszego otwarcia) dla WIG20 skończy się na plusie czy na minusie.

 Ze względu na ograniczenia wersji testowej programu(500 rekordów) sieć została utworzona na danych dziennych z okresu 16.01.2008 – 31.12.2009 r.  Forecaster XL działa jako nakładka do Excela. Podajemy mu zakres danych, wejściowych i wyjściowych, a program sam decyduje który rodzaj architektury sieci i jej trenowania będzie najbardziej odpowiedni. Użytkownik nie ma wpływu na konstrukcje warstwy ukrytej. Forecaster XL dzieli dane na zbiór treningowy użyty do uczenia sieci i zbiór danych testowych. Schemat badanej sieci wygląda następująco:

Wyniki są następujące

Podsumowanie

Zbiór treningowy

Zbiór Testowy

Liczba obserwacji

409

84

CCR:

84.84%

64.29%

Średni AE:

n/a

n/a

Średni MSE:

n/a

n/a

Typ tolerancji

n/a

n/a

Tolerancja:

n/a

n/a

Liczba dobrych prognoz

347 (85%)

54 (64%)

Liczba błędnych prognoz

62 (15%)

30 (36%)

Stworzona przez program sieć dopasowała się do danych treningowych na tyle dobrze, że trafia z prognozą w blisko 85% przypadków. Następnie wytrenowana już sieć została użyta do prognozowania na podstawie danych wejściowych próby testowej. Wyniki prognoz porównane z faktycznymi pokazują, że sieć trafiła z prognozą w 64% przypadków. Widzimy więc, że wynik sieci neuronowej nawet zbudowanej z tak prostych danych wejściowych jest już o 14% lepszy od rzutu monetą. To sugeruje, że rozbudowana sieć, składająca się z większej ilości danych wejściowych i trenowana na dużej ilości rekordów może mieć w sobie duży potencjał prognostyczny.




Przyjrzyjmy się teraz oprogramowaniu, które może posłużyć do budowy sieci. Oto kilka przykładowych pozycji. Niestety wszystkie programy, które udało mi się znaleźć są płatne. Jeśli ktoś chciałby wypróbować możliwości takich programów, to w większości producenci oferują wersje próbne. Kolejność w zestawieniu jest przypadkowa.

Nazwa

Adres strony

Cena

Forecaster XL

http://www.alyuda.com/forecasting-tool-for-excel.htm

197$

Wolfram Mathematica Neural Networks

www.wolfram.com/products/applications/neuralnetworks/

585 GBP + koszt programu Mathematica

Statistica Automatyczne Sieci Neuronowe

http://www.statsoft.pl/stat_nn.html

W zależności od licencji

TradingSoultion Real Time

http://www.nd.com/

$1995

NeuroShell Trader

http://www.neuroshell.com/

od $795

Range Trader Pro

http://www.neuroforex.com/RangeTraderInfo.html

b/d

Mam nadzieję, że ten artykułu choć trochę przybliżył czytelnikowi tematykę sieci neuronowych. Dzięki nowoczesnemu oprogramowaniu nie trzeba być matematykiem, czy informatykiem, żeby z nich korzystać. Warto się tą tematyką zainteresować, bo wiele osób twierdzi, że jest to przyszłość analizy technicznej.

dla EFIX Dom Maklerski S.A.

Adrian Gasiński

Oceń artykuł:

1 Gwiazdka2 Gwiazdki3 Gwiazdki4 Gwiazdki5 Gwiazdki (Brak ocen)
Loading...

Zobacz także:
Zobacz wszystkie

Notowania

Kalendarium

Zobacz więcej »

Statystyki sesji / mapa nastrojów

Kto czyta, nie traci

Wyrażam zgodę na przetwarzanie...

Wyrażam zgodę na przetwarzanie, w tym także w przyszłości, przez EFIX Dom Maklerski S.A. z siedzibą w Poznaniu (61-131), przy ul. Abpa. A. Baraniaka 88A, moich danych osobowych wskazanych w powyższym formularzu, w celach marketingowych, zgodnie z ustawą z dnia 29 sierpnia 1997 r. o ochronie danych osobowych (Dz.U. z 1997, Nr 133, poz. 883, z późn. zm.). Wyrażenie zgody jest dobrowolne. Oświadczam, że zostałem/-am poinformowany/-a o przysługującym mi prawie wglądu do swoich danych osobowych, ich poprawiania i kontroli. Zgoda w każdym czasie może być odwołana.

Wyrażam zgodę na przesyłanie...

Wyrażam zgodę na przesyłanie, środkami komunikacji elektronicznej, informacji handlowych przez EFIX Dom Maklerski S.A., na podany przeze mnie adres e-mail, zgodnie z ustawą o świadczeniu usług drogą elektroniczną z dnia 18 lipca 2002 roku.