LSTM Crypto price prediction
FIIT STU
Cvičiaci: Lukáš Hudec
Predmet: Neurónové siete
Created on May 9|Last edited on May 10
Comment
a Roman Slonskyi
Data
Ako dataset sme použili dáta z burzy Binance, konkrétne graf bitcoinu s 5 minútovými intervalmi. Dáta sú nazbierané od roku 2017 až po súčasnosť, čo je približne 480 000 záznamov. Pre trénovanie však používame len posledných 80 000 záznamov, ktoré sú rozdelené na trénovaciu a validačnú vrstvu v pomere 80:20.
Dáta obsahujú stĺpce:
- date - timestamp
- open - hodnota coinu na začiatku
- high - maximalna hodnota coinu počas daného intervalu
- low - minimálna hodnota coinu počas daného intervalu
- close - finálna hodnota coinu na konci intervalu
- volume - množstvo kryptomeny, ktoré bolo v danom intervale obchodované

Predspracovanie dát
Do dataframu pridávame ďalšie príznaky - technické indikátory ako napríklad sma21(priemerná cena kryptomeny za posledných 21 dní) alebo RSI(relative strength index) a mnoho ďalších. Tieto indikátory sú veľmi často používané ako pomocné ukazovatele pri obchodovaní s kryptomenami, napríklad ak hodnota indikátora RSI klesne pod 30, tak by to malo signalizovať že je správny čas na kúpu daného coinu, ak je hodnota nad 70 tak by malo byť výhodné ho predať. Pridali sme 27 pomocných indikátorov:
rsi, slowd, slowk, fastd, fastk, fastd_rsi, fastk_rsi, macd, macdsignal, macdhist, mfi, roc, bb_lowerband, bb_middleband, bb_upperband, ema3, ema5, ema10, ema21, ema50, ema100, sma3, sma5, sma10, sma21, sma50, sma100
Tieto indikátory sú spolu so stĺpcami close, high, low, volume následne použité v Neurónovej sieti ako príznaky.

Kazdy z tychto atributov sme normalizovali pomocou MInMaxScaler-u. Cize, na vysledku mame float hodnoty od 0 po 1. MinMaxScaler bol vytvoreny osobitne pre trenovaci a testovaci dataset.
Kedze predikujeme jednu close hodnotu podla minuleho vyvoja ceny, nasekali sme dataset na mensie sekvencie s rozmerom n x 31, kde n je dlzka tychto sekvencii a 31 je pocet atributov v jednom zazname.
Trénovací proces
Na trenovanie sme vyuzili Adam optimizer a MSE stratovu funkciu.
1. Natrenovat model na trenovacom datasete
2. Ohodnotit model na validacnom datasete
3. Ulozit model ak nasli sme mensi validacny loss.
4. Ak sa model nezlepsil 10krat za sebou, zastav trenovanie
5. Ulozit vysledky do Wandb
Architektúra Neuronovej Siete
Pri trénovaní sme použili rôzne architektúry 3-4 vrstvové LSTM(môžme pozrieť vo wandb models) je však zaujímavé, že najefektívnejšia bola práve 2 vrstvová LSTM s počtom neurónov 128 a 64. Aby sme predisli predtrenovaniu sme vyuzili Dropout vrstvy po kazdej LSTM vrstve.
Najlepší model

Výsledky
Predikovanie ceny bitcoinu na testovacej množine vyzerá vo veľkom merítku veľmi pekne.

Keď však priblížime predikciu na 160 hodnôt vidíme, že by bolo potrebné neurónku ešte viac zlepšiť, pretože takáto predikcia nieje postačujúca.

Wandb link:
Run set
113
Add a comment