Time Series ডেটা এমন একটি ডেটাসেট, যেখানে ডেটা টাইম স্ট্যাম্পের (যেমন: ঘণ্টা, দিন, মাস) সাথে সম্পর্কিত থাকে এবং সময়ের সাথে এর মান পরিবর্তন হয়। Time series ডেটা প্রক্রিয়া (Preprocessing) করার সময়, লক্ষ্য থাকে ডেটাকে সেইভাবে প্রস্তুত করা যাতে মডেল বা অ্যালগোরিদমে এর পরবর্তী আউটপুট সঠিক হয়। Time series ডেটা প্রক্রিয়াকরণে কিছু গুরুত্বপূর্ণ পদক্ষেপ রয়েছে:
১. Time Series ডেটা লোড এবং ইন্সপেকশন
প্রথমে ডেটাটি লোড করতে হবে এবং প্রাথমিকভাবে এর গঠন বিশ্লেষণ করতে হবে।
import pandas as pd
# ডেটা লোড করা
data = pd.read_csv('path_to_your_time_series_data.csv', parse_dates=['date_column'], index_col='date_column')
# প্রথম ৫টি রেকর্ড দেখা
print(data.head())
# ডেটার তথ্য দেখা
print(data.info())
এখানে, parse_dates ব্যবহার করা হয়েছে যাতে তারিখের কলামটি ডেটাটাইপ হিসেবে সঠিকভাবে পরিণত হয় এবং index_col দিয়ে সেট করা হয়েছে যে এটি ডেটার ইনডেক্স হিসেবে কাজ করবে।
২. Missing Values (অনুপস্থিত মান) হ্যান্ডেল করা
Time series ডেটাতে মাঝে মাঝে কিছু মান অনুপস্থিত থাকে, যা ট্রেনিং এবং পূর্বাভাসের জন্য সমস্যা সৃষ্টি করতে পারে। Missing values পূরণ করার জন্য সাধারণত ফরওয়ার্ড ফিলিং, ব্যাকওয়ার্ড ফিলিং অথবা ইন্টারপোলেশন পদ্ধতি ব্যবহার করা হয়।
# Missing values চেক করা
print(data.isnull().sum())
# ফরওয়ার্ড ফিলিং (ফিলিং previous value)
data.fillna(method='ffill', inplace=True)
# ব্যাকওয়ার্ড ফিলিং (ফিলিং next value)
# data.fillna(method='bfill', inplace=True)
# ইন্টারপোলেশন (বিভিন্ন পদ্ধতির ইন্টারপোলেশন)
# data.interpolate(method='linear', inplace=True)
৩. Data Resampling এবং Frequency Adjustment
Time series ডেটার ফ্রিকোয়েন্সি পরিবর্তন করা বা resampling করা হয় যখন আপনি সঠিক সময়ের ভিত্তিতে ডেটা পরিবর্তন করতে চান, যেমন: দৈনিক ডেটা থেকে মাসিক ডেটায় পরিবর্তন করা।
# ডেটার ফ্রিকোয়েন্সি পরিবর্তন করা (উদাহরণ: দৈনিক থেকে মাসিক)
data_resampled = data.resample('M').mean() # 'M' মানে মাসিক রিস্যাম্পলিং
৪. Seasonality এবং Trend Decomposition
Time series ডেটাতে প্রায়ই seasonality (বিশেষ সময়ের মধ্যে পুনরাবৃত্তি) এবং trend (সময় অনুসারে ধীরে ধীরে পরিবর্তন) থাকে। এগুলি আলাদা করা গুরুত্বপূর্ণ, কারণ এই উপাদানগুলির সাথে কাজ করার জন্য মডেলটি সঠিকভাবে প্রস্তুত করা হয়।
from statsmodels.tsa.seasonal import seasonal_decompose
# Seasonality এবং trend decomposition
decomposition = seasonal_decompose(data, model='additive', period=365)
# Decomposed components দেখতে
decomposition.plot()
plt.show()
- Model='additive': যখন সময়ের সাথে প্রবণতা (trend) এবং মৌসুমী প্যাটার্ন (seasonality) এর প্রভাব সরাসরি যোগ হয়।
- Model='multiplicative': যখন মৌসুমী প্যাটার্ন এবং প্রবণতার প্রভাব একে অপরের সাথে গুণফলে প্রভাব ফেলে।
৫. Scaling বা Normalization
Time series ডেটার বিভিন্ন বৈশিষ্ট্যের মধ্যে বড় পার্থক্য থাকতে পারে, যা মডেলের পারফরম্যান্সকে প্রভাবিত করতে পারে। সাধারণত, MinMax Scaling বা Standardization ব্যবহার করা হয়।
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# MinMax Scaling
scaler = MinMaxScaler(feature_range=(0, 1))
data_scaled = scaler.fit_transform(data)
# Standardization
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
৬. Lag Features তৈরি করা
Lag features বা shifted features Time series ডেটাতে ব্যবহৃত হয়, যেখানে পূর্ববর্তী সময়ের মানগুলিকে বর্তমান সময়ের সাথে সম্পর্কিত করা হয়।
# 1 ল্যাগ ফিচার তৈরি করা
data['lag_1'] = data['value_column'].shift(1)
# Multiple lag features (e.g., 3 lag features)
data['lag_2'] = data['value_column'].shift(2)
data['lag_3'] = data['value_column'].shift(3)
এখানে shift(1) একটি কলামের মানকে এক সাপ্তাহিক বা একদিন পিছনে নিয়ে আসে, এবং এতে পূর্ববর্তী সময়ের প্রভাব নতুন পয়েন্টের সাথে যুক্ত হয়।
৭. Time-Based Splitting (Train-Test Split)
Time series ডেটার সাথে কাজ করার সময় সাধারণ random splitting ব্যবহার করা উচিত নয়, কারণ এতে সময়ের ধারাবাহিকতা নষ্ট হয়ে যায়। Time series ডেটাতে train-test split করতে সাধারণত time-based split ব্যবহার করা হয়।
# Time-based train-test split
train_size = int(len(data) * 0.8)
train, test = data[:train_size], data[train_size:]
print(f"Training data: {train.shape}")
print(f"Testing data: {test.shape}")
৮. Feature Engineering
Time series ডেটাতে আরও কিছু গুরুত্বপূর্ণ ফিচার তৈরি করা যেতে পারে, যেমন:
- Rolling Mean: এটি পূর্ববর্তী কিছু সময়ের মধ্যে গড় বের করে এবং অস্থিরতা কমাতে সহায়ক।
# Rolling mean (Moving Average)
data['rolling_mean'] = data['value_column'].rolling(window=7).mean()
- Seasonal Features: এক বছরের মধ্যে সময় অনুযায়ী মৌসুমী বৈশিষ্ট্য তৈরি করা।
# Extracting month and day of week as features
data['month'] = data.index.month
data['day_of_week'] = data.index.dayofweek
সারাংশ
Time series ডেটার preprocessing অনেক গুরুত্বপূর্ণ ধাপের সমন্বয়ে গঠিত। এই প্রক্রিয়া ডেটাকে পরিষ্কার, সঠিকভাবে স্কেলড, এবং উপযোগী ফিচার তৈরি করা হয় যাতে ভবিষ্যৎ পূর্বাভাসের জন্য মডেলটি উন্নতভাবে কাজ করতে পারে। গুরুত্বপূর্ণ ধাপগুলো হল:
- Missing values পূরণ করা
- Data resampling এবং frequency adjustment
- Seasonality এবং Trend decomposition
- Scaling বা Normalization
- Lag features তৈরি করা
- Time-based train-test split
- Feature engineering (যেমন rolling mean, seasonal features)
এই সব ধাপ সঠিকভাবে অনুসরণ করলে আপনি একটি শক্তিশালী এবং কার্যকর মডেল তৈরি করতে সক্ষম হবেন।
Read more