دوره زبان تخصصی برای برنامه‌نویسان (هدیه ویژه ثبت‌نام در دوره‌های متخصص) (فرصت محدود ⏰)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ غلامحسین شیخ سفلی
آلگوریتم seq2seq برای بازار‌های مالی
مسعود کاویانی حل شده توسط مسعود کاویانی

سلام و ارادت
 من با  الهام گرفتن از الگوریتم seq2seq که شما برای ساخت یک ترجمه گر هوشمند پیاده سازی کردید یک مدل seq2seq برای پیش بینی بازار‌های مالی نوشتم میخواستم شما بررسی بفرمایید ببینید درست هست یا خیر؟ البته من با دو لایه ال اس تی ام و سه لایه دنس مدل را ساختممن که تست گرفتم 2 عدد اول  سکوئنسی که پیش بینی میشود خیلی با اعداد واقعی اختلاف دارد این کد‌های من است:
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, LSTM, Dense
import numpy as np
import pytse_client as tse
import os
import streamlit as st
import pandas as pd


# In[4]:

# خواندن فایل دیتاست
data = pd.read_csv('tickers_data/out.csv')


# In[5]:


# ساخت دیتاست مناسب برای مدل سکوئنس تو سکوئنس
X = []
y = []
for i in range(len(data)-30-60+1):
   X.append(data['close'][i:60 + i])
   y.append(data['close'][i + 60:60 + 30 + i])
X = np.array(X)
y = np.array(y)


# In[6]:


X.shape


# In[7]:


X_train_for_test = X[:-1]
y_train_for_test = y[:-1]


# In[8]:


X_test = X[-1]
X_test.shape


# In[9]:


X_train_for_test.shape


# In[10]:


encoder_input_data = X_train_for_test.reshape(X_train_for_test.shape[0], 60, 1)
decoder_input_data = y_train_for_test.reshape(X_train_for_test.shape[0], 30, 1)
decoder_target_data = y_train_for_test.reshape(X_train_for_test.shape[0], 30, 1)


# In[9]:


encoder_input_data.shape


# In[13]:


# پارامترهای مدل
input_timesteps = 60  # تعداد سکوئنس ورودی
output_timesteps = 30  # تعداد سکوئنس خروجی
num_features = 1  # تعداد ویژگی‌ها (مثلاً قیمت یک سهم)

 


# 5.  داده‌های نمونه 
X_encoder = encoder_input_data  # داده‌های ورودی انکودر
X_decoder = decoder_input_data  # داده‌های ورودی دیکودر
Y_decoder = decoder_target_data  # داده‌های هدف دیکودر


# In[16]:


X_decoder.shape


# In[17]:

 


# 1. ساخت لایه‌های انکودر  LSTM
encoder_inputs = Input(shape=(None, num_features), name="encoder_inputs")

# اولین LSTM انکودر 
encoder_lstm1 = LSTM(256, return_sequences=True, return_state=True, name="encoder_lstm1")
encoder_outputs1, state_h1, state_c1 = encoder_lstm1(encoder_inputs)

# دومین LSTM انکودر
encoder_lstm2 = LSTM(256, return_state=True, name="encoder_lstm2")
encoder_outputs2, state_h2, state_c2 = encoder_lstm2(encoder_outputs1)

# ذخیره حالت‌های انکودر برای دیکودر
encoder_states = [state_h2, state_c2]


# In[15]:


# 2. ساخت لایه‌های دیکودر  LSTM و Dense
decoder_inputs = Input(shape=(None, num_features), name="decoder_inputs")

# اولین LSTM دیکودر (
decoder_lstm1 = LSTM(256, return_sequences=True, return_state=True, name="decoder_lstm1")
decoder_outputs1, _, _ = decoder_lstm1(decoder_inputs, initial_state=encoder_states)

# دومین LSTM دیکودر 
decoder_lstm2 = LSTM(256, return_sequences=True, return_state=True, name="decoder_lstm2")
decoder_outputs2, _, _ = decoder_lstm2(decoder_outputs1)

# اضافه کردن لایه Dense
decoder_dense1 = Dense(128, activation="relu", name="decoder_dense1")
decoder_dense2 = Dense(64, activation="relu", name="decoder_dense2")
decoder_dense3 = Dense(num_features, activation="linear", name="decoder_dense3")

decoder_outputs = decoder_dense1(decoder_outputs2)
decoder_outputs = decoder_dense2(decoder_outputs)
decoder_outputs = decoder_dense3(decoder_outputs)


# In[16]:


# 3. ساخت مدل Seq2Seq
seq2seq_model = Model([encoder_inputs, decoder_inputs], decoder_outputs, name="seq2seq_model")


# In[27]:


# 4. کامپایل مدل
seq2seq_model.compile(optimizer="adam", loss="mae")
seq2seq_model.summary()


# In[28]:


# 6. آموزش مدل
seq2seq_model.fit([X_encoder, X_decoder], Y_decoder, epochs=20, batch_size=32, validation_split = 0.2)


# In[29]:


# 7.  پیش‌بینی
# انکودر پیش‌بینی
encoder_model = Model(encoder_inputs, encoder_states)


# In[30]:


# دیکودر پیش‌بینی
decoder_state_input_h = Input(shape=(256,), name="decoder_state_h")
decoder_state_input_c = Input(shape=(256,), name="decoder_state_c")
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]

decoder_lstm1_outputs, state_h1, state_c1 = decoder_lstm1(
   decoder_inputs, initial_state=decoder_states_inputs
)
decoder_lstm2_outputs, state_h2, state_c2 = decoder_lstm2(
   decoder_lstm1_outputs, initial_state=[state_h1, state_c1]
)
decoder_states = [state_h2, state_c2]
decoder_dense_outputs1 = decoder_dense1(decoder_lstm2_outputs)
decoder_dense_outputs2 = decoder_dense2(decoder_dense_outputs1)
decoder_outputs = decoder_dense3(decoder_dense_outputs2)

decoder_model = Model(
   [decoder_inputs] + decoder_states_inputs, [decoder_outputs] + decoder_states
)


# In[31]:


# 8. پیش‌بینی سکوئنس جدید
def predict_sequence(input_seq, output_timesteps, encoder_model, decoder_model):
   states = encoder_model.predict(input_seq)
   
  
   target_seq = np.zeros((1, 1, num_features))
   
  
   output_seq = []
   for _ in range(output_timesteps):
       
       output_tokens, h, c = decoder_model.predict([target_seq] + states)
       
       
       output_seq.append(output_tokens[0, 0, 0])
       
       
       target_seq = output_tokens[:, -1:, :]
       states = [h, c]
   
   return np.array(output_seq)


# In[34]:


# آزمایش مدل با داده نمونه
test_input = X_encoder[-2:-1]  
predicted_sequence = predict_sequence(test_input, output_timesteps, encoder_model, decoder_model)

print
print(predicted_sequence

سلام بله، حل مسائل بازارهای مالی عموماً به دلیل سختی و پیچیدگی الگو به این سادگی نیست

برای حل این مسئله، این مقاله مفید است:

https://stephen137.github.io/posts/Financial%20Forecasting/Financial%20Forecasting.html

بهترین پاسخ
مسعود کاویانی ۲۶ دی ۱۴۰۳، ۱۷:۳۶

همچنین این ویدیو یوتیوب میتواند کمک کننده در زمینه‌ی حل مسئله‌ی شما باشد:

https://www.youtube.com/watch?v=PIVHrrH-nmM

مسعود کاویانی ۲۶ دی ۱۴۰۳، ۱۷:۳۷

ممنون از شما

غلامحسین شیخ سفلی ۲۷ دی ۱۴۰۳، ۰۸:۲۵