Skill

Time Series এবং Forecasting মডেল

কেরাস (Keras) - Machine Learning

461

Time Series হল এমন একটি ডেটাসেট যা একটি নির্দিষ্ট সময়ে ধারাবাহিকভাবে সংগৃহীত হয়। এটি সাধারণত time-dependent ডেটা বিশ্লেষণ করতে ব্যবহৃত হয়, যেখানে আগের সময়ের ডেটা ভবিষ্যতকে পূর্বাভাস দেওয়ার জন্য সহায়ক হয়। Time Series ডেটা যেমন স্টক মার্কেট, আবহাওয়া, অর্থনীতি, বিক্রয়, জনসংখ্যার প্রবৃদ্ধি ইত্যাদিতে পাওয়া যায়।

Forecasting হল Time Series ডেটা বিশ্লেষণ এবং তার ভিত্তিতে ভবিষ্যতের প্রবণতা পূর্বাভাস করা। Forecasting মডেলগুলি Time Series ডেটার প্যাটার্নগুলি শিখে ভবিষ্যতের মানের অনুমান করতে সহায়তা করে।

Time Series ডেটা বিশ্লেষণ এবং Forecasting মডেলের মৌলিক ধারণা

১. Time Series এর মৌলিক উপাদান

Time Series ডেটাতে সাধারণত কিছু মৌলিক উপাদান থাকে:

  1. Trend: সময়ের সাথে ডেটার দীর্ঘমেয়াদি প্রবণতা। এটি ঊর্ধ্বমুখী বা নিম্নমুখী হতে পারে।
  2. Seasonality: নির্দিষ্ট সময়কাল বা সময়ের মধ্যে পুনরাবৃত্তি ঘটে এমন প্যাটার্ন, যেমন মাসিক বা ত্রৈমাসিক চক্র।
  3. Cyclic: কোনও প্যাটার্ন যা নিয়মিত না হলেও বড় সাইক্লিক মুভমেন্ট ধারণ করে।
  4. Irregular (Noise): কোনো নির্দিষ্ট প্যাটার্নের অংশ নয়, এটি সাধারণত অস্থির বা এলোমেলো পরিবর্তন।

২. Time Series মডেল

১. ARIMA (AutoRegressive Integrated Moving Average)

ARIMA হল Time Series ডেটার জন্য একটি জনপ্রিয় মডেল যা Trend এবং Seasonality বিশ্লেষণ করতে সক্ষম। এটি তিনটি মৌলিক উপাদান দ্বারা গঠিত:

  • AR (AutoRegressive): আগের মানের সাথে বর্তমান মানের সম্পর্ক।
  • I (Integrated): Time Series ডেটার স্টেশনারিটি নিশ্চিত করার জন্য ডিফারেন্সিং প্রক্রিয়া।
  • MA (Moving Average): পূর্ববর্তী ত্রুটি বা রেসিডুয়ালগুলির গড়।

ARIMA মডেলকে SARIMA (Seasonal ARIMA) বলা হয় যখন Time Series এ মৌসুমি উপাদান থাকে।

ARIMA মডেল ফরমুলা:

Yt=c+ϕ1Yt1+ϕ2Yt2+...+ϵtY_t = c + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + ... + \epsilon_t

SARIMA হল ARIMA এর উন্নত সংস্করণ যা মৌসুমী উপাদানকে সামলাতে পারে।

২. Exponential Smoothing (ETS)

Exponential Smoothing মডেল বিভিন্ন ধরনের সময়সীমার পূর্বাভাসে ব্যবহৃত হয় এবং এটি সহজেই Trend এবং Seasonality ধারণ করতে পারে। এতে বেশ কিছু ভিন্ন ভিন্ন কৌশল রয়েছে:

  1. Simple Exponential Smoothing (SES): একক পরিমাণে সমানভাবে প্রত্যেক সময়ের জন্য ডেটাকে মসৃণ করা হয়।
  2. Holt’s Linear Trend Model: যখন ডেটাতে একটি ট্রেন্ড থাকে, তখন এটি ডেটার ট্রেন্ডকেও অন্তর্ভুক্ত করে।
  3. Holt-Winters Seasonal Model: এই মডেলটি মৌসুমি ডেটার জন্য বিশেষভাবে ব্যবহৃত হয়, যা ডেটার মৌসুমী প্যাটার্ন ধারণ করে।

৩. Prophet

Prophet হল একটি শক্তিশালী ফ্রেমওয়ার্ক যা Facebook দ্বারা তৈরি হয়েছে এবং এটি সিজনালিটি এবং ট্রেন্ডের ভিত্তিতে Time Series ডেটা বিশ্লেষণ এবং পূর্বাভাস তৈরি করতে পারে। এটি সহজে ডেটার মৌসুমী প্যাটার্ন এবং ছন্দের সাথে খাপ খাইয়ে পূর্বাভাস তৈরি করে।

Prophet মডেলটি Time Series ডেটা থেকে trend, seasonality, এবং holiday effects পৃথক করে পূর্বাভাস তৈরি করতে পারে।

from fbprophet import Prophet
import pandas as pd

# Data Preparation
df = pd.read_csv('your_data.csv')
df.columns = ['ds', 'y']  # ds = Date column, y = Target variable

# Model training
model = Prophet()
model.fit(df)

# Make a prediction
future = model.make_future_dataframe(df, periods=365)
forecast = model.predict(future)

# Plot the forecast
model.plot(forecast)

৪. Long Short-Term Memory (LSTM)

LSTM একটি Recurrent Neural Network (RNN) এর একটি বিশেষ সংস্করণ যা Time Series ডেটা এবং সিকুয়েন্স ডেটা মডেলিংয়ের জন্য অত্যন্ত কার্যকরী। LSTM এর মূল শক্তি হল এটি দীর্ঘ সময় ধরে ডেটার সম্পর্ক মনে রাখতে পারে। এটি ট্রেন্ড, সিজনালিটি এবং প্যাটার্নের জন্য উপযুক্ত, এবং এটি গভীর শেখার মাধ্যমে Time Series পূর্বাভাস তৈরি করতে সক্ষম।

LSTM মডেলটি সাধারণত ব্যবহার করা হয় যখন Time Series ডেটা বিশ্লেষণ এবং ভবিষ্যত ভবিষ্যদ্বাণী করতে হয়।

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# LSTM model creation
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(LSTM(units=50, return_sequences=False))
model.add(Dense(units=1))

# Model compilation
model.compile(optimizer='adam', loss='mean_squared_error')

# Model training
model.fit(X_train, y_train, epochs=50, batch_size=32)

৩. Forecasting মডেল

Forecasting হল Time Series ডেটার ভবিষ্যত মান অনুমান করার প্রক্রিয়া। এর মাধ্যমে পূর্ববর্তী ডেটার উপর ভিত্তি করে ভবিষ্যতের প্রেডিকশন তৈরি করা হয়। Forecasting মডেলগুলি সাধারণত বিভিন্ন প্রযুক্তি যেমন ARIMA, Exponential Smoothing, এবং Deep Learning ব্যবহার করে ভবিষ্যত ভবিষ্যদ্বাণী তৈরি করতে সহায়তা করে।

Model Evaluation and Metrics:

Forecasting মডেলগুলির কার্যকারিতা মাপতে কিছু মেট্রিক ব্যবহার করা হয়:

  1. Mean Absolute Error (MAE):

    MAE=1ni=1nyiy^iMAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|

    (এখানে yiy_i হল আসল মান এবং y^i\hat{y}_i হল পূর্বাভাসিত মান)

  2. Mean Squared Error (MSE):

    MSE=1ni=1n(yiy^i)2MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

  3. Root Mean Squared Error (RMSE): এটি MSE এর স্কোয়ার রুট।
  4. Mean Absolute Percentage Error (MAPE):

    MAPE=1ni=1nyiy^iyi×100MAPE = \frac{1}{n} \sum_{i=1}^{n} \left|\frac{y_i - \hat{y}_i}{y_i}\right| \times 100


সারাংশ

Time Series এবং Forecasting মডেলগুলির মাধ্যমে আপনি বিভিন্ন সময়ে সংগ্রহ করা ডেটা ব্যবহার করে ভবিষ্যত প্রবণতা এবং প্যাটার্ন অনুমান করতে পারেন। কিছু সাধারণ Time Series মডেল হল ARIMA, Exponential Smoothing, Prophet, এবং LSTM। এদের মধ্যে কিছু মডেল সাধারণ ডেটা বিশ্লেষণের জন্য উপযুক্ত, যেমন ARIMA, এবং কিছু মডেল ডীপ লার্নিং প্রযুক্তি ব্যবহার করে জটিল সিকুয়েন্স ডেটা বিশ্লেষণ করতে সক্ষম, যেমন LSTM। Hyperparameter tuning, মডেল প্রশিক্ষণ, এবং সঠিক মূল্যায়ন প্রক্রিয়া ব্যবহার করে আপনি একটি কার্যকরী পূর্বাভাস মডেল তৈরি করতে পারেন।

Content added By

LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Units) হল Recurrent Neural Networks (RNNs) এর উন্নত সংস্করণ, যা Time Series Data (যেমন স্টক প্রাইস প্রেডিকশন, সিকুয়েন্স ডেটা, স্পিচ রিকগনিশন) বিশ্লেষণ এবং পূর্বাভাসের জন্য ব্যবহৃত হয়। এই মডেলগুলি গতানুগতিক RNN এর তুলনায় দীর্ঘকালীন সময়কাল ধরে তথ্য সংরক্ষণ এবং ব্যবহার করতে সক্ষম, যা Time Series ডেটাতে অত্যন্ত কার্যকরী।

এখানে LSTM এবং GRU মডেলের মৌলিক ব্যবহার দেখানো হবে, যা Time Series ডেটা নিয়ে কাজ করতে পারে।

LSTM এবং GRU এর মধ্যে পার্থক্য

  • LSTM অনেক বেশি সক্ষম দীর্ঘকালীন সময়ের সংরক্ষণে, তবে এটি বেশি প্যারামিটার নিয়ে আসে।
  • GRU LSTM এর তুলনায় কম প্যারামিটার ব্যবহার করে, তবে এটি এক ধরনের আপগ্রেডেড রিকারেন্ট নেটওয়ার্ক হিসেবে অনেক সময় LSTM এর সমান বা বেশি কার্যকর হতে পারে।

Time Series ডেটার জন্য LSTM/GRU মডেল তৈরি করা

১. ডেটা প্রিপ্রসেসিং

Time Series ডেটার জন্য প্রথমে ডেটা প্রিপ্রসেস করা প্রয়োজন, যেমন স্কেলিং, শিফট করা, উইন্ডো তৈরি করা ইত্যাদি। এটি করতে আপনি MinMaxScaler এবং train_test_split ব্যবহার করতে পারেন।

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

# Time series ডেটার উদাহরণ
data = pd.read_csv('time_series_data.csv')  # আপনার ডেটাসেট লোড করুন

# Time Series ডেটার প্রিপ্রসেসিং
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data['value'].values.reshape(-1, 1))  # ডেটার মান স্কেল করা

# ডেটা উইন্ডো তৈরি করা (উদাহরণস্বরূপ, পূর্ববর্তী 60 দিনের তথ্য নিয়ে 1 দিনের পূর্বাভাস)
def create_dataset(data, time_step=60):
    X, y = [], []
    for i in range(time_step, len(data)):
        X.append(data[i-time_step:i, 0])  # পূর্ববর্তী 60 দিন
        y.append(data[i, 0])  # পরবর্তী দিন
    return np.array(X), np.array(y)

X, y = create_dataset(scaled_data)

# ডেটা ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)

# X_train এবং X_test কে 3D আকারে রূপান্তর করা (Num_samples, time_steps, features)
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

২. LSTM মডেল তৈরি করা

এখন আমরা LSTM মডেল তৈরি করব যা Time Series ডেটার জন্য পূর্বাভাস তৈরি করতে সক্ষম।

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_train.shape[1], 1)))
model.add(Dropout(0.2))  # Overfitting কমানোর জন্য Dropout

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_train, y_train, epochs=20, batch_size=32)

এখানে:

  • প্রথম LSTM লেয়ারreturn_sequences=True থাকছে, কারণ পরবর্তী LSTM লেয়ারটি সিকুয়েন্স গ্রহণ করবে।
  • Dropout লেয়ারগুলি ব্যবহৃত হয়েছে যাতে ওভারফিটিং কমানো যায়।

৩. GRU মডেল তৈরি করা

GRU (Gated Recurrent Unit) এর জন্য মডেলটি একইভাবে তৈরি করা হবে, তবে এখানে GRU লেয়ার ব্যবহার করা হবে LSTM এর পরিবর্তে।

from tensorflow.keras.layers import GRU

# GRU মডেল তৈরি করা
model_gru = Sequential()

# GRU লেয়ার
model_gru.add(GRU(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model_gru.add(Dropout(0.2))

model_gru.add(GRU(units=50, return_sequences=False))
model_gru.add(Dropout(0.2))

# আউটপুট লেয়ার
model_gru.add(Dense(units=1))

# মডেল কম্পাইল করা
model_gru.compile(optimizer='adam', loss='mean_squared_error')

# মডেল প্রশিক্ষণ
model_gru.fit(X_train, y_train, epochs=20, batch_size=32)

৪. মডেল পূর্বাভাস তৈরি করা

প্রশিক্ষণের পরে, আপনি LSTM বা GRU মডেল ব্যবহার করে Time Series ডেটা নিয়ে পূর্বাভাস তৈরি করতে পারেন।

# পূর্বাভাস তৈরি করা
predicted_stock_price = model.predict(X_test)

# পূর্বাভাস স্কেল করা
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)

# প্রকৃত এবং পূর্বাভাস মূল্য তুলনা করা
import matplotlib.pyplot as plt
plt.plot(scaler.inverse_transform(y_test.reshape(-1, 1)), label='True Value')
plt.plot(predicted_stock_price, label='Predicted Value')
plt.legend()
plt.show()

এখানে:

  • model.predict() মেথড দ্বারা মডেল থেকে পূর্বাভাস তৈরি করা হচ্ছে।
  • scaler.inverse_transform() দিয়ে স্কেল করা পূর্বাভাস ডেটা ডিনরমালাইজ করা হচ্ছে।

৫. মডেল মূল্যায়ন

মডেলের কার্যকারিতা মূল্যায়ন করার জন্য আপনি Mean Squared Error (MSE) বা Root Mean Squared Error (RMSE) ব্যবহার করতে পারেন।

from sklearn.metrics import mean_squared_error
import math

# MSE এবং RMSE
mse = mean_squared_error(scaler.inverse_transform(y_test.reshape(-1, 1)), predicted_stock_price)
rmse = math.sqrt(mse)

print(f'MSE: {mse}')
print(f'RMSE: {rmse}')

সারাংশ

LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Unit) হল Recurrent Neural Networks (RNNs) এর দুটি শক্তিশালী এবং জনপ্রিয় সংস্করণ যা Time Series ডেটা প্রক্রিয়াকরণ এবং পূর্বাভাসের জন্য ব্যবহৃত হয়। LSTM দীর্ঘকালীন সময়ের তথ্য স্মরণ রাখতে সক্ষম এবং GRU এর তুলনায় কম প্যারামিটার ব্যবহার করে, তবে কার্যকারিতায় প্রায় সমান। এই মডেলগুলির মাধ্যমে আপনি Time Series ডেটার উপর ভিত্তি করে পূর্বাভাস তৈরি করতে পারেন, এবং Keras/TensorFlow এর সাহায্যে এটি সহজেই বাস্তবায়ন করা সম্ভব।

Content added By

Sequence-to-Sequence (Seq2Seq) মডেল হল একটি ধরনের নিউরাল নেটওয়ার্ক আর্কিটেকচার যা একটি ইনপুট সিকোয়েন্স থেকে আউটপুট সিকোয়েন্স প্রেডিক্ট করতে ব্যবহৃত হয়। এটি মূলত Recurrent Neural Networks (RNNs) অথবা তাদের উন্নত সংস্করণ যেমন Long Short-Term Memory (LSTM) বা Gated Recurrent Units (GRU) ব্যবহার করে তৈরি করা হয়।

Seq2Seq মডেল মূলত Machine Translation, Speech Recognition, Text Summarization, এবং Time Series Prediction এর মতো কাজগুলোতে ব্যবহৃত হয়, যেখানে ইনপুট এবং আউটপুট উভয়ই একটি সিকোয়েন্স হিসেবে থাকে।

Sequence-to-Sequence মডেলের মূল ধারণা:

  1. Encoder: এটি ইনপুট সিকোয়েন্সকে প্রসেস করে এবং একটি স্ন্যাপশট তৈরি করে (একটি সেকেন্ডারি ভেক্টর বা hidden state)।
  2. Decoder: এটি এই স্ন্যাপশট বা hidden state থেকে আউটপুট সিকোয়েন্স তৈরি করে।

এটা মূলত দুটি অংশে বিভক্ত: Encoder এবং Decoder, যেখানে Encoder ইনপুট সিকোয়েন্সকে ক্যাপচার করে এবং Decoder এর মাধ্যমে সঠিক আউটপুট সিকোয়েন্স তৈরি হয়।


Sequence-to-Sequence মডেল কিভাবে কাজ করে:

  1. Encoder: প্রথমে ইনপুট সিকোয়েন্স (যেমন: একটি বাক্য) RNN, LSTM বা GRU দিয়ে প্রসেস করা হয়। এটি ইনপুট সিকোয়েন্সের সমস্ত ইনফরমেশন স্টোর করে একটি স্ন্যাপশট তৈরি করে (hidden state)।
  2. Decoder: Decoder অংশ এই hidden state বা স্ন্যাপশট ব্যবহার করে আউটপুট সিকোয়েন্স (যেমন: অন্য ভাষায় অনুবাদ) তৈরি করে।
  3. Training Process: Seq2Seq মডেলটি প্রশিক্ষণের সময় ইনপুট সিকোয়েন্স থেকে আউটপুট সিকোয়েন্সের মধ্যে সম্পর্ক শিখে এবং তারপরে নতুন ইনপুট সিকোয়েন্সের জন্য প্রেডিকশন করতে সক্ষম হয়।

Keras তে Seq2Seq মডেল ব্যবহার করে Prediction

এখানে আমরা একটি সাধারণ Seq2Seq মডেল তৈরি করার উদাহরণ দেখব, যেখানে ইনপুট সিকোয়েন্স একটি বাক্য হবে এবং আউটপুট সিকোয়েন্স হবে সেই বাক্যের অন্য ভাষায় অনুবাদ।

১. মডেল তৈরি এবং ডেটা প্রিপ্রসেসিং

প্রথমে আমরা Keras লাইব্রেরি এবং প্রয়োজনীয় মডিউলগুলো ইনস্টল করব এবং একটি Seq2Seq মডেল তৈরি করব।

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, LSTM, Dense
import numpy as np

# ইনপুট এবং আউটপুট সিকোয়েন্সের দৈর্ঘ্য
input_texts = ['Hello', 'How are you?', 'Good morning']
output_texts = ['Hola', '¿Cómo estás?', 'Buenos días']

# ইনপুট এবং আউটপুট সিকোয়েন্সের অক্ষরের সেট তৈরি করা
input_chars = sorted(set(''.join(input_texts)))
output_chars = sorted(set(''.join(output_texts)))

# অক্ষরের জন্য ইনডেক্স তৈরি করা
input_token_index = {char: i for i, char in enumerate(input_chars)}
output_token_index = {char: i for i, char in enumerate(output_chars)}
reverse_input_char_index = {i: char for char, i in input_token_index.items()}
reverse_output_char_index = {i: char for char, i in output_token_index.items()}

# ইনপুট এবং আউটপুট সিকোয়েন্সে প্যাডিং
max_input_len = max([len(txt) for txt in input_texts])
max_output_len = max([len(txt) for txt in output_texts])

encoder_input_data = np.zeros((len(input_texts), max_input_len, len(input_chars)), dtype='float32')
decoder_input_data = np.zeros((len(output_texts), max_output_len, len(output_chars)), dtype='float32')
decoder_target_data = np.zeros((len(output_texts), max_output_len, len(output_chars)), dtype='float32')

# ইনপুট এবং আউটপুট সিকোয়েন্সকে one-hot encode করা
for i, (input_text, output_text) in enumerate(zip(input_texts, output_texts)):
    for t, char in enumerate(input_text):
        encoder_input_data[i, t, input_token_index[char]] = 1.
    for t, char in enumerate(output_text):
        decoder_input_data[i, t, output_token_index[char]] = 1.
        if t > 0:
            decoder_target_data[i, t - 1, output_token_index[char]] = 1.

২. Seq2Seq মডেল তৈরি

এখন আমরা একটি Seq2Seq মডেল তৈরি করব, যেখানে দুটি LSTM লেয়ার থাকবে—একটি Encoder এবং একটি Decoder

# Encoder অংশ
encoder_inputs = Input(shape=(None, len(input_chars)))
encoder = LSTM(256, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)
encoder_states = [state_h, state_c]

# Decoder অংশ
decoder_inputs = Input(shape=(None, len(output_chars)))
decoder_lstm = LSTM(256, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states)
decoder_dense = Dense(len(output_chars), activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

# মডেল তৈরি
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)

# মডেল কম্পাইল করা
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

# মডেল প্রশিক্ষণ
model.fit([encoder_input_data, decoder_input_data], decoder_target_data, batch_size=64, epochs=100, validation_split=0.2)

এখানে:

  • Encoder অংশ LSTM লেয়ার দ্বারা ইনপুট সিকোয়েন্সের ফিচারগুলি শিখে একটি hidden state তৈরি করছে।
  • Decoder অংশ LSTM লেয়ার দ্বারা hidden state ব্যবহার করে আউটপুট সিকোয়েন্স তৈরি করছে।
  • Dense লেয়ারটি আউটপুট সিকোয়েন্সের প্রতিটি সময়ের জন্য softmax অ্যাক্টিভেশন ফাংশন ব্যবহার করে আউটপুট প্রেডিকশন দেয়।

৩. Prediction এর জন্য Decoder তৈরি করা

আমরা প্রশিক্ষণের পরে মডেলটিকে prediction এর জন্য প্রস্তুত করতে পারি। Decoder এর জন্য একটি নতুন মডেল তৈরি করতে হবে যা প্রেডিকশন করবে।

# Decoder prediction এর জন্য মডেল তৈরি করা
decoder_state_input_h = Input(shape=(256,))
decoder_state_input_c = Input(shape=(256,))
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]

decoder_lstm2 = LSTM(256, return_sequences=True, return_state=True)
decoder_outputs2, state_h2, state_c2 = decoder_lstm2(decoder_inputs, initial_state=decoder_states_inputs)

decoder_states = [state_h2, state_c2]
decoder_outputs2 = decoder_dense(decoder_outputs2)

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

৪. Prediction চালানো

এখন আমরা একটি ইনপুট সিকোয়েন্স দিয়ে আউটপুট সিকোয়েন্স (অর্থাৎ অনুবাদ) প্রেডিক্ট করতে পারব।

def decode_sequence(input_seq):
    states_value = encoder.predict(input_seq)

    target_seq = np.zeros((1, 1, len(output_chars)))
    target_seq[0, 0, output_token_index['\t']] = 1.

    stop_condition = False
    decoded_sentence = ''
    while not stop_condition:
        output_tokens, h, c = decoder_model.predict([target_seq] + states_value)

        sampled_token_index = np.argmax(output_tokens[0, -1, :])
        sampled_char = reverse_output_char_index[sampled_token_index]
        decoded_sentence += sampled_char

        if sampled_char == '\n' or len(decoded_sentence) > max_output_len:
            stop_condition = True

        target_seq = np.zeros((1, 1, len(output_chars)))
        target_seq[0, 0, sampled_token_index] = 1.

        states_value = [h, c]

    return decoded_sentence

# Prediction চালানো
input_seq = encoder_input_data[0:1]  # প্রথম ইনপুট সিকোয়েন্স
decoded_sentence = decode_sequence(input_seq)
print(f"Decoded sentence: {decoded_sentence}")

এখানে:

  • decode_sequence ফাংশনটি ইনপুট সিকোয়েন্সের জন্য একটি আউটপুট সিকোয়েন্স প্রেডিক্ট করে।
  • প্রতিটি সময় টোকেনের জন্য প্রেডিকশন করা হয় এবং অনুবাদটি তৈরি করা হয়।

সারাংশ

Sequence-to-Sequence (Seq2Seq) মডেল হল একটি শক্তিশালী আর্কিট

েকচার যা ইনপুট সিকোয়েন্স থেকে আউটপুট সিকোয়েন্স প্রেডিক্ট করতে ব্যবহৃত হয়। Keras-এ LSTM বা GRU লেয়ার দিয়ে Seq2Seq মডেল তৈরি করা যায়, যেখানে Encoder এবং Decoder অংশ ইনপুট ও আউটপুট সিকোয়েন্সের মধ্যকার সম্পর্ক শিখে। মডেলটি Machine Translation, Speech Recognition, Text Summarization, Time Series Prediction ইত্যাদি সমস্যার জন্য ব্যবহৃত হতে পারে।

Content added By

Sliding Window এবং Rolling Forecast হল ডেটা সায়েন্স এবং মেশিন লার্নিংয়ের গুরুত্বপূর্ণ কৌশল, বিশেষ করে টাইম সিরিজ ডেটার বিশ্লেষণ এবং পূর্বাভাস (forecasting) তৈরি করার জন্য। এই কৌশলগুলো ব্যবহার করা হয় যখন আপনি পূর্ববর্তী ডেটা থেকে ভবিষ্যতের ভবিষ্যদ্বাণী বা পূর্বাভাস তৈরি করতে চান, এবং এতে সময়ের সাথে সাথে ডেটার পরিবর্তন বা পরিবর্তিত প্রবণতা (trend) বিবেচনায় নেওয়া হয়।

এখানে Sliding Window এবং Rolling Forecast Techniques এর বিস্তারিত আলোচনা করা হল:


1. Sliding Window Technique

Sliding Window (একে Moving Windowও বলা হয়) হল একটি কৌশল যেখানে একটি স্থির দৈর্ঘ্যের "উইন্ডো" (window) চলতে থাকে এবং ডেটা সেটের বিভিন্ন অংশে প্রয়োগ করা হয়। এই কৌশলে, একটি নির্দিষ্ট উইন্ডোতে সময়ভিত্তিক ডেটা সিলেক্ট করা হয়, এবং যখন একটি নতুন ডেটা পয়েন্ট যুক্ত হয়, তখন পুরানো একটি ডেটা পয়েন্ট উইন্ডো থেকে বাদ পড়ে, অর্থাৎ এটি "স্লাইড" বা স্থানান্তরিত হয়।

Sliding Window এর মূল ধারণা:

  • এটি পূর্ববর্তী কিছু সময়ের ডেটা ব্যবহার করে ভবিষ্যৎ পূর্বাভাস তৈরি করতে সহায়তা করে।
  • প্রতিটি নতুন ডেটা পয়েন্টের সাথে উইন্ডোটি এক পজিশন এগিয়ে স্লাইড করে, যার ফলে নতুন একটি সময়ের ডেটা ভ্যালিড হয় এবং পুরনো ডেটা বাদ দেওয়া হয়।
  • এটি মূলত ফিচার এক্সট্র্যাকশন বা মডেল ট্রেনিং এর জন্য ব্যবহৃত হয়।

Sliding Window এর উদাহরণ:

ধরা যাক আপনার কাছে ১০ দিনের ডেটা রয়েছে এবং আপনি ৫ দিনের উইন্ডো ব্যবহার করছেন। তাহলে প্রথমে ১ থেকে ৫ দিন পর্যন্ত ডেটা নিয়ে মডেল ট্রেনিং করবেন। তারপর পরবর্তী ৫ দিনের জন্য, উইন্ডোটি স্লাইড হবে, অর্থাৎ ২ থেকে ৬ দিন পর্যন্ত ডেটা নিয়ে পুনরায় মডেল ট্রেনিং করা হবে। এই প্রক্রিয়া চলতে থাকবে যতক্ষণ না সমস্ত ডেটা পয়েন্ট ব্যবহার হয়।

উদাহরণ:

import pandas as pd

# 10 দিনের ডেটাসেট
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window_size = 5
for i in range(len(data) - window_size + 1):
    window = data[i:i+window_size]
    print(window)

এখানে 5 দিনের উইন্ডো দিয়ে পুরো ডেটাসেটের উপর স্লাইডিং উইন্ডো প্রক্রিয়া প্রয়োগ করা হয়েছে।

Sliding Window এর সুবিধা:

  • সময়ের সাথে সাথে নতুন তথ্যের ভিত্তিতে পূর্বাভাস তৈরি করতে সহায়তা করে।
  • ছোট, স্থির উইন্ডো ব্যবহার করে ট্রেনিং এবং ফিচার এক্সট্র্যাকশন দ্রুত হতে পারে।

Sliding Window এর সীমাবদ্ধতা:

  • প্রতিটি উইন্ডো নতুন করে ট্রেনিং করা হয়, তাই মডেলটি সময়ের সাথে চলতে থাকা প্রবণতা ধরে রাখতে নাও পারে।

2. Rolling Forecast Technique

Rolling Forecast হল একটি কৌশল যা Sliding Window এর মতো, কিন্তু এখানে মূল পার্থক্য হল যে, পূর্বাভাস বা ফোরকাস্টিংয়ের জন্য ডেটার একটি চলমান সেট ব্যবহার করা হয়। এর মধ্যে, একই সময়ের পূর্বাভাস তৈরি করতে আপনাকে নতুন ডেটা পয়েন্টগুলিকে একের পর এক যোগ করে যেতে হবে এবং পূর্ববর্তী পূর্বাভাসগুলির জন্য সংশোধন করতে হবে।

Rolling Forecast এর মূল ধারণা:

  • এটি একটি ডায়নামিক পদ্ধতি যেখানে পূর্ববর্তী পূর্বাভাসের উপর ভিত্তি করে ভবিষ্যৎ পূর্বাভাস তৈরি করা হয়।
  • এর মধ্যে, নতুন তথ্যের প্রতি পূর্বাভাসের প্রতিক্রিয়া দেখা যায় এবং পূর্বাভাসগুলি সময়ের সাথে আপডেট হয়।
  • এটি সাধারণত স্টক মার্কেট, বিক্রয় পূর্বাভাস, এবং অর্থনৈতিক মডেলিং এ ব্যবহৃত হয়, যেখানে আপনার মডেলটি পূর্ববর্তী ডেটা থেকে ভবিষ্যতের পূর্বাভাস তৈরি করতে সাহায্য করে।

Rolling Forecast এর উদাহরণ:

ধরা যাক, আপনার কাছে ১০ দিনের ডেটা আছে এবং আপনি প্রথম ৫ দিনের উপর ভিত্তি করে পরবর্তী ৫ দিনের পূর্বাভাস তৈরি করতে চান। প্রথমে ১ থেকে ৫ দিনের ডেটা নিয়ে মডেল ট্রেনিং করবেন, তারপর ১ থেকে ৬ দিন পর্যন্ত ডেটা নিয়ে পূর্বাভাস তৈরি করবেন, এবং এই প্রক্রিয়া চলতে থাকবে যতক্ষণ না শেষ দিন আসে।

উদাহরণ:

import pandas as pd

# 10 দিনের ডেটাসেট
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window_size = 5
for i in range(window_size, len(data)):
    forecast = data[i - window_size:i]  # 5 দিনের ডেটার পূর্বাভাস তৈরি
    print(f'Forecast using data from day {i-window_size+1} to {i}: {forecast}')

এখানে, প্রথম ৫ দিন এবং পরে স্লাইডিং উইন্ডো অনুযায়ী পরবর্তী ৫ দিনের পূর্বাভাস তৈরি করা হচ্ছে।

Rolling Forecast এর সুবিধা:

  • সময়ের সাথে আপডেট হওয়া ডেটার ভিত্তিতে পূর্বাভাস তৈরি করতে সহায়তা করে।
  • ডেটার পরিবর্তন বা প্রবণতা অনুযায়ী পূর্বাভাস সমন্বয় করতে সক্ষম।

Rolling Forecast এর সীমাবদ্ধতা:

  • এটি দীর্ঘ সময়ের জন্য হিসাব করা হলে কম্পিউটেশনাল খরচ বৃদ্ধি পেতে পারে।
  • প্রতিটি পূর্বাভাসকে আপডেট করা হয়, যা সময়সাপেক্ষ হতে পারে।

তুলনা: Sliding Window এবং Rolling Forecast

বৈশিষ্ট্যSliding WindowRolling Forecast
কাজের ধরনপূর্ববর্তী সময়ের একটি নির্দিষ্ট উইন্ডো ব্যবহার করে পূর্বাভাস তৈরি করা হয়।নতুন ডেটা পয়েন্টে পূর্বাভাস আপডেট করা হয় এবং পূর্ববর্তী ফলাফলও সংশোধন করা হয়।
ডেটার পরিমাণউইন্ডো নির্দিষ্ট, স্থির।ডেটা ধারাবাহিকভাবে আপডেট হয়।
প্রধান লক্ষ্যনির্দিষ্ট সময়ের মধ্যে পূর্বাভাস।ভবিষ্যতের পূর্বাভাস তৈরি ও আপডেট করা।
প্রতিটি উইন্ডো/পূর্বাভাসএকই ধরণের তথ্য পুনরায় ব্যবহার করা হয়।পূর্ববর্তী পূর্বাভাসও আপডেট করা হয়।
ব্যবহারছোট ডেটাসেট বা সহজ সমস্যা সমাধানে কার্যকর।সময়ভিত্তিক বড় ডেটাসেট এবং ডায়নামিক সমস্যা সমাধানে কার্যকর।

সারাংশ

Sliding Window এবং Rolling Forecast দুইটি শক্তিশালী কৌশল যা টাইম সিরিজ ডেটা অ্যানালাইসিস এবং পূর্বাভাস তৈরির ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে। Sliding Window সময়ের সাথে চলতে থাকা ডেটার একটি নির্দিষ্ট অংশ ব্যবহার করে এবং Rolling Forecast সময়ের সাথে পূর্বাভাসগুলোকে ধারাবাহিকভাবে আপডেট করে। এই দুটি কৌশল টাইম সিরিজ ডেটার মধ্যে প্রবণতা এবং পরিবর্তন অনুসারে পূর্বাভাস তৈরি করতে সাহায্য করে।

Content added By

Model Evaluation এবং Forecasting Techniques হল ডীপ লার্নিং এবং মেশিন লার্নিং মডেলগুলির কার্যকারিতা এবং সঠিকতা মূল্যায়ন এবং ভবিষ্যদ্বাণী করার জন্য ব্যবহৃত গুরুত্বপূর্ণ কৌশল। এগুলোর মাধ্যমে আমরা মডেলের পারফরম্যান্স যাচাই করতে পারি এবং এটি কীভাবে ভবিষ্যৎ ডেটা বা আউটপুট প্রেডিক্ট করতে সক্ষম তা বুঝতে পারি। এই প্রক্রিয়াগুলি মডেল টিউনিং এবং বেটার পারফরম্যান্স অর্জন করতে সহায়তা করে।


১. Model Evaluation (মডেল মূল্যায়ন)

মডেল ইভালুয়েশন এমন একটি প্রক্রিয়া যার মাধ্যমে আমরা মডেলের কার্যকারিতা যাচাই করি, এর সঠিকতা, স্থিতিশীলতা এবং জেনারালাইজেশন ক্ষমতা সম্পর্কে ধারণা পাই। মডেল ইভালুয়েশনের জন্য কয়েকটি জনপ্রিয় মেট্রিক্স রয়েছে, যা বিভিন্ন ধরনের সমস্যার জন্য উপযুক্ত।

মডেল ইভালুয়েশনের জন্য সাধারণ মেট্রিকস:

  1. Accuracy (সঠিকতা): সঠিকতা হল সঠিক প্রেডিকশনের সংখ্যা মোট প্রেডিকশনের সংখ্যা দ্বারা ভাগ করা। এটি শ্রেণীভিত্তিক মডেলগুলির জন্য ব্যবহৃত হয়।

    ফর্মুলা:

    Accuracy=সঠিক প্রেডিকশনমোট প্রেডিকশন\text{Accuracy} = \frac{\text{সঠিক প্রেডিকশন}}{\text{মোট প্রেডিকশন}}

    এটি সাধারণত শ্রেণীবিভাগের ক্ষেত্রে ব্যবহৃত হয়, যেমন ইমেজ রিকগনিশন বা স্পিচ রিকগনিশন।

  2. Precision (প্রিসিশন): Precision হল সঠিকভাবে পজিটিভ ক্লাসের প্রেডিকশন সংখ্যা, মোট পজিটিভ প্রেডিকশন সংখ্যা।

    ফর্মুলা:

    Precision=TPTP + FP\text{Precision} = \frac{\text{TP}}{\text{TP + FP}}

    যেখানে TP (True Positive) এবং FP (False Positive)।

    এটি গুরুত্বপূর্ণ যখন আপনি চান যে মডেল যেসব পজিটিভ ক্লাস প্রেডিক্ট করছে তা সঠিকভাবে প্রেডিক্ট করা হয়েছে।

  3. Recall (রিকল) বা Sensitivity: Recall হল সঠিকভাবে পজিটিভ ক্লাসের প্রেডিকশন সংখ্যা, মোট পজিটিভ আসল সংখ্যা।

    ফর্মুলা:

    Recall=TPTP + FN\text{Recall} = \frac{\text{TP}}{\text{TP + FN}}

    যেখানে TP (True Positive) এবং FN (False Negative)।

    Recall ব্যবহার করা হয় যখন আপনি চান মডেলটি সমস্ত পজিটিভ ক্লাস সনাক্ত করতে সক্ষম হোক।

  4. F1-Score: F1-Score হল Precision এবং Recall এর ভারসাম্যপূর্ণ মাপ। এটি Precision এবং Recall এর হারমোনিক মীন হিসেবে গণনা করা হয়।

    ফর্মুলা:

    F1-Score=2×Precision×RecallPrecision+Recall\text{F1-Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}

    F1-Score ব্যবহার করা হয় যখন Precision এবং Recall উভয়টি সমানভাবে গুরুত্বপূর্ণ।

  5. Confusion Matrix (কনফিউশন ম্যাট্রিক্স): কনফিউশন ম্যাট্রিক্স একটি টেবিল যা মডেলের প্রেডিকশন এবং প্রকৃত ফলাফলের মধ্যে সম্পর্ক প্রদর্শন করে। এটি মডেলের সঠিক এবং ভুল শ্রেণীভিত্তিক প্রেডিকশন এবং বিভিন্ন শ্রেণীতে বিভক্ত করে।

    উদাহরণ:

    • True Positive (TP): সঠিকভাবে পজিটিভ শ্রেণী পূর্বাভাস।
    • False Positive (FP): ভুলভাবে পজিটিভ শ্রেণী পূর্বাভাস।
    • True Negative (TN): সঠিকভাবে নেগেটিভ শ্রেণী পূর্বাভাস।
    • False Negative (FN): ভুলভাবে নেগেটিভ শ্রেণী পূর্বাভাস।
  6. Mean Squared Error (MSE): এটি রিগ্রেশন মডেলগুলির জন্য ব্যবহৃত হয়। এটি প্রকৃত মান এবং পূর্বাভাসিত মানের মধ্যে গড় বর্গমূল ত্রুটি পরিমাপ করে।

    ফর্মুলা:

    MSE=1ni=1n(yiy^i)2\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

    যেখানে yiy_i হল প্রকৃত মান এবং y^i\hat{y}_i হল পূর্বাভাসিত মান।

  7. R-squared (R²): R² হল রিগ্রেশন মডেলগুলির জন্য ব্যবহৃত একটি পরিমাপ যা মডেলটির আউটপুট এবং প্রকৃত আউটপুটের মধ্যে সম্পর্কের শক্তি বা ফিট দেখায়।

    ফর্মুলা:

    R2=1i=1n(yiy^i)2i=1n(yiyˉ)2R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}

    যেখানে yiy_i প্রকৃত মান, y^i\hat{y}_i পূর্বাভাসিত মান এবং yˉ\bar{y} প্রকৃত মানের গড়।


২. Forecasting Techniques (ভবিষ্যদ্বাণী কৌশল)

ফোরকাস্টিং হল ভবিষ্যতে ঘটতে পারে এমন ঘটনাগুলির পূর্বাভাস দেওয়া। এটি সাধারণত টাইম সিরিজ ডেটা (যেমন, স্টক মার্কেট, আবহাওয়া, বিক্রয়) থেকে ভবিষ্যদ্বাণী করতে ব্যবহৃত হয়। কিছু জনপ্রিয় forecasting techniques হল:

  1. Autoregressive Integrated Moving Average (ARIMA): ARIMA একটি জনপ্রিয় টাইম সিরিজ মডেল যা ভবিষ্যত মানের পূর্বাভাস দেওয়ার জন্য পূর্বের পর্যবেক্ষণগুলোকে ব্যবহার করে। এটি তিনটি প্রধান অংশে বিভক্ত:

    • AR (Autoregression): পূর্ববর্তী মানের উপর নির্ভরশীলতা।
    • I (Integrated): ডেটার ট্রেন্ড বা মৌলিক প্রকৃতির পরিবর্তন।
    • MA (Moving Average): পূর্ববর্তী পূর্বাভাস ত্রুটির উপর নির্ভরশীলতা।

    ARIMA মডেল তৈরি করা:

    from statsmodels.tsa.arima.model import ARIMA
    
    # ARIMA মডেল তৈরি এবং প্রশিক্ষণ
    model = ARIMA(time_series_data, order=(p, d, q))
    model_fit = model.fit()
    
    # ভবিষ্যদ্বাণী করা
    forecast = model_fit.forecast(steps=10)
    
  2. Long Short-Term Memory (LSTM): LSTM একটি বিশেষ ধরনের রিকারেন্ট নিউরাল নেটওয়ার্ক (RNN) যা টাইম সিরিজ ডেটার জন্য ব্যবহৃত হয়। এটি দীর্ঘমেয়াদী এবং স্বল্পমেয়াদী তথ্য একত্রিত করে ডেটার উপর ভিত্তি করে ভবিষ্যদ্বাণী করতে সক্ষম।

    LSTM মডেল তৈরি করা:

    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import LSTM, Dense
    
    # LSTM মডেল তৈরি
    model = Sequential()
    model.add(LSTM(50, activation='relu', input_shape=(X_train.shape[1], X_train.shape[2])))
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mean_squared_error')
    
    # প্রশিক্ষণ
    model.fit(X_train, y_train, epochs=100, batch_size=32)
    
  3. Exponential Smoothing (ETS): ETS হল টাইম সিরিজ ডেটার জন্য একটি মডেল যা ডেটার ট্রেন্ড, মৌসুমীতা, এবং ত্রুটির ভিত্তিতে ভবিষ্যদ্বাণী করে। এটি অতীতে ঘটে যাওয়া ঘটনাগুলির উপর ভিত্তি করে ভবিষ্যৎ ঘটনাগুলির সম্ভাবনা নির্ধারণ করে।
  4. Prophet: Prophet হল Facebook এর তৈরি একটি টাইম সিরিজ ফোরকাস্টিং টুল যা মৌসুমীতা এবং ছুটির দিনগুলির প্রভাব নিতে সক্ষম। এটি বিশেষ করে ব্যবসায়িক ডেটা ও ভবিষ্যদ্বাণী তৈরি করতে ব্যবহৃত হয়।

    Prophet দিয়ে ভবিষ্যদ্বাণী করা:

    from fbprophet import Prophet
    
    # Prophet মডেল তৈরি
    model = Prophet()
    model.fit(df)  # df হল টাইম সিরিজ ডেটা
    
    # ভবিষ্যদ্বাণী
    future = model.make_future_dataframe(df, periods=365)
    forecast = model.predict(future)
    

সারাংশ

  1. Model Evaluation: মডেল মূল্যায়ন করতে ব্যবহৃত বিভিন্ন মেট্রিক্স যেমন Accuracy, Precision, Recall, F1-Score, MSE,

R² ইত্যাদি মডেলের কার্যকারিতা পরিমাপ করে এবং এটি উন্নত করার জন্য টিউনিং করা যায়।

  1. Forecasting Techniques: ভবিষ্যদ্বাণী কৌশল যেমন ARIMA, LSTM, ETS, এবং Prophet টাইম সিরিজ ডেটা থেকে ভবিষ্যত মূল্য বা ফলাফল নির্ধারণ করতে ব্যবহৃত হয়। Transfer Learning এর মতো আধুনিক কৌশলগুলি ব্যবহার করে আগের ডেটা থেকে নতুন কাজের জন্য ফিচারগুলি পুনরায় ব্যবহার করা হয়।
Content added By
Promotion

Are you sure to start over?

Loading...