Practical MLপড়তে ৭ মিনিট লাগবে

ফিচার ইঞ্জিনিয়ারিং (Feature Engineering)

কাঁচা বা র (raw) ডেটাকে পরিবর্তন করে এমন ইনপুটে পরিণত করা যা কোনো মডেল আসলেই ব্যবহার করতে পারে
raw data:অগোছালো বা মেসড আপ (Messy) · মিসিং ভ্যালু (missing values) · মিশ্রিত ফরম্যাট (mixed formats)engineered features:পরিষ্কার বা ক্লিন (Clean) · নিউমেরিক্যাল বা সংখ্যাভিত্তিক (numerical) · মডেলের উপযোগী (model-ready)impact:অনেক সময় এটি কোন অ্যালগরিদম বেছে নেবেন তার চেয়েও বেশি গুরুত্বপূর্ণ ভূমিকা পালন করে

ভাবুন তো, আপনি রাতের খাবার রান্না করতে যাচ্ছেন। আপনি বাজার থেকে এক ব্যাগ বাজারপাতি নিয়ে এলেন: কাদা মাখা গাজর, আস্ত মুরগি, খোসা ছাড়ানো রসুন আর এক ডালা পনির। আপনি কি এগুলো সোজা কড়াইতে দিয়ে দেবেন? কখনোই নয়। আপনাকে অবশ্যই আগে সবকিছু ধুতে, খোসা ছাড়াতে, কাটতে, মাপতে এবং গুছিয়ে রাখতে (prep) হবে।

ফিচার ইঞ্জিনিয়ারিং (Feature engineering) হলো মূলত মেশিন লার্নিংয়ের ডেটা প্রেপ (data prep) ধাপ। যেকোনো কাঁচা বা র ডেটা (raw data) সাধারণত বেশ অগোছালো হয় — যেমন: লেখা বা টেক্সট হিসেবে তারিখ দেওয়া থাকে, ক্যাটাগরিগুলো শব্দ হিসেবে থাকে, বা মানগুলো বিভিন্ন স্কেলে দেওয়া থাকে। আপনার মডেল এগুলো সরাসরি ব্যবহার করতে বা খেতে পারবে না। মডেল যেন এগুলো আসলেই শিখতে বা কাজে লাগাতে পারে, সেজন্য আপনাকে এগুলোকে ট্রান্সফর্ম বা পরিবর্তন করে পরিষ্কার, সংখ্যা বা নিউমেরিক্যাল (numerical) ইনপুটে পরিণত করতে হবে।

আর সবচেয়ে মজার ব্যাপার হলো: আপনি এখানে উপাদানগুলো কতটা ভালোভাবে গুছিয়ে নিচ্ছেন বা প্রেপ করছেন, তা অনেক সময় আপনার বেছে নেওয়া রেসিপির (recipe) চেয়েও বেশি গুরুত্বপূর্ণ হয়। কারণ একেবারে জঘন্য ও আবর্জনা ফিচার পাওয়া একটি দামি মডেলের চেয়ে, দারুণ দারুণ ফিচার পাওয়া একটি সাধারণ মডেল প্রায় সবসময়ই বেশি ভালো পারফর্ম করবে।

ফিচার ইঞ্জিনিয়ারিংয়ের কয়েকটি সাধারণ পদ্ধতি (Common feature engineering techniques)

১. ক্যাটাগরি এনকোডিং বা Encoding categories

মডেলের শুধু সংখ্যা (numbers) দরকার হয়, কোনো শব্দ (words) নয়। যদি আপনার ডেটায় "color" নামে একটি কলাম থাকে যেখানে "লাল (red)", "নীল (blue)", "সবুজ (green)" ইত্যাদি শব্দ দেওয়া থাকে, তবে আপনি এগুলো সরাসরি বসিয়ে দিতে পারবেন নাস আপনাকে এগুলোকে এনকোড (encode) করতে হবে:

  • ওয়ান-হট এনকোডিং (One-Hot Encoding): প্রতিটি ক্যাটাগরির জন্য একটি করে কলাম তৈরি করা হয়। লাল → [১, ০, ০], নীল → [০, ১, ০]
  • লেবেল এনকোডিং (Label Encoding): লাল → ০, নীল → ১, সবুজ → ২ (তবে এখানে সাবধান থাকতে হবে — কারণ এটি দিয়ে এদের মধ্যে একটি ক্রম বা অর্ডারিং বোঝাতে পারে!)

২. নাম্বারের স্কেলিং বা Scaling numbers

যদি "বয়স (age)"-এর মান ০-১০০ এর মধ্যে হয় এবং "বেতন (salary)"-এর মান ২০,০০০-২০০,০০০ এর মধ্যে হয়, তবে মডেল ভাববে যে বেতনটাই বেশি গুরুত্বপূর্ণ শুধু এই কারণে যে এর সংখ্যাগুলো বড়। স্কেলিং (Scaling) মূলত এই সমস্যার সমাধান করে আর সে জন্য এটি সবগুলোকে একই সীমার (similar range) মধ্যে নিয়ে আসে।

৩. নতুন ফিচার তৈরি করা (Creating new features)

মাঝে মাঝে এর র ডেটার (raw data) মধ্যে সবচেয়ে সেরা ফিচারগুলো পাওয়া যায় না। একটি টাইমস্ট্যাম্প (timestamp) থেকে আপনি সপ্তাহের দিন (day of week), সময় বা ঘণ্টা (hour), এটি কি ছুটির দিন (is_weekend), সবশেষ ইভেন্ট থেকে পার হওয়া সময় (time_since_last_event) ইত্যাদি বের করে নিতে পারেন। আবার একটি ঠিকানা (address) থেকে জিপ কোড (zip code), শহরের কেন্দ্র থেকে এর দূরত্ব (distance to city center), এলাকার আয়ের পরিমাণ (neighborhood income level) ইত্যাদি বের করে নেওয়া যায়।

অ্যাকশনে ফিচার ইঞ্জিনিয়ারিং (Feature Engineering in Practice)

import pandas as pd
from sklearn.preprocessing import StandardScaler, OneHotEncoder
# র ডেটা (Raw data) — অগোছালো এবং মিশ্রিত (messy and mixed)
df = pd.DataFrame({
'age': [25, 45, 35, 50],
'salary': [30000, 80000, 55000, 120000],
'city': ['NYC', 'LA', 'NYC', 'Chicago'],
'join_date': ['2020-01-15', '2019-06-20', '2021-03-10', '2018-11-05']
})
# ১. নিউমেরিক্যাল ফিচারগুলো স্কেল করা (Scale numerical features)
scaler = StandardScaler()
df[['age_scaled', 'salary_scaled']] = scaler.fit_transform(df[['age', 'salary']])
# ২. ক্যাটাগরিগুলোকে ওয়ান-হট এনকোড করা (One-hot encode categories)
df = pd.get_dummies(df, columns=['city'])
# ৩. তারিখ থেকে নতুন ফিচার ইঞ্জিনিয়ারিং করা (Engineer new features from date)
df['join_date'] = pd.to_datetime(df['join_date'])
df['tenure_days'] = (pd.Timestamp('2024-01-01') - df['join_date']).dt.days
print(df[['age_scaled', 'salary_scaled', 'city_NYC', 'tenure_days']].to_string())
Output
   age_scaled  salary_scaled  city_NYC  tenure_days
0      -1.07          -1.17      True         1447
1       0.63           0.19     False         1656
2      -0.22          -0.49      True         1027
3       1.49           1.47     False         1883

মিসিং বা নিখোঁজ ডেটা সামলানো (Handling missing data)

বাস্তব জগতের ডেটাগুলো অনেক সময়ই অসম্পূর্ণ হয় বা এতে অনেক ফাঁকা জায়গা (holes) থাকে। যেমন: হয়তো কেউ সার্ভের বা জরিপের একটি প্রশ্নের উত্তর দেয়নি, কোনো সেন্সরে সমস্যা হয়েছিল, বা ডেটাবেস পাল্টানোর সময় কোনো কলাম বাদ পড়েছিল। এসব ক্ষেত্রে আপনার হাতে কয়েকটি উপায় আছে:

  • রো বা সারিটি ফেলে দেওয়া (Drop the row) — এটি সবচেয়ে সহজ, তবে এতে আপনি ডেটা হারাবেন
  • এগুলো গড় (mean) বা মধ্যমা (median) দিয়ে পূরণ করা — এটি সংখ্যা বা নিউমেরিক্যাল ডেটার (numerical data) জন্য খুব ভালো কাজ করে আর এর ফলে ডেটাসেটের আকারও ঠিক থাকে
  • মোড বা mode দিয়ে পূরণ করা — এটি ক্যাটাগরিক্যাল ডেটার (categorical data) জন্য বেশ ভালো কাজ করে
  • একটি "মিসিং (missing)" ফ্ল্যাগ বা অংশ তৈরি করা — মাঝে মাঝে ডেটা মিসিং আছে — এই তথ্যটিই খুব কাজের একটি সংকেত বা সিগন্যাল (signal) হিসেবে কাজ করতে পারে

ফিচার সিলেকশন (Feature selection): কম জিনিসই অনেক সময় বেশি উপকারী হয় (less is more)

খুব বেশি ফিচার থাকা মানেই সব সময় ভালো কিছু নয়। অপ্রয়োজনীয় ফিচারগুলো মূলত নয়েজ (noise) তৈরি করে এবং ট্রেইনিংয়ের গতি (training) কমিয়ে দেয়। কোরিলেশন অ্যানালাইসিস (correlation analysis), ফিচার ইম্পরট্যান্স (feature importance), এবং পিসিএ (PCA)-এর মতো টেকনিকগুলো বা পদ্ধতিগুলো আপনার কেবল দরকারি জিনিসগুলোই ধরে রাখতে সাহায্য করে।

Note: "সাধারণত অ্যাপ্লায়েড মেশিন লার্নিং (Applied machine learning) মানেই হলো গিয়ে ফিচার ইঞ্জিনিয়ারিং (feature engineering)" — অ্যান্ড্রিউ এনজি (Andrew Ng)। সঠিক অ্যালগরিদম বেছে নেওয়া অবশ্যই গুরুত্বপূর্ণ, কিন্তু আপনি সেটিতে ঠিক কী ধরনের ফিচার ইনপুট হিসেবে দিচ্ছেন তা আরও বেশি গুরুত্বপূর্ণ। তাই আপনার বেশিরভাগ সময় বা প্রায় ৮০% সময়ই ডেটা প্রেপ (data prep) এবং ফিচার ইঞ্জিনিয়ারিংয়ের (feature engineering) পেছনে ব্যয় করা উচিত।

Key Metrics

🔢 ওয়ান-হট এনকোডিং (One-Hot Encoding)
সাবধান: ১০০০টি ক্যাটাগরি মানে এখানে ১০০০টি নতুন কলাম তৈরি হবে
O(n × c) n সারি (rows) × c সংখ্যক ক্যাটাগরি (categories)
📏 স্ট্যান্ডার্ড স্কেলিং (Standard Scaling)
সব সময় কেবল ট্রেইনিং ডেটার ওপরই ফিট (fit) করাবেন, তবে বদলাবেন বা ট্রান্সফর্ম (transform) করবেন উভয়কেই
O(n) মিন/স্ট্যান্ডার্ড ডেভিয়েশনের (mean/std) জন্য একবার পার হওয়া
🧹 মিসিং ভ্যালু পূরণ (Missing Value Imputation)
অ্যাডভান্সড বা উন্নত পদ্ধতিগুলো (যেমন: KNN imputation) অনেক ধীরগতির হলেও ভালো কাজ করে
O(n) সাধারণ পূরণ পদ্ধতি (Simple fill) অনেক দ্রুত
🏗️ নতুন ফিচার তৈরি করা (New Feature Creation)
আর এখানেই মূলত ডোমেইন এক্সপার্টদের (domain expertise) দক্ষতা কাজে লাগে
ডোমেইন বা বিষয়ের ওপর নির্ভরশীল (Domain-dependent) ম্যানুয়াল বা হাতের কাজ + ক্রিয়েটিভ বা সৃজনশীল

ছোট কুইজ

আপনি কোনো এমএল মডেলে (ML models) সরাসরি 'red' স্ট্রিংটি কেন ইনপুট হিসেবে দিতে পারেন না?
Challenge

পড়া চালিয়ে যান

পিসিএ (Principal Component Analysis - PCA)
১০০টি ফিচারকে (features) স্কোয়াশ (Squash) করে বা ছেঁটে নিয়ে শুধুমাত্র সবচেয়ে বেশি দরকারীগুলোকেই রাখা
এমএল পাইপলাইন (ML Pipeline)
র বা কাঁচা ডেটা (raw data) থেকে শুরু করে একেবারে প্রোডাকশনে (production) কাজের প্রেডিকশন (predictions) পর্যন্ত
রেগুলারাইজেশন (Regularization)
মডেলটি যাতে সৎ থাকে সেজন্য এর কমপ্লেক্সিটিতে (complexity) পেনাল্টি (penalty) দেওয়া