Tytuł projektu: Prognozowanie cen akcji spółki KGHM z wykorzystaniem sieci neuronowych
Autorzy: Michał Kot i Maciej Paluch
Data: 18.01.2012
Adnotacja: Projekt opisany w ramach tego raportu został ukończony, aby spełnić wymagania kursu: "Sztuczna inteligencja".

Project title: KGHM stock price forecast using neural networks
Autors: Michał Kot i Maciej Paluch
Date: 18.01.2012
Annotation: The project described in this report has been completed to fulfill the requirements for the course: "Methods of artificial intelligence”.

Abstract:

This project focuses on possible ways of estimating stock price of a single stock corporation. For estimation purposes neural networks toolbox from Matlab (Mathworks) has been used, which is licenced to our university (Politechnika Wrocławska). Our goal was to check, whether neural networks are good for forecasting stock prices. We prepared whole data set of financial situation of KGHM stock for whole 2006 year and, based on that, estimated prices in a single day or a couple of days. As a result, we summarize that stock prices are very, very difficult to predict, however neural networks are at the moment one of the best methods to do that. Depending on the number of inputs and the period of history we are using to predict, we conclude that we should consider as many inputs as possible (as long as they have influence on stock prices). What is more, the longer is the history the better is the estimation -- by extending the number of days that have influence the future price it is possible to improve the results.

Cel projektu

Celem projektu jest zweryfikowanie skuteczności zastosowania sztucznych sieci neuronowych do prognozowania cen akcji konkretnej spółki giełdowej na podstawie szeregu danych wejściowych, dotyczących zarówno historii zmian kursu akcji jak i aktualnych wskaźników ekonomicznych. Do realizacji sieci neuronowych wykorzystany został Neural Networks Toolbox, wchodzący w skład środowiska Matlab.

Budowa sieci neuronowych

Przedstawiony na rysunku poniżej neuron posiada n wejść x1, ... , xn, jedno wyjście y oraz w0, czyli wartość stałą dla każdego neuronu, niezależną od danych wejściowych. Przetwarzanie sygnałów wejściowych odbywa się na podstawie obliczenia sumy ważonej wejść przez odpowiadające im wagi oraz przekształceniu otrzymanego wyjścia przez funkcję aktywacji fi.

Grupa neuronów tworzy pojedynczą warstwę, która łączy je z neuronami innych warstw, najczęściej w relacji każdy z każdym. Sieć neuronowa zawsze składa się z dwóch warstw (wejściowej i wyjściowej), natomiast często dodaje się pomiędzy nimi dodatkowe warstwy ukryte, które usprawniają pracę sieci. Jednakże istnieją dowody, że sieci wielowarstwowe są równoważne odpowiednio skonstruowanej sieci trzywarstwowej, z jedną warstwą ukrytą. I na takiej sieci będzie oparty ten projekt.



Neural Networks Toolbox

W celu utworzenia sieci należy najpierw zdefiniować dane wejściowe oraz wyjściowe, o równej liczbie próbek. Następnie konieczne jest ustalenie procentowego udziału danych uczących, walidujących i testujących dla sieci. Kolejnym krokiem jest wprowadzenie liczby neuronów w warstwie ukrytej. Parametr ten ma istotne znaczenie podczas procesu uczenia. Ostatnim etapem jest trenowanie sieci. Jakość wytrenowania można ocenić na podstawie uśrednionego błędu średniokwadratowego MSE pomiędzy wyjściem sieci, a danymi rzeczywistymi oraz ich korelacji. W przypadku niezadowalających wyników i braku poprawy działania w procesie uczenia, należy zmienić liczbę neuronów w warstwie ukrytej i powtórnie przeprowadzić proces uczenia.

Serie danych

Przy definiowaniu zadania należy podzielić nasze dane w taki sposób, aby odpowiednia ich część przypadała na serię trenującą, walidującą i testującą. Każda z nich pełni ważną funkcję w procesie tworzenia sieci neuronowej:


Dobór odpowiedniej sieci neuronowej do prognozowania cen akcji

Przy projektowaniu sieci neuronowej istotny jest dobór liczby neuronów w warstwie ukrytej. Jednym z istotnym czynników jest czas obliczeń, gdyż nauczenie sieci z dużą ilością neuronów może być zbyt czasochłonne. Inny aspekt to jakość pracy sieci. Zbyt mała ilość neuronów w warstwie ukrytej może powodować brak możliwości znalezienia odpowiednich zależności pomiędzy danymi wejściowymi i wyjściowymi. Z drugiej strony, zbyt duża liczba neuronów w warstwie ukrytej może prowadzić do uczenia się na pamięć przez sieć -- co kompletnie rozmija się z ideą działania sieci neuronowych.

Kolejnym wyzwaniem jest odpowiednie rozdzielenie danych wejściowych na serie trenującą, testującą i walidującą. Trenowanie sieci nie może być zbyt długie, a zarazem musi pozwolić sieci na poprawną interpretację przykładów. Zbiór testujący powinien z kolei zawierać niespotykane dotąd przykłady, co najlepiej weryfikuje jakość pracy sieci.

Po przygotowaniu zbioru danych i przetestowaniu sieci należy zadbać o odpowiednie kryteria oceny jakości jej pracy. Definiuje się takie wskaźniki jak:

Otrzymane wyniki stanowią zwykle podstawę do określania zakończenia procesu uczenia lub jego kontynuacji. Czasem jednak bezpieczniej jest określić stałą liczbą epok (epoka to pojawienie się w ciągu uczącym wszystkich przykładów w określonej kolejności dokładnie jeden raz) w procesie uczenia, gdyż sieć może nie być w stanie rozwiązać postawionego problemu z zadaną przez nas dokładnością.


Zastosowanie sieci do prognozowania cen akcji

Sieci neuronowe znajdują w ekonomii trzy podstawowe zastosowania:

Wszystkie są interesujące, jednakże ze względu na znaczenie zdecydowaliśmy się zrealizować pierwsze z nich. Do prognozowania cen akcji najczęściej stosuje się jedną warstwę ukrytą, natomiast warstwa wejściowa posiada około kilkudziesięciu neuronów wejściowych. Wyjść może być kilka, w zależności od potrzeb i zastosowania (cena otwarcia, zamknięcia, cena minimalna bądź maksymalna). Istotnym jest, aby zebrane dane były spójne i brały pod uwagę dość szeroki zakres czasu -- prognozowanie ceny jedynie na podstawie ceny poprzedniej byłoby "wróżeniem z fusów". Z drugiej strony, konieczne jest spojrzenie na sytuację z szerszej perspektywy -- ceny akcji zależą od wielu czynników, a nie tylko od ich historii.

Istotnym jest, aby dobierać sieci neuronowe do konkretnie wybranej spółki -- na każdą z nich wpływają inne czynniki i inwestorzy reagują na nie inaczej. Sieci neuronowe w teorii dość dobrze sprawdzają się przy prognozowaniu cen akcji, szczególnie w porównaniu z metodami fundamentalnymi i technicznymi. Zamierzamy to sprawdzić na przykładzie polskiego potentata miedziowego -- spółki KGHM Polska .


Zbiór danych uczących - opracowanie i uzasadnienie

Sieć neuronowa zbudowana została z 130 neuronów wejściowych oraz dwóch neuronów wyjściowych. Wejścia sieci stanowią:

Wolumen obrotów akcji spółki oraz wartość obrotów WIG20 zostały uśrednione ze względu na ograniczenie liczby wejść, kosztem utraty części informacji. Analiza techniczna notowania spółki oraz indeksu WIG20 w kolejnych dniach może nieść informację o prognozowanych zmianach cen, utrzymaniu lub zmianie trendu. Zysk netto spółki oraz przychody ze sprzedaży pokazują kondycję firmy i mają wpływ na decyzję inwestorów o kupnie lub sprzedaży akcji. Wskaźnik koniunktury w przemyśle pokazuje nastroje wśród przedsiębiorców oraz oczekiwania na przyszłość. Dynamika produkcji przemysłowej to wskaźnik zmiany wartości produkcji sprzedanej. Pozwala prognozować szybkość rozwoju lub spowolnienia gospodarki. Wskaźniki produkcji przemysłowej oraz koniunktury w przemyśle, mają podłoże w analizie fundamentalnej i wybrane zostały, by odzwierciedlać sytuację światowej gospodarki, w której działa firma.


Schemat badań

Podstawowe badanie przeprowadzone zostało dla zbioru danych wejściowych zawierających pełną informację o 10 poprzednich dniach, w celu prognozowania kursów otwarcia i zamknięcia na jeden dzień do przodu. Następnie otrzymane wyniki porównane zostały z wynikami uzyskanymi dla zmodyfikowanych danych wejściowych.

  1. pełny zbiór danych wejściowych z poprzednich 10 dni - prognozowanie kursów akcji na jeden dzień w przód.
  2. znajomość jedynie historii cen akcji z poprzednich 10 dni,
  3. brak znajomości historii cen akcji; prognozowanie oparte o wskaźniki makroekonomiczne, notowania indeksu WIG20 oraz ceny miedzi i srebra z poprzednich 10 dni,
  4. pełny zbiór danych wejściowych z poprzednich 10 dni - prognozowanie kursów akcji na pięć dni w przód.

Podstawowe badanie

Dla podstawowego przypadku, który został najdokładniej przeanalizowane wygenerowane zostały wykresy zależności błędu MSE (średnia z kwadratów błędów) od liczby neuronów w warstwie ukrytej dla serii trenującej, walidującej i testującej. Jako że błędy wahały się dla kolejnych procesów trenowania (ze względu na losowy dobór serii trenującej, walidującej i testującej), zostały one uśrednione po pięciu próbach. Jak można zauważyć, zwiększanie liczby neuronów ukrytych pozytywnie wpływa na proces estymacji -- błąd MSE maleje. Samą jego wartość należy interpretować jako średnią z kwadratów, więc dla MSE=100 średni błąd oceny kursu akcji wynosi 10. Spodziewamy się, że przy zwiększaniu liczby neuronów ukrytych nastąpiłby moment, w którym jakość pracy sieci zaczęłaby ulegać pogorszeniu. Niestety, już przy 20 neuronach ukrytych sieć trenuje się dość długo, co uniemożliwia przeprowadzenie badań dla wartości większych.
Przy dwudziestu neuronach w warstwie ukrytej średni błąd serii testującej wynosi kilka zł (gdyż jego kwadrat kilkanaście), co w przypadku estymacji cen akcji jest bardzo dobrym wynikiem. Posiadając wydajniejsze komputery możliwe byłoby estymowanie cen z jeszcze większą dokładnością, co mogłoby się przełożyć na duże zyski na giełdzie. Musimy brać pod uwagę również fakt, że bierzemy pod uwagę dość krótką historię ceny -- ledwie dwutygodniową. Wydłużenie tego okresu mogłoby poprawić wyniki.


Na kolejnych rysunkach znajdują się osiągi algorytmu, w którym to widać porównanie błędu dla serii trenującej, walidującej i testującej. Pierwszy wykres przedstawia przypadek dla pięciu neuronów w warstwie ukrytej, natomiast drugi dla dwudziestu. Jak nietrudno się domyśleć, seria trenująca osiąga najlepsze wyniki -- błąd MSE jest najmniejszy dla zwiększającej się liczby epok (opisanych wcześniej).

Badania dla innych konfiguracji danych

W celu zweryfikowania zależności wyniku procesu uczenia sieci przeprowadzone zostały krótkie testy dla kilku podobnych, aczkolwiek różnych przypadków. Poniżej znajduje się tabela, przedstawiająca średni kwadrat błędu dla serii testującej dla badania podstawowego oraz każdej z modyfikacji (z akapitu "Schemat badań"). Każdy błąd był liczony przy dwudziestu neuronach warstwy ukrytej sieci.

PrzypadekMSE
118.5777
232.8195
334.8221
4194.3023

MSE dla pozostałych przypadków jest większy niż dla przypadku pierwszego. Pokazuje to, że istotna w procesie estymacji jest zarówno historia zmian kursy akcji, jak i wskaźniki ekonomiczne dotyczące giełdy i gospodarki. Duża wartość w przypadku czwartym wynika z liczenia kwadratu z pięciu wartości, a nie z jednej. Mimo to po podzieleniu przez cztery wartość średnia kwadratu błędu będzie dwukrotnie większa niż w przypadku pierwszym.

Podsumowanie

Badania przeprowadzone w ramach niniejszego projektu dotyczyły zastosowania sieci neuronowych przy estymacji cen kursu akcji spółki KGHM. Jak się okazało, sieci neuronowe dość dobrze radzą sobie z tym zadaniem, pomimo krótkiej historii wejściowej (dotyczącej kursów akcji w poprzednich dniach). Kluczem do sukcesu okazało się zebranie dużej liczby danych wejściowych, dotyczących sytutacji gospodarczej w kraju i na świecie, obrotów giełdowych czy kondycji samej spółki. Przy tworzeniu sieci neuronowej istotny jest dobór odpowiedniej liczby neuronów w warstwie ukrytej, który wpływa zarówno na jakość pracy algorytmu jak i na czas potrzebny do obliczeń. Optymalna instancja problemu została dobrana prawidłowo, a przygotowane dane pozytywnie wpływają na jakość pracy sieci neuronowej -- testowe przypadki, które nie posiadały niektórych danych wejściowych zwróciły gorsze wyniki niż wersja pełna.

Literatura i narzędzia:
  1. Grzegorz Jasiński, Zastosowanie sieci neuronowych do prognozowania wskaźników finansowych
  2. Neural Networks Toolbox, Matlab
  3. www.bankier.pl
  4. www.stooq.pl
  5. www.gpwinfostrefa.pl