Exxact | Învățare profundă, HPC, AV, Distribuție și multe altele

Cum să prezici prețurile la bursă folosind LSTM

Industria financiară a fost una dintre primele industrii care a adoptat utilizarea învățării automate și a învățării profunde în analiza și operațiunile sale de investiții pentru a adăuga valoare clienților săi. Înainte de machine learning, deep learning și de întreaga revoluție „Quant” din anii 2000 și până în prezent, analiștii și investitorii se bazau pe tehnici mai puțin dependente de tehnologie. Analiza fundamentală și cea tehnică domneau în mod suprem și, deși încă reprezintă o mare parte a analizei, acum sunt combinate cu previziuni și analize realizate de computere.

După cum știe majoritatea oamenilor, piața bursieră este un loc în care oamenii cumpără și vând acțiuni. Actul de cumpărare și vânzare a acestor acțiuni (adică tranzacționarea) are loc în medii fizice și virtuale numite „burse”. Aceste burse sunt case pentru indici (cele mai cunoscute sunt Dow Jones Industrial Average și NASDAQ Composite). Bursele sunt locul unde se stabilește prețul acțiunilor care alcătuiesc indicii.

Există mulți factori care pot fluctua prețul unei acțiuni. Rapoartele de știri zilnice care aduc vești bune sau rele despre perspectivele actuale sau viitoare ale unei companii este, fără îndoială, unul dintre cei mai influenți factori care determină fluctuațiile zilnice ale prețului. Profitabilitatea unei companii, creșterea veniturilor și perspectivele de expansiune viitoare sunt indicatori care pot stabili modificările de preț pe termen lung și scurt. Deep Learning și alte modele statistice nu pot lua în considerare decât o anumită cantitate și, de obicei, sunt mai potrivite pentru previziuni pe termen scurt și mediu decât pe termen lung (de exemplu, ani).

Interesat să obțineți rezultate mai rapide?
Aflați mai multe despre soluțiile Exxact Deep Learning

Despachetarea modelelor de memorie pe termen scurt (LSTM)

Modelele de memorie pe termen scurt (LSTM)

Sursa

LSTM sunt un derivat al unei rețele neuronale recurente (RNN). O RNN este un model adecvat pentru un orizont de timp scurt, poate între o săptămână și o lună. Dacă se merge mai departe de acest orizont, este puțin probabil ca RNN să producă previziuni fiabile. Acest lucru se datorează problemei gradientului de dispariție.

O metodă normală a seriilor de timp, cum ar fi AR și derivatele sale sau ANN (Artificial Neural Network), poate învăța prin aplicarea unei ponderi mari asupra prețului din ziua precedentă, plus alte câteva caracteristici. În cazul seriilor temporale financiare, veți utiliza modelele ARCH și derivatele acestora pentru a prezice randamentele sau volatilitatea. Într-o rețea de tip feed forward, aceste puncte sunt considerate ca fiind independente unele de altele. Acest lucru înseamnă că LSTM nu adoptă aceeași abordare ca și metodele tradiționale de prognoză a seriilor temporale.

LSTM utilizează dependențe diferite în prognoză

Un LSTM va prelua datele prin ceea ce numește „celule”, după cum puteți vedea în diagrama de mai sus, reprezentată în dreptunghiul din mijloc. Prin intermediul acestei stări a celulelor, LSTM-ul poate alege să rețină sau să uite lucruri.

Un LSTM va avea 3 dependențe diferite în funcție de informațiile pe care le primește:

    1. Starea anterioară a celulei (adică informația care a fost prezentă în memorie după pasul de timp anterior)
    2. Starea ascunsă anterioară (adică aceasta este aceeași cu ieșirea celulei anterioare)
    3. Intrarea la pasul de timp curent (adică noile informații care sunt introduse în acel moment)

În domeniul predicției prețului activelor financiare, aceste dependențe pot fi explicate după cum urmează:

  1. Starea anterioară a celulei – Tendința acțiunii în ziua precedentă.
  2. Starea ascunsă anterioară – Prețul acțiunii în ziua precedentă.
  3. Intrarea la pasul de timp curent – Alți factori care pot afecta prețul. De obicei, acestea vor fi alertele de știri care devin disponibile pentru investitori pe parcursul zilei.

Statele celulelor LSTM în modul în care sunt stocate

Sursa

În diagrama de mai sus, linia orizontală ct denotă starea celulei care este memoria LSTM. După cum am menționat imediat mai sus, aceasta se referă la tendința acțiunilor în ziua precedentă (1). Această informație va intra în celulă și va fi procesată împreună cu celelalte informații care intră. Linia notată cu ct-1 reprezintă starea ascunsă (2) care, în cazul nostru de predicție a acțiunilor, va conține informațiile din etapele temporale anterioare (de exemplu, prețul acțiunilor din ziua precedentă). Linia orizontală notată cu ht-1 este intrarea în momentul actual, care reprezintă prețul actual al acțiunilor (3). Utilizând informațiile din prețul anterior al acțiunilor (Hidden State), prețul curent combinat cu tendința din ziua precedentă (Cell State), LSTM va genera o ieșire.

AMD EPYC SERVER SALE

Codul Python pentru crearea unui model de predicție LSTM

Codul Python următor ne conduce prin pașii de creare a unui model LSTM de predicție a prețului unei acțiuni.

  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

Un program capabil să prezică prețurile la bursă folosind LSTM

Acum aveți codul Python pentru a începe să preziceți prețurile acțiunilor la bursă folosind LSTM. Încercați-l și anunțați-ne cum funcționează pentru dumneavoastră. Suntem abia la începutul dezvăluirii capacității LSTM în diferite aplicații și suntem încântați de viitor.

Aflați mai multe despre modul în care rețelele neuronale recurente LSTM sunt folosite în alte aplicații.

Aveți întrebări despre stațiile de lucru sau serverele de învățare profundă?
Contactați Exxact astăzi

.

Leave a Reply

Lasă un răspuns

Adresa ta de email nu va fi publicată.