Long Short-Term Memory (LSTM) একটি বিশেষ ধরনের Recurrent Neural Network (RNN) যা সময়ের উপর ভিত্তি করে তথ্য শিখতে এবং ভবিষ্যদ্বাণী করতে সক্ষম। LSTM প্রধানত time series forecasting, natural language processing (NLP), এবং অন্যান্য sequence prediction tasks এর জন্য ব্যবহৃত হয়।
এই উদাহরণে, আমরা LSTM ব্যবহার করে একটি time series forecasting মডেল তৈরি করব, যেখানে আমরা financial data বা stock price এর পূর্বাভাস দেব।
ধাপ ১: পরিবেশ প্রস্তুত
প্রথমে প্রয়োজনীয় লাইব্রেরিগুলি ইনস্টল করা:
pip install numpy pandas matplotlib tensorflow scikit-learn
- numpy: গাণিতিক গণনা এবং অ্যারে প্রক্রিয়াকরণের জন্য।
- pandas: ডেটা প্রক্রিয়াকরণ এবং এনালাইসিসের জন্য।
- matplotlib: ডেটা ভিজ্যুয়ালাইজেশন করার জন্য।
- tensorflow: LSTM মডেল তৈরি এবং প্রশিক্ষণের জন্য।
- scikit-learn: ডেটা প্রিপ্রসেসিং এবং মডেল ইভালুয়েশন।
ধাপ ২: ডেটা লোড এবং প্রিপ্রসেসিং
এখানে আমরা stock price এর ডেটা ব্যবহার করব। ডেটাসেটটি সাধারণত CSV ফরম্যাটে পাওয়া যায়, যেমন Yahoo Finance থেকে ডেটা সংগ্রহ করা যেতে পারে। ডেটা প্রক্রিয়াকরণ এবং লেবেল তৈরির জন্য pandas ব্যবহার করা হবে।
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# ডেটা লোড করুন (এখানে আমি hypothetical stock price data ব্যবহার করছি)
data = pd.read_csv('stock_data.csv')
# প্রথম কয়েকটি রেকর্ড দেখুন
print(data.head())
# 'Date' কলামটি টেস্টিং ডেটার জন্য ইনডেক্স হিসেবে সেট করুন
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
# 'Close' কলামটি (যেখানে স্টক প্রাইস থাকে) আমাদের প্রেডিকশন টার্গেট
data = data[['Close']]
# ডেটা প্লট করুন
plt.figure(figsize=(10,6))
plt.plot(data['Close'])
plt.title("Stock Price Over Time")
plt.xlabel("Date")
plt.ylabel("Price")
plt.show()
ব্যাখ্যা:
- আমরা stock_data.csv ডেটাসেট লোড করেছি এবং 'Close' কলামটি সিলেক্ট করেছি, যেটি স্টক প্রাইস রেকর্ড করে।
- 'Date' কলামটিকে ইনডেক্স হিসেবে সেট করা হয়েছে, যাতে সময়ের সাথে সম্পর্কিত ডেটা সহজে ভিজ্যুয়ালাইজ করা যায়।
ধাপ ৩: ডেটার স্কেলিং এবং প্রস্তুতি
LSTM মডেল প্রশিক্ষণের আগে ডেটাকে স্কেল করা গুরুত্বপূর্ণ। আমরা MinMaxScaler ব্যবহার করে ডেটাকে ০-১ রেঞ্জে স্কেল করব।
from sklearn.preprocessing import MinMaxScaler
# MinMaxScaler ব্যবহার করে ডেটা স্কেল করুন
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data.values)
# ডেটা প্লট করুন
plt.figure(figsize=(10,6))
plt.plot(scaled_data)
plt.title("Scaled Stock Price")
plt.xlabel("Date")
plt.ylabel("Scaled Price")
plt.show()
ব্যাখ্যা:
- MinMaxScaler ব্যবহার করে ডেটাকে স্কেল করা হচ্ছে যাতে মডেলটি দ্রুত এবং সঠিকভাবে শিখতে পারে।
ধাপ ৪: LSTM মডেল তৈরির জন্য ডেটা প্রস্তুতি
LSTM মডেল তৈরির জন্য, আমাদের time steps অনুযায়ী ডেটা প্রস্তুত করতে হবে। অর্থাৎ, আমরা একটি নির্দিষ্ট সময়সীমার উপর ভিত্তি করে ভবিষ্যত প্রেডিকশন করতে চাই। এজন্য আমরা একটি ফাংশন তৈরি করব যা ডেটাকে প্রশিক্ষণের জন্য প্রস্তুত করবে।
# LSTM এর জন্য ডেটা প্রস্তুতি
def create_dataset(data, time_step=60):
X, y = [], []
for i in range(len(data)-time_step-1):
X.append(data[i:(i+time_step), 0])
y.append(data[i + time_step, 0])
return np.array(X), np.array(y)
# 60 দিনের ডেটা নিয়ে ভবিষ্যতের ১ দিনের প্রেডিকশন
time_step = 60
X, y = create_dataset(scaled_data, time_step)
# ডেটাকে (samples, time_steps, features) আকারে reshape করুন
X = X.reshape(X.shape[0], X.shape[1], 1)
print(f"X shape: {X.shape}, y shape: {y.shape}")
ব্যাখ্যা:
create_datasetফাংশনটি সময়সীমা অনুযায়ী ডেটা প্রস্তুত করছে। এখানে, আমরা 60 দিনের তথ্য দিয়ে পরবর্তী 1 দিনের প্রেডিকশন করব।- X এর আকার হবে
(samples, time_steps, features), যেখানে time_steps হল পূর্ববর্তী দিনের সংখ্যা এবং features হল এখানে ১টি (স্টক প্রাইস)।
ধাপ ৫: LSTM মডেল তৈরি এবং প্রশিক্ষণ
এখন আসল কাজ শুরু, LSTM মডেল তৈরি এবং প্রশিক্ষণ করা।
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
# LSTM মডেল তৈরি করুন
model = Sequential()
# LSTM লেয়ার
model.add(LSTM(units=50, return_sequences=True, input_shape=(X.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))
# আউটপুট লেয়ার
model.add(Dense(units=1))
# মডেল কম্পাইল করুন
model.compile(optimizer='adam', loss='mean_squared_error')
# মডেল প্রশিক্ষণ
model.fit(X, y, epochs=10, batch_size=32)
ব্যাখ্যা:
- LSTM Layer: প্রথম LSTM লেয়ারটি
return_sequences=Trueদিয়ে রাখা হয়েছে যাতে এটি পরবর্তী LSTM লেয়ারের জন্য সিকোয়েন্স আউটপুট দেয়। - Dropout Layer: Dropout ব্যবহার করা হয়েছে, যাতে মডেল ওভারফিট না হয়।
- Dense Layer: আউটপুট লেয়ার, যেখানে 1টি নিউরন থাকবে কারণ আমাদের একক ভবিষ্যত প্রেডিকশন প্রয়োজন।
ধাপ ৬: ভবিষ্যত প্রেডিকশন
প্রশিক্ষণ শেষে, আমরা কিছু দিন পরের স্টক প্রাইস প্রেডিক্ট করতে পারি।
# ভবিষ্যতের জন্য প্রেডিকশন করার জন্য পূর্ববর্তী 60 দিনের তথ্য ব্যবহার করুন
test_input = scaled_data[-60:].reshape(1, -1)
test_input = test_input.reshape((test_input.shape[0], test_input.shape[1], 1))
# প্রেডিকশন করুন
predicted_price = model.predict(test_input)
# প্রেডিকশনের স্কেল ফেরত আনা
predicted_price = scaler.inverse_transform(predicted_price)
print(f"Predicted Stock Price: {predicted_price}")
ব্যাখ্যা:
- আমরা last 60 days ডেটা নিয়ে পরবর্তী দিনের প্রেডিকশন করেছি এবং প্রেডিকশনটি স্কেল করে আনা হয়েছে।
ধাপ ৭: ফলাফল ভিজ্যুয়ালাইজেশন
প্রেডিকশনের ফলাফল ভিজ্যুয়ালাইজ করতে:
# প্রকৃত এবং প্রেডিক্টেড স্টক প্রাইস তুলনা করুন
plt.figure(figsize=(10,6))
plt.plot(data.index[-len(predicted_price):], predicted_price, color='red', label='Predicted Stock Price')
plt.plot(data.index, data['Close'], color='blue', label='Actual Stock Price')
plt.title('Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()
সারাংশ
এই প্রজেক্টে:
- LSTM ব্যবহার করে আমরা time series forecasting তৈরি করেছি।
- stock price prediction এর জন্য ডেটা প্রিপ্রসেসিং, LSTM মডেল তৈরি, প্রশিক্ষণ এবং ভবিষ্যৎ প্রেডিকশন করার পদক্ষেপগুলো বিস্তারিতভাবে দেখানো হয়েছে।
- Transfer Learning বা অন্যান্য মডেল প্রয়োগ করে আপনি আরও জটিল প্রেডিকশন সিস্টেম তৈরি করতে পারেন।
Read more