By Derrick Mwiti, Data Analyst
A szerkesztő megjegyzése: Ez a bemutató azt mutatja be, hogyan kezdhetjük el az idősorok előrejelzését LSTM modellekkel. A tőzsdei adatok remek választásnak bizonyulnak ehhez, mivel eléggé rendszeres és mindenki számára széles körben elérhetőek. Kérjük, ne tekintse ezt pénzügyi tanácsadásnak, és ne használja fel saját ügyletek megkötésére.
Ezzel a bemutatóval egy Python mélytanulási modellt építünk, amely a részvényárfolyamok jövőbeli viselkedését fogja megjósolni. Feltételezzük, hogy az olvasó ismeri a Python mélytanulás fogalmait, különösen a hosszú rövidtávú memóriát.
Míg egy részvény tényleges árfolyamának megjóslása nehéz feladat, építhetünk egy olyan modellt, amely megjósolja, hogy az árfolyam emelkedni vagy csökkenni fog-e vagy sem. A bemutatóhoz használt adatok és notebook itt található. Fontos megjegyezni, hogy mindig vannak más tényezők is, amelyek befolyásolják a részvények árfolyamát, például a politikai légkör és a piac. Ebben a bemutatóban azonban nem ezekre a tényezőkre fogunk koncentrálni.
Bevezetés
A LSTM-ek nagyon erősek a szekvencia-előrejelzési problémákban, mivel képesek múltbeli információkat tárolni. Ez a mi esetünkben azért fontos, mert egy részvény korábbi árfolyama döntő fontosságú a jövőbeli árfolyam előrejelzésében.
Azzal kezdünk, hogy importáljuk a NumPy-t a tudományos számításokhoz, a Matplotlib-et a grafikonok ábrázolásához, és a Pandas-t az adathalmazaink betöltéséhez és manipulálásához.
Az adathalmaz betöltése
A következő lépés a képzési adathalmazunk betöltése és a Open
és High
oszlopok kiválasztása, amelyeket a modellezés során használni fogunk.
Ellenőrizzük az adathalmazunk fejlécét, hogy betekintést nyerjünk abba, milyen adathalmazzal dolgozunk.
A Open
oszlop a kiindulási árfolyam, míg a Close
oszlop a részvény végső árfolyama egy adott kereskedési napon. A High
és Low
oszlopok az adott nap legmagasabb és legalacsonyabb árfolyamát jelölik.
Feature Scaling
A mélytanulási modellekkel kapcsolatos korábbi tapasztalatainkból tudjuk, hogy az optimális teljesítmény érdekében skáláznunk kell az adatainkat. Esetünkben a Scikit- Learn MinMaxScaler
funkcióját fogjuk használni, és nullától egyig terjedő számokra skálázzuk az adathalmazunkat.
Adatok létrehozása időlépésekkel
A LSTM-ek elvárják, hogy adataink egy meghatározott formátumban, általában egy 3D-s tömbben legyenek. Azzal kezdjük, hogy 60 timestepben hozzuk létre az adatokat, és a NumPy segítségével alakítjuk át egy tömbbe. Ezután átalakítjuk az adatokat egy 3D dimenziós tömbbe X_train
mintákkal, 60 időbélyeggel és minden lépésnél egy jellemzővel.
Az LSTM építése
Az LSTM építéséhez importálnunk kell néhány modult a Kerasból:
-
Sequential
a neurális hálózat inicializálásához -
Dense
a sűrűn kapcsolódó neurális hálózati réteg hozzáadásához -
LSTM
a Long Short-Term Memory réteg hozzáadásához -
Dropout
a túlillesztést megakadályozó dropout rétegek hozzáadásához
Adjuk hozzá az LSTM réteget, majd később hozzáadunk néhány Dropout
réteget a túlillesztés megakadályozására. Az LSTM réteget a következő argumentumokkal adjuk hozzá:
- 50 egység, ami a kimeneti tér dimenzionalitása
-
return_sequences=True
ami meghatározza, hogy a kimeneti sorozat utolsó kimenetét vagy a teljes sorozatot -
input_shape
adjuk vissza a képzési halmazunk alakjaként.
A Dropout
rétegek definiálásakor 0,2-t adunk meg, ami azt jelenti, hogy a rétegek 20%-a kiesik. Ezt követően hozzáadjuk a Dense
réteget, amely 1 egységnyi kimenetet határoz meg. Ezt követően a népszerű adam optimalizálóval összeállítjuk a modellünket, és a veszteséget a mean_squarred_error
értékre állítjuk be. Ez kiszámítja a négyzetes hibák átlagát. Ezután illesztjük a modellt úgy, hogy 100 epochán fusson, 32-es kötegmérettel. Ne feledjük, hogy a számítógépünk specifikációitól függően néhány percig is eltarthat, amíg a futás befejeződik.
Jövőbeli részvények előrejelzése a tesztkészlet segítségével
Először is be kell importálnunk a tesztkészletet, amelyen a jóslatokat fogjuk készíteni.
A jövőbeli részvényárfolyamok előrejelzéséhez a tesztkészlet betöltése után néhány dolgot el kell végeznünk:
- El kell végeznünk a képzési halmaz és a tesztkészlet összevonását a 0 tengelyen.
- Az időlépést 60-ra állítsuk be (mint korábban láttuk)
- A
MinMaxScaler
segítségével alakítsuk át az új adathalmazt - Az adathalmazt alakítsuk át, ahogy korábban tettük
A jóslatok elkészítése után a inverse_transform
segítségével kapjuk vissza a részvényárfolyamokat normál olvasható formátumban.
Eredmények ábrázolása
Végül a Matplotlib segítségével megjelenítjük a megjósolt részvényárfolyam és a valós részvényárfolyam eredményét.
A grafikonból láthatjuk, hogy a valós részvényárfolyam emelkedett, miközben a modellünk azt is megjósolta, hogy a részvényárfolyam emelkedni fog. Ez világosan mutatja, hogy az LSTM-ek milyen erősek az idősorok és a szekvenciális adatok elemzésére.
Következtetés
A részvényárfolyamok előrejelzésére van még néhány más technika is, mint például a mozgóátlagok, a lineáris regresszió, a K-Nearest Neighbours, az ARIMA és a Prophet. Ezek olyan technikák, amelyeket önmagukban is tesztelhetünk, és összehasonlíthatjuk teljesítményüket a Keras LSTM-mel. Ha többet szeretne megtudni a Kerasról és a mélytanulásról, az erről szóló cikkeimet itt és itt találja.
Ezt a bejegyzést a Reddit-en és a Hacker News-on is megvitathatja.
Bio: Derrick Mwiti adatelemző, író és mentor. Minden feladatban nagyszerű eredményeket akar elérni, és a Lapid Leaders Africa mentora.
Original. Reposzted with permission.
Related:
- Introduction to Deep Learning with Keras
- Introduction to PyTorch for Deep Learning
- The Keras 4 Step Workflow