Exxact | Deep Learning, HPC, AV, Distribution & More

How to Predict Stock Market Prices Using LSTM

Finanssiala oli yksi ensimmäisistä toimialoista, jotka ottivat koneoppimisen ja syväoppimisen käyttöön sijoitusanalyyseissään ja -toiminnoissaan lisäarvon tuottamiseksi asiakkailleen. Ennen koneoppimista, syväoppimista ja koko ”kvanttien” vallankumousta 2000-luvulta tähän päivään asti analyytikot ja sijoittajat tukeutuivat vähemmän teknologiaan tukeutuviin tekniikoihin. Fundamentaalinen ja tekninen analyysi hallitsivat, ja vaikka ne muodostavat edelleen suuren osan analyysistä, ne yhdistetään nyt tietokoneiden tekemiin ennusteisiin ja analyyseihin.

Kuten useimmat tietävät, osakemarkkinat ovat paikka, jossa ihmiset ostavat ja myyvät osakkeita. Näiden osakkeiden ostaminen ja myyminen (eli kaupankäynti) tapahtuu fyysisissä ja virtuaalisissa ympäristöissä, joita kutsutaan ”pörsseiksi”. Nämä pörssit ovat indeksien taloja (yleisesti tunnettuja ovat Dow Jones Industrial Average ja NASDAQ Composite). Indeksit muodostavien osakkeiden hinnat määräytyvät pörsseissä.

Osakkeen hintaa voivat muuttaa monet tekijät. Päivittäiset uutisraportit, joissa kerrotaan hyviä tai huonoja uutisia yrityksen nykyisistä tai tulevista näkymistä, ovat kiistatta yksi vaikuttavimmista tekijöistä, jotka aiheuttavat päivittäisiä kurssivaihteluita. Yrityksen kannattavuus, tulojen kasvu ja tulevaisuuden laajentumisnäkymät ovat indikaattoreita, jotka voivat määrittää pitkän ja lyhyen aikavälin kurssimuutoksia. Deep Learning ja muut tilastolliset mallit voivat ottaa huomioon vain niin paljon, ja ne soveltuvat yleensä paremmin lyhyen ja keskipitkän aikavälin ennusteisiin kuin pitkän aikavälin (esim. vuosien) ennusteisiin.

Kiinnostuitko nopeammista tuloksista?
Opi lisää Exxactin Deep Learning -ratkaisuista

Pakkauksen purkaminen Pitkän lyhytkestoisen muistin mallit (Long Short Term Memory Models, LSTM)

Pitkän lyhytkestoisen muistin mallit (Long Short Term Memory Models, LSTM) Lähde

LSTM:t ovat toistuvan neuraaliverkon (Recurrent Neural Network (RNN))

johdannainen. RNN on sopiva malli lyhyelle aikahorisontille, ehkä viikosta kuukauteen. Tätä pidemmällä aikavälillä RNN ei todennäköisesti tuota luotettavia ennusteita. Tämä johtuu häviävän gradientin ongelmasta.

Normaali aikasarjamenetelmä, kuten AR ja sen johdannaiset tai ANN (Artificial Neural Network), voi oppia soveltamalla suurta painoa edellisen päivän hinnalle ja joillekin muille ominaisuuksille. Rahoitusaikasarjoissa käytettäisiin ARCH-malleja ja niiden johdannaisia tuottojen tai volatiliteetin ennustamiseen. Feed forward -verkossa näitä pisteitä pidetään toisistaan riippumattomina. Tämä tarkoittaa, että LSTM ei noudata samaa lähestymistapaa kuin perinteiset aikasarjan ennustemenetelmät.

LSTM käyttää erilaisia riippuvuuksia ennustamisessa

LSTM ottaa datan niin sanottujen ”solujen” kautta, kuten näet yllä olevassa keskimmäisessä suorakulmiossa esitetyssä kaaviossa. Tämän solutilan kautta LSTM voi valita muistavansa tai unohtavansa asioita.

LSTM:llä on 3 erilaista riippuvuutta sen saaman tiedon mukaan:

    1. Edellinen solutila (eli tieto, joka oli muistissa edellisen aika-askeleen jälkeen)
    2. Edellinen kätketty tila (eli tämä vastaa edellisen solun ulostuloa)
    3. Syöttö kulloisenkin aika-askeleen kohdalla (ts. uusi tieto, joka syötetään sillä hetkellä)

Rahoitusvarojen hinnan ennustamisen alalla nämä riippuvuudet voidaan selittää seuraavasti:

  1. Edellinen solun tila – Osakkeen trendi edellisenä päivänä.
  2. Edellinen piilotettu tila – Osakkeen hinta edellisenä päivänä.
  3. Syöttö kuluvalla aika-askeleella – Muita tekijöitä, jotka voivat vaikuttaa hintaan. Tällaisia ovat tyypillisesti uutishälytykset, jotka tulevat sijoittajien saataville päivän mittaan.

LSTM:n solutilat siinä, miten ne tallennetaan

Lähde

Yllä olevassa kaaviossa vaakasuora viiva ct tarkoittaa solutilaa, joka on LSTM:n muisti. Kuten heti edellä mainittiin, tämä liittyy osakkeen trendiin edellisenä päivänä (1). Tämä tieto virtaa soluun ja sitä käsitellään muun sisään virtaavan tiedon kanssa. Viiva, jota merkitään ct-1:llä, on piilotettu tila (2), joka meidän tapauksessamme osakkeen ennustamisessa sisältää edellisen ajanjakson tiedot (eli edellisen päivän osakekurssin). Vaakasuora viiva, jota merkitään ht-1:llä, on tämänhetkinen syöte, joka on osakkeen tämänhetkinen hinta (3). Käyttämällä edellisen osakkeen hinnan (Hidden State) ja nykyisen hinnan tietoja yhdistettynä edellisen päivän trendiin (Cell State) LSTM luo ulostulon.

AMD EPYC SERVER SALE

Python-koodi LSTM-ennustemallin luomiseen

Seuraavassa Python-koodissa käydään läpi askeleet, joiden avulla luodaan osakkeen hintaa ennustava LSTM-malli.

  1. # -*- coding: utf-8 -*-
  2. """EXXACT - Stock Market Prediction LSTM.ipynb
  3. Automatically generated by Colaboratory.
  4. """
  5. # By running this line of code, you will be prompted to select your file to upload.
  6. from google.colab import files
  7. uploaded = files.upload()
  8. import io
  9. import pandas as pd
  10. import numpy as np
  11. import matplotlib.pyplot as plt
  12. %matplotlib inline
  13. from matplotlib.pylab import rcParams
  14. rcParams=20,10
  15. from keras.models import Sequential
  16. from keras.layers import LSTM,Dropout,Dense
  17. from sklearn.preprocessing import MinMaxScaler
  18. df = pd.read_csv(io.BytesIO(uploaded))
  19. print(df)
  20. df=pd.to_datetime(df.Date,format="%Y-%m-%d")
  21. df.index=df
  22. data=df.sort_index(ascending=True,axis=0)
  23. new_dataset=pd.DataFrame(index=range(0,len(df)),columns=)
  24. for i in range(0,len(data)):
  25. new_dataset=data
  26. new_dataset=data
  27. train_data=final_dataset
  28. valid_data=final_dataset
  29. new_dataset.index=new_dataset.Date
  30. new_dataset.drop("Date",axis=1,inplace=True)
  31. scaler=MinMaxScaler(feature_range=(0,1))
  32. scaled_data=scaler.fit_transform(new_dataset)
  33. x_train_data,y_train_data=,
  34. for i in range(60,len(train_data)):
  35. x_train_data.append(scaled_data)
  36. y_train_data.append(scaled_data)
  37. x_train_data,y_train_data=np.array(x_train_data),np.array(y_train_data)
  38. x_train_data=np.reshape(x_train_data,(x_train_data.shape,x_train_data.shape,1))
  39. lstm_model=Sequential()
  40. lstm_model.add(LSTM(units=50,return_sequences=True,input_shape=(x_train_data.shape,1)))
  41. lstm_model.add(LSTM(units=50))
  42. lstm_model.add(Dense(1))
  43. inputs_data=new_dataset.values
  44. inputs_data=inputs_data.reshape(-1,1)
  45. inputs_data=scaler.transform(inputs_data)
  46. lstm_model.compile(loss='mean_squared_error',optimizer='adam')
  47. lstm_model.fit(x_train_data,y_train_data,epochs=1,batch_size=1,verbose=2)
  48. X_test=
  49. for i in range(60,inputs_data.shape):
  50. X_test.append(inputs_data)
  51. X_test=np.array(X_test)
  52. X_test=np.reshape(X_test,(X_test.shape,X_test.shape,1))
  53. predicted_closing_price=lstm_model.predict(X_test)
  54. predicted_closing_price=scaler.inverse_transform(predicted_closing_price)
  55. train_data=new_dataset
  56. valid_data=new_dataset
  57. valid_data=predicted_closing_price

Pörssikurssien ennustamiseen LSTM:n avulla kykenevä ohjelma

Sinulla on nyt Python-koodi, jolla pääset aloittamaan pörssikurssien ennustamisen LSTM:n avulla. Kokeile sitä ja kerro meille, miten se toimii sinulle. Olemme vasta alussa purkamassa LSTM:n kykyjä eri sovelluksissa, ja olemme innoissamme tulevaisuudesta.

Lue lisää siitä, miten LSTM:n rekursiivisia neuroverkkoja käytetään muissa sovelluksissa.

Onko sinulla kysyttävää syväoppimisen työasemista tai palvelimista?
Ota yhteyttä Exxactiin jo tänään

Leave a Reply

Vastaa

Sähköpostiosoitettasi ei julkaista.