Hook — কাঁচা সবজি বনাম রান্না করা খাবার
বাজার থেকে আনা কাঁচা সবজি সরাসরি খাওয়া যায় না — ধুতে হয়, কাটতে হয়, রান্না করতে হয়। Raw data ও তাই — সরাসরি model এ দিলে কিছুই শিখবে না। আগে clean, transform, scale করতে হয়।
ML project এর ৭০–৮০% সময় যায় data handling এ। Algorithm শুধু ২০%।
Concept — Data এর জীবন চক্র
- Collection — CSV, JSON, API, database।
- Exploration — কত row, কত column, কী type।
- Cleaning — missing value, duplicate, outlier।
- Transformation — encoding, scaling, feature creation।
- Splitting — train, validation, test।
Math — Scaling এর গণিত
Min-Max Scaling (0 থেকে 1)
Standardization (Z-score)
Distance-based algorithm (KNN, K-Means) এ scaling খুব জরুরি — না হলে বড় scale এর feature ছোট scale এর feature কে চাপা দেয়।
Real-world Example
একটি house price dataset এ — area (500–5000 sqft), bedrooms (1–5), age (1–50)। Area এর scale অনেক বড়, তাই scaling না করলে model মনে করবে area-ই সব। Standardization এর পর সব feature এক স্তরে চলে আসে।
Code — Pandas + Scikit-learn দিয়ে full pipeline
১. Data load ও explore
import pandas as pd
df = pd.read_csv("housing.csv")
print(df.shape) # (rows, cols)
print(df.head())
print(df.info())
print(df.describe())
print(df.isnull().sum()) # missing per column২. Missing value handle
# Numerical column — fill with median
df["area"] = df["area"].fillna(df["area"].median())
# Categorical column — fill with mode
df["city"] = df["city"].fillna(df["city"].mode()[0])
# Drop rows where target is missing
df = df.dropna(subset=["price"])৩. Encoding categorical features
# One-hot encoding
df = pd.get_dummies(df, columns=["city"], drop_first=True)
# Label encoding (for ordinal: low < mid < high)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df["quality"] = le.fit_transform(df["quality"])৪. Scaling
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
df[["area", "age"]] = scaler.fit_transform(df[["area", "age"]])
# Or MinMax (0 to 1)
mm = MinMaxScaler()
df[["bedrooms"]] = mm.fit_transform(df[["bedrooms"]])৫. Train/Test split
from sklearn.model_selection import train_test_split
X = df.drop("price", axis=1)
y = df["price"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
print(X_train.shape, X_test.shape)Common Mistakes — Data Leakage
Train/Test split এর আগে scaling করা = data leakage। Test এর information train এ ঢুকে যায়।
- ভুল order: scale → split ❌
- সঠিক order: split → scaler.fit(X_train) → transform train ও test ✅
- Missing value কে শুধু 0 দিয়ে fill করা — distribution নষ্ট হয়।
- Outlier কে চোখ বন্ধ করে delete করা।
- Categorical কে সরাসরি number ধরে নেওয়া (city = 1, 2, 3 এর মানে নেই)।
Practice Tasks
- Task 1: Titanic dataset load করে কোন column এ কত % missing দেখো।
- Task 2: Age column এর missing value median দিয়ে, Cabin কে drop করে handle করো।
- Task 3: Sex ও Embarked কে one-hot encode করো।
Mini Project — Titanic Data Cleaning Pipeline
Kaggle Titanic dataset নাও। নিচের কাজগুলো এক script এ করো: (১) load, (২) missing value handle, (৩) categorical encoding, (৪) numerical feature scale, (৫) train/test split 80/20। শেষে X_train, X_test এর shape print করো।
Sklearn এর `Pipeline` ও `ColumnTransformer` ব্যবহার করো — production-grade কোড হবে।
Summary
Garbage in → Garbage out. ভালো data handling ছাড়া ভালো model হয় না।
- Data lifecycle: collect → explore → clean → transform → split।
- Missing value: median/mode/drop।
- Categorical: one-hot বা label encoding।
- Numerical: StandardScaler বা MinMaxScaler।
- Split আগে, scale পরে — leakage এড়াও।