Data Cleaning এবং Preprocessing ডেটা সায়েন্সের গুরুত্বপূর্ণ অংশ, যা ডেটা বিশ্লেষণ বা মডেলিংয়ের পূর্বে ডেটাকে প্রস্তুত করার জন্য প্রয়োজনীয়। এই ধাপগুলির মাধ্যমে আমরা ডেটার অযথা বা ভুল তথ্য দূর করে ডেটা সেটকে আরও বিশুদ্ধ, সঠিক এবং ব্যবহারযোগ্য করে তুলি। এটি মেশিন লার্নিং বা ডেটা বিশ্লেষণে ফলস্বরূপ সঠিক এবং কার্যকরী মডেল তৈরি করতে সহায়ক।
১. Data Cleaning (ডেটা পরিস্কার)
ডেটা ক্লিনিং হল ডেটার মধ্যে অপ্রয়োজনীয় বা অযথা তথ্য অপসারণ বা সংশোধন করার প্রক্রিয়া। এর মধ্যে রয়েছে:
১.১. Missing Data (মিসিং ডেটা)
ডেটা সেটে অনেক সময় কিছু তথ্য অনুপস্থিত থাকে, যেগুলোকে Missing Data বলা হয়। এটি ডেটা বিশ্লেষণের জন্য একটি বড় চ্যালেঞ্জ। Missing data মোকাবেলার কিছু পদ্ধতি:
- Removal: যদি অনুপস্থিত ডেটার পরিমাণ খুব কম হয়, তাহলে সেই সারি বা কলাম মুছে ফেলা যেতে পারে।
- Imputation: যদি অনেক ডেটা অনুপস্থিত থাকে, তাহলে সেই ডেটার স্থানে মান প্রদান করা যায় (যেমন, গড় মান, মাধ্যমিক মান ইত্যাদি)।
- Forward/Backward Fill: পূর্ববর্তী বা পরবর্তী মানের মাধ্যমে অনুপস্থিত ডেটা পূর্ণ করা।
উদাহরণ (Pandas):
import pandas as pd
# Missing data imputation with mean
df = pd.DataFrame({'age': [25, 30, None, 35, None]})
df['age'].fillna(df['age'].mean(), inplace=True)
১.২. Duplicate Data (ডুপ্লিকেট ডেটা)
ডেটা সেটে ডুপ্লিকেট সারি বা তথ্য থাকতে পারে, যা বিশ্লেষণের জন্য অসুবিধা সৃষ্টি করতে পারে। ডুপ্লিকেট ডেটা অপসারণের জন্য:
- Drop duplicates: ডুপ্লিকেট সারিগুলি বাদ দেওয়া।
উদাহরণ (Pandas):
df.drop_duplicates(inplace=True)
১.৩. Incorrect Data (ভুল ডেটা)
অনেক সময় ডেটাতে ভুল বা অস্বাভাবিক মান থাকতে পারে, যেমন ভুল টাইপের মান (e.g., স্ট্রিংয়ের মধ্যে সংখ্যা)। এই ভুল ডেটা সনাক্ত ও সংশোধন করতে হবে।
- Type Conversion: ডেটার টাইপ সঠিকভাবে কনভার্ট করা।
- Manual Checking: কিছু ভুল ডেটা ম্যানুয়ালি চেক করা এবং সংশোধন করা।
উদাহরণ (Pandas):
# Convert column data type
df['age'] = df['age'].astype(int)
২. Data Preprocessing (ডেটা প্রিপ্রসেসিং)
ডেটা প্রিপ্রসেসিং হল ডেটা সেটকে আরও কার্যকরী করার জন্য বিভিন্ন ধাপ বা পদ্ধতি ব্যবহার করার প্রক্রিয়া। এটি মডেল ট্রেনিংয়ের জন্য ডেটাকে প্রস্তুত করতে সাহায্য করে।
২.১. Normalization (নরমালাইজেশন)
ডেটার স্কেল সাধারণত বিভিন্ন হতে পারে। মেশিন লার্নিং মডেলগুলির সঠিক প্রশিক্ষণের জন্য ডেটার স্কেলকে একটি নির্দিষ্ট সীমায় নিয়ে আসা প্রয়োজন।
- Min-Max Scaling: সমস্ত মানকে 0 থেকে 1 এর মধ্যে স্কেল করা।
- Standardization (Z-Score Normalization): ডেটাকে গড় শূন্য এবং মান বিচ্যুতি এক হওয়া পর্যন্ত স্কেল করা।
উদাহরণ (Pandas):
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['age']] = scaler.fit_transform(df[['age']])
২.২. Categorical Data Encoding (ক্যাটেগরিকাল ডেটা এনকোডিং)
ডেটা সেটে অনেক সময় ক্যাটেগরিকাল ডেটা থাকে, যেমন 'Male' বা 'Female'। মেশিন লার্নিং মডেলগুলো এই ধরনের ডেটা সরাসরি গ্রহণ করতে পারে না, তাই এগুলিকে সংখ্যায় রূপান্তর করতে হবে।
- One-Hot Encoding: প্রতিটি ক্যাটেগরি জন্য একটি বাইনারি কলাম তৈরি করা।
- Label Encoding: ক্যাটেগরি ডেটাকে সংখ্যা দিয়ে পরিবর্তন করা।
উদাহরণ (Pandas):
# One-hot encoding
df = pd.get_dummies(df, columns=['gender'])
২.৩. Feature Engineering (ফিচার ইঞ্জিনিয়ারিং)
ফিচার ইঞ্জিনিয়ারিং হল নতুন ফিচার তৈরি করার প্রক্রিয়া, যা মডেলের জন্য আরও তথ্য প্রদান করতে পারে। উদাহরণস্বরূপ:
- নতুন ফিচার তৈরি করা (যেমন, বয়সের উপর ভিত্তি করে ক্যাটাগরি ফিচার তৈরি করা)।
- অপ্রয়োজনীয় বা কম গুরুত্বপূর্ণ ফিচারগুলি অপসারণ করা।
উদাহরণ (Pandas):
# New feature creation
df['age_group'] = df['age'].apply(lambda x: 'young' if x < 30 else 'old')
২.৪. Handling Outliers (আউটলাইয়ার মোকাবিলা)
আউটলাইয়ার হলো এমন ডেটা পয়েন্ট যা অন্যান্য ডেটার তুলনায় অনেক বেশি বা কম হতে পারে এবং এটি মডেলিংয়ে বিরক্তি সৃষ্টি করতে পারে। আউটলাইয়ার মোকাবেলার জন্য:
- Clipping: আউটলাইয়ার মান সীমিত করা।
- Removing Outliers: আউটলাইয়ার ডেটা মুছে ফেলা।
উদাহরণ (Pandas):
# Clipping values to a certain range
df['age'] = df['age'].clip(lower=18, upper=100)
২.৫. Data Splitting (ডেটা ভাগ করা)
মডেল প্রশিক্ষণের জন্য ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা গুরুত্বপূর্ণ। এটি মডেলের কার্যকারিতা যাচাই করতে সাহায্য করে।
- Train-Test Split: ডেটাকে প্রশিক্ষণ এবং টেস্ট সেটে ভাগ করা।
উদাহরণ (Scikit-learn):
from sklearn.model_selection import train_test_split
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
সারাংশ
Data Cleaning এবং Preprocessing হল ডেটা সায়েন্সের অত্যন্ত গুরুত্বপূর্ণ পদক্ষেপ যা ডেটার গুণগত মান উন্নত করতে এবং মডেলিংয়ের জন্য প্রস্তুত করতে সহায়ক। এটি মিসিং ডেটা, ডুপ্লিকেট ডেটা, ভুল ডেটা, ক্যাটেগরিকাল ডেটা, স্কেলিং, এবং আউটলাইয়ার সমস্যা সমাধান করে। এই পদক্ষেপগুলি সঠিকভাবে করলে মডেল প্রশিক্ষণ আরও কার্যকরী এবং সঠিক ফলাফল দেয়।
ডেটা সায়েন্স এবং মেশিন লার্নিং প্রজেক্টে Raw Data Cleaning এবং Preprocessing একটি অত্যন্ত গুরুত্বপূর্ণ ধাপ। কারণ, raw ডেটা সাধারণত অনেক অনিয়মিত, অসম্পূর্ণ এবং অনুচিত থাকতে পারে। এই ধাপের মাধ্যমে ডেটা বিশ্লেষণ বা মডেল তৈরির জন্য উপযুক্ত এবং ব্যবহারযোগ্য করা হয়।
এটি সাধারণত Data Cleaning এবং Data Preprocessing নামে পরিচিত দুটি প্রক্রিয়া দ্বারা সম্পন্ন হয়।
১. Raw Data Cleaning
Raw Data Cleaning হল এমন একটি প্রক্রিয়া যার মাধ্যমে ডেটা থেকে ভুল, অনুপস্থিত (missing), বা অপ্রয়োজনীয় তথ্য অপসারণ করা হয়। এটি ডেটার গুণগত মান নিশ্চিত করতে এবং মডেলিংয়ের জন্য একটি পরিষ্কার ডেটাসেট প্রস্তুত করতে সহায়ক।
সাধারণ Raw Data Cleaning পদক্ষেপ:
Missing Data (অনুপস্থিত ডেটা):
- অনুপস্থিত ডেটা ডেটাসেটে এক বা একাধিক মিসিং মান থাকতে পারে। এটি বিভিন্ন কারণে হতে পারে, যেমন ব্যবহারকারী তথ্য প্রদান করেনি বা ডেটা সংগ্রহের সময় সমস্যা হয়েছে।
- অনুপস্থিত ডেটা পরিচালনা করার পদ্ধতি:
- মিসিং ভ্যালু প্রতিস্থাপন: অনুপস্থিত মানকে গড়, মাধ্যমিক, সর্বাধিক পুনরাবৃত্তি, বা পূর্ববর্তী বা পরবর্তী মান দিয়ে প্রতিস্থাপন করা।
- ড্রপ করা: যদি অনুপস্থিত মান খুব বেশি থাকে, তবে ওই সারি বা কলামটি বাদ দেয়া যেতে পারে।
import pandas as pd df = pd.read_csv('data.csv') # অনুপস্থিত মান গড় দ্বারা পূর্ণ করুন df.fillna(df.mean(), inplace=True)Outliers (বহির্মুখী মান):
- Outliers হল ডেটার এমন মান যা মূল প্রবণতা বা প্যাটার্ন থেকে অনেকটাই পৃথক। এগুলি মডেলিংয়ে সমস্যা তৈরি করতে পারে।
- Outliers সনাক্ত এবং ম্যানেজ করা:
- Box plot ব্যবহার করে outliers চিহ্নিত করা এবং এগুলিকে বাদ দেয়া বা সংশোধন করা।
- Z-score বা IQR ব্যবহার করে outliers সনাক্ত করা।
import numpy as np from scipy import stats z_scores = np.abs(stats.zscore(df)) df = df[(z_scores < 3).all(axis=1)] # Z-score threshold 3 এর বেশি হলে বাদ দিনDuplicated Data (নকল ডেটা):
- কখনো কখনো ডেটাসেটে একই তথ্য একাধিকবার থাকতে পারে, যা মডেলিংয়ে বিভ্রান্তি সৃষ্টি করতে পারে।
- নকল ডেটা অপসারণ:
df = df.drop_duplicates() # নকল সারি বাদ দিনInconsistent Data (অসঙ্গত ডেটা):
- ডেটাতে inconsistency থাকতে পারে, যেমন নামের বানান ভিন্ন, তারিখের ফরম্যাটের তারতম্য ইত্যাদি।
- অসঙ্গত ডেটা মেরামত:
- String matching বা regular expressions ব্যবহার করে ডেটার মধ্যে অসঙ্গতি ঠিক করা।
df['column_name'] = df['column_name'].str.strip().str.lower() # স্ট্রিং ক্লিনিং
২. Data Preprocessing
Data Preprocessing হল ডেটাকে মডেলিংয়ের জন্য প্রস্তুত করার প্রক্রিয়া। এটি Raw Data Cleaning-এর পরবর্তী ধাপ, যেখানে ডেটাকে ডিপ লার্নিং বা মেশিন লার্নিং অ্যালগরিদমের জন্য মানানসই করে তোলা হয়।
সাধারণ Data Preprocessing পদক্ষেপ:
Feature Scaling (বৈশিষ্ট্য স্কেলিং):
- বিভিন্ন বৈশিষ্ট্য বা ফিচারের স্কেল ভিন্ন হতে পারে। বৈশিষ্ট্য স্কেলিং এমন একটি প্রক্রিয়া যার মাধ্যমে সমস্ত ফিচারের স্কেল সমান করা হয়, যাতে কোন একটি ফিচার মডেলকে প্রভাবিত না করে।
- Standardization (Z-score normalization) এবং Normalization (Min-Max scaling) সাধারণত ব্যবহৃত হয়।
from sklearn.preprocessing import StandardScaler, MinMaxScaler # Standardization scaler = StandardScaler() df_scaled = scaler.fit_transform(df) # Min-Max Scaling scaler = MinMaxScaler() df_scaled = scaler.fit_transform(df)Categorical Data Encoding (ক্যাটেগোরিক্যাল ডেটার এনকোডিং):
- ক্যাটেগোরিক্যাল ডেটা (যেমন লিঙ্গ, শহর, রঙ ইত্যাদি) মেশিন লার্নিং অ্যালগরিদমের জন্য প্রস্তুত করতে নম্বরে রূপান্তর করতে হয়।
- One-Hot Encoding এবং Label Encoding সাধারণত ব্যবহৃত পদ্ধতি।
from sklearn.preprocessing import OneHotEncoder, LabelEncoder # One-Hot Encoding encoder = OneHotEncoder(sparse=False) encoded_df = encoder.fit_transform(df[['column_name']]) # Label Encoding label_encoder = LabelEncoder() df['encoded_column'] = label_encoder.fit_transform(df['column_name'])Handling Imbalanced Data (অসমান ভারসাম্যপূর্ণ ডেটা):
- কখনো কখনো একটি ক্লাসের ডেটা অন্য ক্লাসের চেয়ে অনেক বেশি থাকতে পারে (যেমন, Class Imbalance)।
- Resampling techniques: Over-sampling (SMOTE), under-sampling ইত্যাদি ব্যবহার করা যেতে পারে।
from imblearn.over_sampling import SMOTE smote = SMOTE() X_resampled, y_resampled = smote.fit_resample(X, y)Feature Selection (বৈশিষ্ট্য নির্বাচন):
- কিছু ফিচার মডেলিংয়ের জন্য গুরুত্বপূর্ণ হতে পারে, এবং কিছু ফিচার অপ্রয়োজনীয় হতে পারে। Feature selection-এর মাধ্যমে শুধু গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি নির্বাচন করা হয়।
- Recursive Feature Elimination (RFE) এবং Principal Component Analysis (PCA) সাধারণ পদ্ধতি।
from sklearn.decomposition import PCA pca = PCA(n_components=2) # কম্পোনেন্ট সংখ্যা সেট করুন df_reduced = pca.fit_transform(df)Data Transformation (ডেটা রূপান্তর):
- কখনো কখনো ডেটা রূপান্তর করা প্রয়োজন, যেমন Log Transformation, Box-Cox Transformation বা Square Root Transformation, বিশেষত যখন ডেটা খুব বেশি স্কেল বা বিশাল পরিবর্তনশীলতা থাকে।
df['column_name'] = df['column_name'].apply(np.log) # লোগারিদমিক রূপান্তর
৩. Data Splitting (ডেটা বিভাজন)
ডেটা প্রিপ্রসেসিংয়ের পর, ডেটাকে Training এবং Testing সেটে ভাগ করতে হয়। সাধারণত, 70%-80% ডেটা প্রশিক্ষণের জন্য এবং 20%-30% ডেটা পরীক্ষণের জন্য ব্যবহার করা হয়।
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
সারাংশ
Raw Data Cleaning এবং Preprocessing হল ডেটাকে মডেলিংয়ের জন্য উপযুক্ত ও বিশ্লেষণযোগ্য করার জন্য অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া। ডেটা ক্লিনিং-এর মাধ্যমে ভুল, অনুপস্থিত বা অপ্রয়োজনীয় ডেটা অপসারণ করা হয় এবং প্রিপ্রসেসিংয়ের মাধ্যমে ডেটাকে মডেলিংয়ের জন্য প্রস্তুত করা হয়। এই প্রক্রিয়াগুলি সঠিকভাবে না করলে মডেল যথাযথভাবে প্রশিক্ষিত হতে পারে না এবং ফলস্বরূপ ভুল পূর্বাভাস দেয়।
Missing values (অন্তর্নিহিত মান) এবং duplicates (অনুলিপি) ডেটা বিশ্লেষণের একটি সাধারণ সমস্যা, যা ডেটা প্রক্রিয়াকরণের সময় মোকাবিলা করতে হয়। Python-এর Pandas লাইব্রেরি ব্যবহার করে এই সমস্যা সমাধান করা সহজ। এখানে, আমরা আলোচনা করবো কীভাবে Pandas ব্যবহার করে Missing Values এবং Duplicates handle করা যায়।
১. Missing Values (অন্তর্নিহিত মান) Handle করা
ডেটাসেটে মিসিং মান বা NaN (Not a Number) মান হতে পারে, যা অনেক কারণে ঘটে যেমন ডেটা সংগ্রহের সময় কিছু মান অনুপস্থিত ছিল। Pandas এ Missing Values handle করার কিছু জনপ্রিয় পদ্ধতি হল:
১.১ Missing Values চেক করা
ডেটাসেটে কতগুলো মিসিং মান আছে তা চেক করতে Pandas এর isnull() বা isna() ফাংশন ব্যবহার করা হয়।
উদাহরণ:
import pandas as pd
# ডেটাসেট তৈরি
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, None, 22, 23],
'City': ['New York', None, 'Los Angeles', 'Chicago']}
df = pd.DataFrame(data)
# মিসিং ভ্যালু চেক
print(df.isnull()) # True মানে মিসিং
১.২ Missing Values এর সংখ্যা দেখতে
মিসিং মানের সংখ্যা দেখতে sum() ফাংশন ব্যবহার করা হয়।
উদাহরণ:
print(df.isnull().sum()) # প্রতিটি কলামে মিসিং ভ্যালুর সংখ্যা
১.৩ Missing Values পূর্ণ করা (Fill Missing Values)
মিসিং মান পূর্ণ করার জন্য বিভিন্ন পদ্ধতি আছে:
- সাধারণ মান দ্বারা পূর্ণ করা: আপনি একটি নির্দিষ্ট মান দিয়ে মিসিং ভ্যালু পূর্ণ করতে পারেন, যেমন
0,mean,medianইত্যাদি। - ফরওয়ার্ড বা ব্যাকওয়ার্ড পূর্ণ করা: পূর্ববর্তী বা পরবর্তী মান দিয়ে পূর্ণ করা।
উদাহরণ:
# mean দিয়ে মিসিং মান পূর্ণ করা
df['Age'] = df['Age'].fillna(df['Age'].mean())
print(df)
# পূর্ববর্তী মান দিয়ে পূর্ণ করা
df['City'] = df['City'].fillna(method='ffill')
print(df)
১.৪ Missing Values অপসারণ (Drop Missing Values)
কখনো কখনো আপনি মিসিং ভ্যালু সহ সারি বা কলাম বাদ দিতে পারেন। এটি করতে dropna() ফাংশন ব্যবহার হয়।
উদাহরণ:
# মিসিং ভ্যালু সহ সারি বাদ দেওয়া
df_dropped = df.dropna()
print(df_dropped)
১.৫ কাস্টম পূর্ণকরণ
আপনি কাস্টম ফাংশন ব্যবহার করে মিসিং ভ্যালু পূর্ণ করতে পারেন।
উদাহরণ:
# "Age" কলামে মিসিং ভ্যালু গুলি 'Unknown' দ্বারা পূর্ণ করা
df['City'] = df['City'].fillna('Unknown')
print(df)
২. Duplicates Handle করা
ডেটাসেটে অনুলিপি (duplicates) থাকতে পারে, যা প্রক্রিয়াকরণের সময় পরিহার করতে হয়। Pandas-এ duplicates সনাক্ত এবং অপসারণ করা সহজ।
২.১ Duplicates চেক করা
ডেটাসেটে অনুলিপি সনাক্ত করতে duplicated() ফাংশন ব্যবহার করা হয়। এটি True বা False রিটার্ন করবে, যেখানে True মানে একটি অনুলিপি সারি।
উদাহরণ:
# ডেটাসেটে অনুলিপি সারি চেক করা
print(df.duplicated())
২.২ Duplicates অপসারণ করা
অনুলিপি অপসারণের জন্য drop_duplicates() ফাংশন ব্যবহার করা হয়। এটি ডেটাসেটের সব অনুলিপি সারি মুছে ফেলবে।
উদাহরণ:
# অনুলিপি অপসারণ
df_no_duplicates = df.drop_duplicates()
print(df_no_duplicates)
২.৩ নির্দিষ্ট কলামের ভিত্তিতে Duplicates অপসারণ
আপনি নির্দিষ্ট একটি কলামের ভিত্তিতে অনুলিপি অপসারণ করতে পারেন।
উদাহরণ:
# নির্দিষ্ট কলামের ভিত্তিতে অনুলিপি অপসারণ
df_no_duplicates = df.drop_duplicates(subset=['Name'])
print(df_no_duplicates)
২.৪ Duplicates রাখার সময় প্রথম বা শেষটি রাখুন
আপনি যখন ডুপ্লিকেট অপসারণ করবেন, তখন প্রথম বা শেষ সারিটি রাখতে পারেন। এর জন্য keep প্যারামিটার ব্যবহার করতে হয়।
keep='first': প্রথম সারিটি রাখবে, বাকি গুলো মুছে ফেলবে।keep='last': শেষ সারিটি রাখবে, বাকি গুলো মুছে ফেলবে।keep=False: সব অনুলিপি মুছে ফেলবে।
উদাহরণ:
# প্রথম সারিটি রাখুন
df_no_duplicates = df.drop_duplicates(keep='first')
print(df_no_duplicates)
# সব অনুলিপি মুছে ফেলুন
df_no_duplicates = df.drop_duplicates(keep=False)
print(df_no_duplicates)
সারাংশ
- Missing Values বা অনুপস্থিত মান ডেটা বিশ্লেষণ প্রক্রিয়ায় একটি সাধারণ সমস্যা। এটি
fillna()বাdropna()এর মাধ্যমে পূর্ণ বা অপসারণ করা যেতে পারে। - Duplicates বা অনুলিপি ডেটাসেটে থাকা তথ্যগুলিকে চিহ্নিত এবং অপসারণ করার জন্য
duplicated()এবংdrop_duplicates()ফাংশন ব্যবহৃত হয়। - Python এর Pandas লাইব্রেরি ডেটা প্রক্রিয়াকরণ, বিশ্লেষণ এবং পরিষ্কার করার জন্য অত্যন্ত শক্তিশালী সরঞ্জাম সরবরাহ করে।
এভাবে, আপনি Missing Values এবং Duplicates সমস্যা খুব সহজেই Python দিয়ে সমাধান করতে পারবেন।
ডেটা ট্রান্সফর্মেশন টেকনিক, যেমন Normalization এবং Standardization, মেশিন লার্নিং মডেল এবং স্ট্যাটিস্টিক্যাল বিশ্লেষণের জন্য ডেটা প্রস্তুত করার ক্ষেত্রে গুরুত্বপূর্ণ। এই দুইটি পদ্ধতি ডেটাকে স্কেল করে সমান আকারে আনার জন্য ব্যবহৃত হয়, তবে এদের পদ্ধতি এবং ফলাফল আলাদা।
১. Normalization (Min-Max Scaling)
Normalization, যা Min-Max scaling নামেও পরিচিত, ডেটাকে একটি নির্দিষ্ট সীমায়, সাধারণত [0, 1] অথবা [-1, 1] রেঞ্জে স্কেল করার প্রক্রিয়া। এটি তখন ব্যবহৃত হয় যখন ডেটার বণ্টন গাউসিয়ান (normal distribution) নয় বা যখন মডেলটি ডেটার পরিমাণের প্রতি সংবেদনশীল (যেমন k-nearest neighbors, neural networks ইত্যাদি)।
Normalization এর সূত্র:
Min-Max স্কেলিংয়ের সূত্র হল:
এখানে:
- হল মূল ডেটা পয়েন্ট।
- এবং হল ফিচারের ন্যূনতম এবং সর্বাধিক মান।
উদাহরণ:
ধরা যাক ডেটা:
- ন্যূনতম মান
- সর্বাধিক মান
যদি কে নরমালাইজ করতে হয়:
কবে Normalization ব্যবহার করবেন:
- যখন ফিচারের ইউনিটগুলি আলাদা থাকে (যেমন, বছর হিসেবে বয়স, ডলারে বেতন ইত্যাদি)।
- যখন ডেটাকে একটি নির্দিষ্ট সীমায় [0, 1] রাখতে চান।
- যখন এমন অ্যালগরিদম ব্যবহার করছেন যা ডেটার পরিমাণের প্রতি সংবেদনশীল, যেমন নিউরাল নেটওয়ার্ক, k-NN ইত্যাদি।
২. Standardization (Z-Score Normalization)
Standardization, যা Z-score normalization নামেও পরিচিত, ডেটাকে এমনভাবে স্কেল করে যাতে এর গড় মান 0 এবং স্ট্যান্ডার্ড ডিভিয়েশন 1 হয়। Standardization কোনও নির্দিষ্ট সীমায় ডেটা বাউন্ড না করলেও এটি ডেটাকে কেন্দ্রিত করে এবং স্কেল করে দেয়। এটি মূলত তখন ব্যবহৃত হয় যখন ডেটা গাউসিয়ান (normal) বণ্টন অনুসরণ করে অথবা যখন অ্যালগরিদমে বৈশিষ্ট্যের বৈচিত্র্য গুরুত্বপূর্ণ।
Standardization এর সূত্র:
Standardization এর সূত্র হল:
এখানে:
- হল মূল ডেটা পয়েন্ট।
- হল ফিচারের গড় মান।
- হল ফিচারের স্ট্যান্ডার্ড ডিভিয়েশন।
উদাহরণ:
ধরা যাক ডেটা:
- গড় মান
- স্ট্যান্ডার্ড ডিভিয়েশন
যদি কে স্ট্যান্ডারাইজ করতে হয়:
কবে Standardization ব্যবহার করবেন:
- যখন ডেটা গাউসিয়ান (normal) বণ্টন অনুসরণ করে অথবা যদি ডেটার গড় এবং স্ট্যান্ডার্ড ডিভিয়েশন গুরুত্বপূর্ণ হয়।
- যখন ডেটাকে গড় 0 এবং স্ট্যান্ডার্ড ডিভিয়েশন 1 এর সাথে স্কেল করতে চান।
- এমন অ্যালগরিদমে ব্যবহার করুন যা বৈশিষ্ট্যের বৈচিত্র্য বা গড়কে গুরুত্ব দেয়, যেমন লিনিয়ার রিগ্রেশন, লজিস্টিক রিগ্রেশন, SVM ইত্যাদি।
Normalization এবং Standardization এর মধ্যে পার্থক্য
| দিক | Normalization (Min-Max Scaling) | Standardization (Z-Score Normalization) |
|---|---|---|
| সূত্র | ||
| রেঞ্জ | নির্দিষ্ট রেঞ্জে স্কেল (সাধারণত [0, 1] অথবা [-1, 1]) | ডেটার গড় 0 এবং স্ট্যান্ডার্ড ডিভিয়েশন 1 হয়, তবে রেঞ্জ সীমাবদ্ধ নয় |
| প্রভাব | আউটলাইয়ারদের ওপর সংবেদনশীল (কারণ মিন এবং ম্যাক্সে প্রভাবিত হতে পারে) | আউটলাইয়ারদের ওপর কম প্রভাবিত, তবে কিছুটা প্রভাব থাকে |
| ব্যবহার | যখন জানি যে ডেটার একটি নির্দিষ্ট সীমা আছে অথবা ডেটা গাউসিয়ান নয় | যখন ডেটা গাউসিয়ান (normal) বণ্টন অনুসরণ করে বা গড় ও স্ট্যান্ডার্ড ডিভিয়েশন গুরুত্বপূর্ণ |
| অ্যালগরিদম | k-NN, নিউরাল নেটওয়ার্ক, ডিপ লার্নিং | লিনিয়ার রিগ্রেশন, লজিস্টিক রিগ্রেশন, PCA, SVM |
Practical Considerations
- Normalization সাধারণত তখন ব্যবহার করা হয় যখন ডেটার ইউনিট বা স্কেল আলাদা থাকে, যেমন বয়স এবং বেতন বিভিন্ন ইউনিটে থাকে। এটি তখন ব্যবহৃত হয় যখন এমন অ্যালগরিদম ব্যবহার করতে হয় যা ডেটার পরিমাণের প্রতি সংবেদনশীল (যেমন k-NN, নিউরাল নেটওয়ার্ক)।
- Standardization তখন ব্যবহৃত হয় যখন ডেটা গাউসিয়ান (normal) বণ্টন অনুসরণ করে অথবা যখন অ্যালগরিদম ডেটার বৈচিত্র্য (variance) বা গড় (mean) গুরুত্ব দেয়।
Python Implementation
Normalization (Min-Max Scaling):
from sklearn.preprocessing import MinMaxScaler
# Sample data
data = [[2], [4], [6], [8], [10]]
# Create a MinMaxScaler object
scaler = MinMaxScaler()
# Fit and transform the data
normalized_data = scaler.fit_transform(data)
print(normalized_data)
Standardization (Z-Score Normalization):
from sklearn.preprocessing import StandardScaler
# Sample data
data = [[2], [4], [6], [8], [10]]
# Create a StandardScaler object
scaler = StandardScaler()
# Fit and transform the data
standardized_data = scaler.fit_transform(data)
print(standardized_data)
সারাংশ
Normalization এবং Standardization হল গুরুত্বপূর্ণ ডেটা ট্রান্সফর্মেশন টেকনিক, যা ডেটাকে স্কেল করার জন্য ব্যবহৃত হয়। Normalization ব্যবহার করা হয় যখন ডেটার স্কেল আলাদা থাকে এবং আপনি একে নির্দিষ্ট সীমায় (যেমন [0, 1]) আনার জন্য চান। Standardization ব্যবহৃত হয় যখন ডেটা গাউসিয়ান (normal) বণ্টন অনুসরণ করে এবং আপনি ডেটাকে গড় 0 এবং স্ট্যান্ডার্ড ডিভিয়েশন 1 এ আনতে চান। কোন পদ্ধতি ব্যবহার করবেন তা নির্ভর করে আপনার ডেটার প্রকৃতি এবং ব্যবহৃত অ্যালগরিদমের উপর।
Data Encoding হল একটি প্রক্রিয়া যার মাধ্যমে ক্যাটেগোরিক্যাল (categorical) ডেটাকে মেশিন লার্নিং মডেল দ্বারা বোধগম্য করার জন্য সংখ্যায় রূপান্তর করা হয়। ক্যাটেগোরিক্যাল ডেটা সাধারণত টেক্সট বা শ্রেণীর মতো হয়, কিন্তু মেশিন লার্নিং অ্যালগরিদমগুলি সাধারণত সংখ্যাসূচক ডেটার সাথে কাজ করতে সক্ষম। তাই, ক্যাটেগোরিক্যাল ডেটার জন্য Label Encoding এবং One-Hot Encoding অন্যতম জনপ্রিয় পদ্ধতি।
১. Label Encoding
Label Encoding হল একটি পদ্ধতি যেখানে ক্যাটেগোরিক্যাল ফিচারগুলির প্রতিটি শ্রেণীকে একটি ইউনিক নম্বরে রূপান্তর করা হয়। উদাহরণস্বরূপ, যদি একটি ক্যাটেগোরিক্যাল ফিচার যেমন "Color" এর মধ্যে "Red", "Green", এবং "Blue" থাকলে, এই ফিচারের প্রতিটি ক্যাটেগোরিক্যাল ভ্যালুকে ০, ১, ২ (অথবা কোন সংখ্যাত্মক মান) দিয়ে রিপ্লেস করা হবে।
উদাহরণ:
ধরা যাক, একটি "Color" কলামে নিম্নলিখিত মানগুলি রয়েছে:
- Red
- Green
- Blue
এখন, Label Encoding প্রক্রিয়া ব্যবহার করলে:
- Red → 0
- Green → 1
- Blue → 2
এটি Ordinal Data (অর্থাৎ, যেখানে শ্রেণীভেদ একটি নির্দিষ্ট ক্রম অনুসরণ করে) এর জন্য কার্যকরী। তবে, যদি শ্রেণীগুলির মধ্যে কোন নির্দিষ্ট ক্রম না থাকে (যেমন, "Red", "Green", "Blue"), তবে Label Encoding যথাযথ হবে না, কারণ এটি মডেলকে এমন ভাবতে বাধ্য করবে যে, এই শ্রেণীগুলির মধ্যে কোনো নির্দিষ্ট ক্রম আছে, যা বাস্তবতার সাথে সঙ্গতিপূর্ণ নয়।
স্কিকিট-লার্নের মাধ্যমে Label Encoding:
from sklearn.preprocessing import LabelEncoder
# ডেটা
colors = ['Red', 'Green', 'Blue', 'Green', 'Red']
# LabelEncoder অবজেক্ট তৈরি
le = LabelEncoder()
# ফিচার এনকোড করা
encoded_colors = le.fit_transform(colors)
print(encoded_colors) # আউটপুট: [2 1 0 1 2]
২. One-Hot Encoding
One-Hot Encoding হল একটি পদ্ধতি যেখানে ক্যাটেগোরিক্যাল ফিচারগুলির প্রতিটি শ্রেণীকে একটি আলাদা বাইনারি ভেক্টর (0 বা 1) হিসাবে রূপান্তর করা হয়। এখানে, প্রতিটি শ্রেণীর জন্য একটি নতুন কলাম তৈরি হয় এবং সেই কলামে সেই শ্রেণীটির উপস্থিতি বা অনুপস্থিতি ১ বা ০ দ্বারা চিহ্নিত হয়।
উদাহরণ:
ধরা যাক, একটি "Color" কলামে নিম্নলিখিত মানগুলি রয়েছে:
- Red
- Green
- Blue
এখন, One-Hot Encoding ব্যবহার করলে:
| Color | Red | Green | Blue |
|---|---|---|---|
| Red | 1 | 0 | 0 |
| Green | 0 | 1 | 0 |
| Blue | 0 | 0 | 1 |
| Green | 0 | 1 | 0 |
| Red | 1 | 0 | 0 |
এখানে, প্রতি শ্রেণীর জন্য একটি নতুন বাইনারি কলাম তৈরি হয়েছে, যেখানে ১ বা ০ দিয়ে প্রতিটি শ্রেণীর উপস্থিতি নির্ধারণ করা হয়েছে।
Pandas DataFrame-এর মাধ্যমে One-Hot Encoding:
import pandas as pd
# ডেটা
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red']}
# DataFrame তৈরি
df = pd.DataFrame(data)
# One-Hot Encoding করা
df_encoded = pd.get_dummies(df, columns=['Color'])
print(df_encoded)
আউটপুট:
Color_Blue Color_Green Color_Red
0 0 0 1
1 0 1 0
2 1 0 0
3 0 1 0
4 0 0 1
Label Encoding vs One-Hot Encoding
| বৈশিষ্ট্য | Label Encoding | One-Hot Encoding |
|---|---|---|
| প্রক্রিয়া | ক্যাটেগোরিক্যাল ভ্যালুগুলিকে একটি সংখ্যা দিয়ে এনকোড করা হয় | প্রতিটি ক্যাটেগোরিক্যাল ভ্যালুর জন্য একটি বাইনারি কলাম তৈরি করা হয় |
| প্রয়োগ | যখন ক্যাটেগোরিক্যাল ডেটা ইন্টারঅর্ডিনাল (Order) হয় | যখন ক্যাটেগোরিক্যাল ডেটা নন-অর্ডিনাল (No Order) হয় |
| ফিচার সংখ্যা | ফিচারের সংখ্যা সংখ্যা সমান হয় | প্রতিটি ক্যাটেগোরিক্যাল ভ্যালুর জন্য নতুন কলাম তৈরি হয় |
| মেমরি ব্যবহার | কম মেমরি ব্যবহার | বেশি মেমরি ব্যবহার, কারণ অনেক কলাম তৈরি হয় |
| মডেল প্রভাব | মডেল শ্রেণীসমূহের মধ্যে ক্রম ধারা বুঝে কাজ করতে পারে | মডেল কোনো ক্রমের ধারণা ছাড়াই শ্রেণীসমূহকে আলাদা ভাবে ব্যবহার করে |
সারাংশ
- Label Encoding ক্যাটেগোরিক্যাল ডেটার শ্রেণীসমূহকে সংখ্যায় রূপান্তর করে এবং এটি সাধারণত Ordinal ডেটার জন্য উপযুক্ত।
- One-Hot Encoding ক্যাটেগোরিক্যাল ডেটাকে বাইনারি কলামে রূপান্তর করে, এটি Nominal ডেটার জন্য ব্যবহার করা উচিত যেখানে শ্রেণীগুলির মধ্যে কোন নির্দিষ্ট ক্রম নেই।
এই দুটি পদ্ধতি ডেটা প্রিপ্রসেসিংয়ের গুরুত্বপূর্ণ অংশ, এবং এগুলির সঠিক ব্যবহার মডেলের দক্ষতা এবং পারফরম্যান্স উন্নত করতে সহায়ক।
Outliers হল ডেটা সেটের এমন তথ্য, যা মূল ডেটার থেকে ব্যাপকভাবে আলাদা বা ভিন্ন থাকে। এই অস্বাভাবিক ডেটা পয়েন্টগুলি ডেটার মধ্যে অস্বাভাবিকতা বা ভিন্নতা নির্দেশ করে এবং কখনও কখনও এটি ভুল বা অপ্রয়োজনীয় হতে পারে। ডেটা সায়েন্স, মেশিন লার্নিং এবং পরিসংখ্যান বিশ্লেষণে এই আউটলায়ারগুলির সঠিক সনাক্তকরণ এবং অপসারণ গুরুত্বপূর্ণ হতে পারে, কারণ তারা মডেলিং বা ডেটা বিশ্লেষণের ফলাফলে প্রভাব ফেলতে পারে।
Outliers সনাক্ত এবং অপসারণের জন্য বিভিন্ন পদ্ধতি রয়েছে। নিচে কিছু সাধারণ Outliers Detection এবং Removal Techniques নিয়ে আলোচনা করা হলো।
১. Statistical Methods
১.১. Z-Score (Standard Score)
Z-score একটি পরিমাপ যা ডেটা পয়েন্টের গড় থেকে কত স্ট্যান্ডার্ড ডিভিয়েশন দূরে রয়েছে তা নির্ধারণ করে। যদি Z-score একটি ডেটা পয়েন্টের জন্য বেশি বা কম থাকে, তবে সেই পয়েন্টটি আউটলায়ার হতে পারে।
- Formula: যেখানে:
- = ডেটা পয়েন্ট
- = গড় (mean)
- = স্ট্যান্ডার্ড ডিভিয়েশন
Outlier Detection:
- Z-score সাধারণত হলে সেই পয়েন্টটিকে আউটলায়ার হিসেবে চিহ্নিত করা হয়।
Example:
import numpy as np
from scipy import stats
data = [10, 12, 10, 11, 100, 13, 12, 11]
z_scores = np.abs(stats.zscore(data))
outliers = np.where(z_scores > 2)
print("Outliers at index:", outliers)
১.২. IQR (Interquartile Range)
IQR হলো 75th percentile (Q3) এবং 25th percentile (Q1) এর মধ্যে পার্থক্য। সাধারণত, ডেটা পয়েন্ট যদি Q1 - 1.5IQR এর নিচে অথবা Q3 + 1.5IQR এর উপরে থাকে, তাহলে তা আউটলায়ার হিসেবে গণ্য করা হয়।
- Formula:
Outlier Detection:
- যদি কোনো পয়েন্ট এই রেঞ্জের বাইরে থাকে, তবে সেটি আউটলায়ার হিসেবে চিহ্নিত হয়।
Example:
import numpy as np
data = [10, 12, 10, 11, 100, 13, 12, 11]
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = [x for x in data if x < lower_bound or x > upper_bound]
print("Outliers:", outliers)
২. Visualization Methods
২.১. Box Plot
Box plot (যা box-and-whisker plot নামেও পরিচিত) ব্যবহার করে আউটলায়ার সনাক্ত করা খুবই সহজ। এটি ডেটার মিন, কুইন্টারাইল, এবং আউটলায়ারের সীমা প্রদর্শন করে।
- Box Plot-এ Q1 এবং Q3 এর মধ্যে 50% ডেটা থাকে, এবং এর বাইরে থাকা পয়েন্টগুলি আউটলায়ার হিসেবে গণ্য হয়।
- উপরের এবং নিচের উষ্ণতা (whiskers) থেকে বেরিয়ে আসা পয়েন্টগুলি আউটলায়ার হতে পারে।
Example:
import matplotlib.pyplot as plt
data = [10, 12, 10, 11, 100, 13, 12, 11]
plt.boxplot(data)
plt.title("Boxplot for Outlier Detection")
plt.show()
২.২. Scatter Plot
Scatter plot (বিবরণী গ্রাফ) আউটলায়ার সনাক্ত করতে একটি কার্যকরী পদ্ধতি। এতে ডেটা পয়েন্টগুলি প্রদর্শিত হয় এবং কোনও ডেটা পয়েন্ট যে ক্ষেত্র থেকে অনেক দূরে আছে তা সোজাসুজি দেখা যায়।
Example:
import matplotlib.pyplot as plt
data = [10, 12, 10, 11, 100, 13, 12, 11]
plt.scatter(range(len(data)), data)
plt.title("Scatter Plot for Outlier Detection")
plt.show()
৩. Machine Learning Methods
৩.১. Isolation Forest
Isolation Forest একটি মেশিন লার্নিং অ্যালগরিদম যা আউটলায়ার সনাক্ত করতে ব্যবহৃত হয়। এটি অন্যান্য পয়েন্টের থেকে আলাদা বা বিচ্ছিন্ন পয়েন্ট সনাক্ত করার জন্য বায়াসড অ্যালগরিদম।
- Isolation Forest-এ আউটলায়ারগুলি দ্রুত আইসোলেট করা হয় এবং এটি ব্যাকগ্রাউন্ড ডেটা থেকে বিচ্ছিন্ন থাকে।
Example:
from sklearn.ensemble import IsolationForest
data = [[10], [12], [10], [11], [100], [13], [12], [11]]
model = IsolationForest(contamination=0.25)
model.fit(data)
outliers = model.predict(data)
print("Outliers detected:", outliers)
৩.২. Local Outlier Factor (LOF)
LOF অ্যালগরিদম ব্যবহার করে ডেটা পয়েন্টের সান্নিধ্য মূল্যায়ন করা হয়। একটি পয়েন্ট যদি এর নিকটবর্তী প্রতিবেশীদের তুলনায় খুব ভিন্ন হয়, তবে এটি আউটলায়ার হিসেবে চিহ্নিত হয়।
Example:
from sklearn.neighbors import LocalOutlierFactor
data = [[10], [12], [10], [11], [100], [13], [12], [11]]
model = LocalOutlierFactor(n_neighbors=2)
outliers = model.fit_predict(data)
print("Outliers detected:", outliers)
৪. Outliers Removal Techniques
৪.১. Remove Outliers Based on Z-Score
যদি Z-score একটি ডেটা পয়েন্টের জন্য 3 এর বেশি (বা কম) হয়, তাহলে সেই পয়েন্টটি অপসারণ করা যেতে পারে।
Example:
import numpy as np
from scipy import stats
data = [10, 12, 10, 11, 100, 13, 12, 11]
z_scores = np.abs(stats.zscore(data))
# Remove outliers
clean_data = [data[i] for i in range(len(data)) if z_scores[i] < 3]
print("Clean data:", clean_data)
৪.২. Remove Outliers Based on IQR
IQR ব্যবহার করে সনাক্ত করা আউটলায়ারগুলি সরিয়ে ফেলা যায়। যদি ডেটা একটি নির্দিষ্ট রেঞ্জের মধ্যে না থাকে, তবে এটি সরিয়ে নেওয়া উচিত।
Example:
import numpy as np
data = [10, 12, 10, 11, 100, 13, 12, 11]
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# Remove outliers
clean_data = [x for x in data if x >= lower_bound and x <= upper_bound]
print("Clean data:", clean_data)
সারাংশ
Outliers Detection এবং Removal প্রক্রিয়া ডেটার সঠিক বিশ্লেষণের জন্য গুরুত্বপূর্ণ। বিভিন্ন পদ্ধতি যেমন Z-Score, IQR, Boxplot, Scatterplot, এবং Machine Learning Methods (Isolation Forest, LOF) আউটলায়ার সনাক্তকরণে ব্যবহৃত হয়। Outliers Removal করার সময়, এটি নিশ্চিত করা উচিত যে আউটলায়ারগুলি সঠিকভাবে চিহ্নিত এবং অপসারণ করা হয়েছে যাতে মডেল বা বিশ্লেষণ কার্যকর ও নির্ভুল হয়।
Read more