Hoe aandelenmarktprijzen te voorspellen met LSTM
De financiële sector was een van de eerste sectoren die machine learning en deep learning toepaste bij beleggingsanalyses en -activiteiten om waarde toe te voegen aan hun klanten. Voorafgaand aan machine learning, deep learning, en de hele “Quant” revolutie in de jaren 2000 tot nu, vertrouwden analisten en beleggers op minder technologisch vertrouwde technieken. Fundamentele en technische analyse heersten en, hoewel ze nog steeds een groot deel van de analyse uitmaken, worden ze nu gecombineerd met voorspellingen en analyses die door computers worden gedaan.
Zoals de meeste mensen weten, is de effectenbeurs een plaats waar mensen aandelen kopen en verkopen. Het kopen en verkopen van deze aandelen (d.w.z. de handel) vindt plaats in fysieke en virtuele omgevingen die “beurzen” worden genoemd. Deze beurzen zijn huizen voor indexen (algemeen bekend zijn de Dow Jones Industrial Average en de NASDAQ Composite). De beurzen zijn de plaatsen waar de prijzen van de aandelen die deel uitmaken van de indexen worden vastgesteld.
Er zijn vele factoren die de prijs van een aandeel kunnen doen schommelen. Dagelijkse nieuwsberichten met goed of slecht nieuws over de huidige of toekomstige vooruitzichten van een onderneming is aantoonbaar een van de meest invloedrijke factoren die dagelijkse koersschommelingen veroorzaken. De winstgevendheid van een bedrijf, de omzetgroei en de toekomstige expansievooruitzichten zijn indicatoren die lange- en kortetermijnprijsveranderingen kunnen bepalen. Deep Learning en andere statistische modellen kunnen slechts met zo veel rekening houden en zijn meestal beter geschikt voor prognoses op korte en middellange termijn dan op lange termijn (bijv. jaren).
Benieuwd naar snellere resultaten?
Lees meer over Exxact Deep Learning Solutions
Uitpakken van Long Short Term Memory Modellen (LSTM)
Bron
LSTM’s zijn een afgeleide van een Recurrent Neural Network (RNN). Een RNN is een adequaat model voor een korte tijdshorizon van misschien een week tot een maand. Verder dan dat is het onwaarschijnlijk dat het RNN betrouwbare voorspellingen zal opleveren. Dit is te wijten aan het verdwijnende gradiëntprobleem.
Een normale tijdreeksmethode zoals AR en zijn derivaten of ANN (Artificial Neural Network) kan leren door een groot gewicht toe te kennen aan de koers van de vorige dag plus enkele andere kenmerken. Voor financiële tijdreeksen zou u ARCH-modellen en hun derivaten gebruiken om het rendement of de volatiliteit te voorspellen. In een feed forward netwerk worden deze punten als onafhankelijk van elkaar beschouwd. Dit betekent dat het LSTM niet dezelfde benadering volgt als de traditionele tijdreeksvoorspellingsmethoden.
LSTM gebruikt verschillende afhankelijkheden bij het voorspellen
Een LSTM neemt de gegevens door wat het “cellen” noemt, zoals u kunt zien in het diagram hierboven, afgebeeld in de middelste rechthoek. Het is door deze celstaat dat het LSTM kan kiezen om dingen te onthouden of te vergeten.
Een LSTM zal 3 verschillende afhankelijkheden hebben, afhankelijk van de informatie die het ontvangt:
-
- De vorige celtoestand (d.w.z. de informatie die in het geheugen aanwezig was na de vorige tijdstap)
- De vorige verborgen toestand (d.w.z. dit is hetzelfde als de output van de vorige cel)
- De input bij de huidige tijdstap (d.w.z. de nieuwe informatie die op dat moment wordt ingevoerd)
Op het gebied van de voorspelling van de koers van financiële activa kunnen deze afhankelijkheden als volgt worden verklaard:
- De vorige celtoestand – De trend van het aandeel op de vorige dag.
- De vorige verborgen toestand – De koers van het aandeel op de vorige dag.
- De input bij de huidige tijdstap – Andere factoren die de koers kunnen beïnvloeden. Dit zijn meestal nieuwsberichten die in de loop van de dag voor beleggers beschikbaar komen.

Bron
In bovenstaand diagram geeft de horizontale lijn ct de celtoestand aan, die het geheugen van het LSTM is. Zoals we hierboven al aangaven, heeft dit betrekking op de trend van het aandeel in de vorige dag (1). Die informatie stroomt de cel binnen en wordt verwerkt met de andere informatie die binnenstroomt. De lijn die wordt aangeduid met ct-1 is de verborgen staat (2) die in ons geval van aandelenvoorspelling de informatie van de vorige tijdstappen zal bevatten (d.w.z. de aandelenkoers van de vorige dag). De horizontale lijn, aangeduid met ht-1, is de input op het huidige tijdstip, namelijk de huidige aandelenkoers (3). Met behulp van de informatie van de vorige aandelenprijs (Hidden State), de huidige prijs in combinatie met de trend van de vorige dag (Cell State), zal het LSTM een output genereren.
Python-code om een LSTM-voorspellingsmodel te maken
De volgende Python-code neemt ons mee door de stappen om een LSTM-model te maken dat de prijs van een aandeel voorspelt.
- # -*- coding: utf-8 -*-
- """EXXACT - Stock Market Prediction LSTM.ipynb
- Automatically generated by Colaboratory.
- """
- # By running this line of code, you will be prompted to select your file to upload.
- from google.colab import files
- uploaded = files.upload()
- import io
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- %matplotlib inline
- from matplotlib.pylab import rcParams
- rcParams=20,10
- from keras.models import Sequential
- from keras.layers import LSTM,Dropout,Dense
- from sklearn.preprocessing import MinMaxScaler
- df = pd.read_csv(io.BytesIO(uploaded))
- print(df)
- df=pd.to_datetime(df.Date,format="%Y-%m-%d")
- df.index=df
- data=df.sort_index(ascending=True,axis=0)
- new_dataset=pd.DataFrame(index=range(0,len(df)),columns=)
- for i in range(0,len(data)):
- new_dataset=data
- new_dataset=data
- train_data=final_dataset
- valid_data=final_dataset
- new_dataset.index=new_dataset.Date
- new_dataset.drop("Date",axis=1,inplace=True)
- scaler=MinMaxScaler(feature_range=(0,1))
- scaled_data=scaler.fit_transform(new_dataset)
- x_train_data,y_train_data=,
- for i in range(60,len(train_data)):
- x_train_data.append(scaled_data)
- y_train_data.append(scaled_data)
- x_train_data,y_train_data=np.array(x_train_data),np.array(y_train_data)
- x_train_data=np.reshape(x_train_data,(x_train_data.shape,x_train_data.shape,1))
- lstm_model=Sequential()
- lstm_model.add(LSTM(units=50,return_sequences=True,input_shape=(x_train_data.shape,1)))
- lstm_model.add(LSTM(units=50))
- lstm_model.add(Dense(1))
- inputs_data=new_dataset.values
- inputs_data=inputs_data.reshape(-1,1)
- inputs_data=scaler.transform(inputs_data)
- lstm_model.compile(loss='mean_squared_error',optimizer='adam')
- lstm_model.fit(x_train_data,y_train_data,epochs=1,batch_size=1,verbose=2)
- X_test=
- for i in range(60,inputs_data.shape):
- X_test.append(inputs_data)
- X_test=np.array(X_test)
- X_test=np.reshape(X_test,(X_test.shape,X_test.shape,1))
- predicted_closing_price=lstm_model.predict(X_test)
- predicted_closing_price=scaler.inverse_transform(predicted_closing_price)
- train_data=new_dataset
- valid_data=new_dataset
- valid_data=predicted_closing_price
Een programma dat beurskoersen kan voorspellen met behulp van LSTM
U heeft nu de Python code waarmee u aan de slag kunt om de koersen van aandelen op de beurzen te voorspellen met behulp van LSTM. Probeer het eens en laat ons weten hoe het voor u werkt. We staan nog maar aan het begin van het uitpakken van LSTM’s mogelijkheden in verschillende toepassingen, en we zijn enthousiast over de toekomst.
Lees meer over hoe LSTM Recurrent Neural Networks worden gebruikt in andere toepassingen.
Heeft u vragen over deep learning werkstations of servers?
Contact Exxact Vandaag