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 projektuCelem 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 neuronowychPrzedstawiony 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.
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 danychPrzy 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:
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ą.
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 .
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.
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.
![]() |
![]() |
![]() |
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 danychW 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.
Przypadek | MSE |
1 | 18.5777 |
2 | 32.8195 |
3 | 34.8221 |
4 | 194.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.
PodsumowanieBadania 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: