Umelá inteligencia - obchodovanie na burze s kryptomenami 2. diel

12.01 | 19:31 | Žumpa | bedňa

Dnes si vytvoríme rekurentnú neurónuvú sieť a naučíme ju predpovedať budúcnosť Dogecoinu.

Súvisiace diely

Umelá inteligencia - obchodovanie na burze s kryptomenami 1. diel

V predchádzajúcich dieloch ste videli

Umelá inteligencia - nám predpovie budúcnosť
Umelá inteligencia sa učí počítať
Umelá inteligencia - prvý praktický príklad v rozpoznávaní obrazu
Data augmentation
Vytvorenie datasetu
Prvé kroky k programovaniu
Umelá inteligencia v rozpoznávaní obrazu
Umelá inteligencia nás všetkých zabije

Úvod

Minule sme začali s predpovedaním Dogecoinu na burze, dnes si pokus dokončíme.

Model rekurentnej neurónovej siete

V prvom pokuse si vyskúšame Rekurentnú neurónovú sieť. Tá sa dá zjednodušene vysvetliť tak, že sa časť výstupu vracia na vstup a tým sa udržuje náväznosť na predchádzajúce informácie. V našom modele sme použili štyri vrstvy LSTM a na konci Dense. Sieť ma 1440 vstupov a 10 výstupov. Čiže na učenie/predpovedanie vložíme do siete 1440 kurzov (1440 minút = deň) a predpovedáme 10minút. Celkový objem dát je za viac ako jeden rok v minútových intervaloch.

Sieť z programátorského hľadiska vyzerá takto:
def lstm_medium (max_input_len, max_output_len):
	# Initialising the RNN
	model = Sequential()# Adding the first LSTM layer and some Dropout regularisation
	model.add(LSTM(units = 50, return_sequences = True, input_shape = (max_input_len, 1)))

	# Adding a second LSTM layer and some Dropout regularisation
	model.add(LSTM(units = 50, return_sequences = True))
	model.add(Dropout(0.2))

	# Adding a third LSTM layer and some Dropout regularisation
	model.add(LSTM(units = 50, return_sequences = True))
	model.add(Dropout(0.2))

	# Adding a fourth LSTM layer and some Dropout regularisation
	model.add(LSTM(units = 50))
	model.add(Dropout(0.2))

	# Adding the output layer
	model.add(Dense(units = max_output_len))
	# Compiling the RNN
	model.compile(optimizer = 'adam', loss = 'mean_squared_error')

	return model
Pre zrozumiteľnejšie zobrazenie použijeme funkciu model.summary():
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm (LSTM)                  (None, 1440, 50)          10400     
_________________________________________________________________
lstm_1 (LSTM)                (None, 1440, 50)          20200     
_________________________________________________________________
dropout (Dropout)            (None, 1440, 50)          0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 1440, 50)          20200     
_________________________________________________________________
dropout_1 (Dropout)          (None, 1440, 50)          0         
_________________________________________________________________
lstm_3 (LSTM)                (None, 50)                20200     
_________________________________________________________________
dropout_2 (Dropout)          (None, 50)                0         
_________________________________________________________________
dense (Dense)                (None, 10)                510       
=================================================================
Total params: 71,510
Trainable params: 71,510
Non-trainable params: 0
_________________________________________________________________
alebo keras.utils.plot_model:

Z celkových dát vždy vyberieme 1440 údajov pre vstup a 10 pre výstup, potom sa v dátach posunieme o 10minút a postup sa opakuje.
Parametre učenia si môžeme upravovať v train.py v sekcií PARAMETERS:
####################################################
# PARAMETERS
####################################################

INPUT_LEN = 1440
OUTPUT_LEN = 10
SHIFT = 10
EPOCHS = 30
BATCH_SIZE = 128
FILEPATH = "weights.hdf5"

####################################################
Naučené váhy sa ukladajú do súboru weights.hdf5.

Spustenie učenia sa

Učenie spustíme príkazom:
python3 train.py
Opakuje sa 30krát a na notebooku mi to trvalo cca hodinu. Sieť sa učí podozrivo rýchlo, tak si vyskúšame ako sa výsledky budú zhodovať so skutočnosťou.

Predikcia budúcnosti

Na otestovanie ako sieť dobre, alebo zle predpovedá budúcnosť nám slúži príkaz:
python3 predict.py
Tram da da dá! Prvý výsledok vyzerá výborne:

Modrá je predpoveď a zelená skutočné dáta.
Druhý test vyzerá tiež výborne až si človek hovorí, že Indovia mali predsa len pravdu.

Mno a tretí uletel úplne do preč.

All in one

git clone https://github.com/bedna-KU/CryptoCoin_stock_trading.git
cd CryptoCoin_stock_trading
sudo apt install python3-dev
sudo apt install python3-tk
python3 -m pip install -r requirements.txt

python3 binance/save_historical_data.py --symbol DOGEUSDT --start "1. Dec 2019" --interval 1m
python3 csv_columns.py --action save --columns "0 1 2 3 4 5"
python3 train.py
python3 predict.py

Záver

Záver je približne taký ako som čakal, tak čo teraz ďalej? Máte nejaké nápady?
Podľa mňa môžeme použiť všetky data, čiže aj otvárací, najvyšší a najnižší kurz. Potom môžeme skúsiť pridať aj objem obchodov. Keď to nezaberie, tak môžeme k dátam pridať kurz Bitcoinu. Alebo dáta z CERNu, ako som už býval spomínal. Môžeme použiť aj dlhší vstupný reťazec než jeden deň, ale to už notebook nezvládal, tak toto asi testnem na lepšom HW. Na čo sa teším, žeby mohla zabrať konvolučná vrstva, tak uvidíme a zrejme tu pokusov bude pribúdať :-)

Mno a predict,oy je dosť splácaný, ale funguje, tak moc nenadávajte :-)

Nevešajte hlavu, pokračujeme a určite na to kápneme.
    • RE: Umelá inteligencia - obchodovanie na burze s kryptomenami 2. diel 13.01 | 19:54
      Avatar mark   Používateľ

      Pokiaľ viem, tak takéto prediktory sa používajú štatisticky. Napr. pri náhodnom nákupe a predaji nech je zisk v pravdepodobnosti 50:50, ale s prediktorom je zisk v pravdepodobnosti 51:49. Tak pri množstve obchodov by sa to malo prejaviť ako zisk. Vraj tieto modely prestávajú fungovať, keď príde kríza. Vtedy ich treba prestaviť. Praktické skúsenosti s týmto však nemám.

      • RE: Umelá inteligencia - obchodovanie na burze s kryptomenami 2. diel 13.01 | 20:22
        Avatar bedňa LegacyIce-antiX  Administrátor

        Toto bol klasický Indický model, mno povedzme trochu vylepšený. Nabudúce skúsime niečo lepčí. Toto bola len taká povinná jazda, čo na nete letí.

        Ale aj tak dík za reakciu.

        Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org