Classification সমস্যা পরিচিতি
গল্প দিয়ে শুরু 🎭
ধরুন আপনি একজন ব্যাংক ম্যানেজার। রোজ শত শত মানুষ ঋণের জন্য আসে। আপনাকে দ্রুত সিদ্ধান্ত নিতে হবে — কাকে ঋণ দেবেন, কাকে দেবেন না। আপনি কিছু প্রশ্ন করেন: "আয় কত? আগের ঋণ আছে কি? চাকরি কতদিন ধরে?" এই প্রশ্নগুলো দেখে সিদ্ধান্ত নেওয়াই হলো Classification। আর এই প্রশ্নের গাছটাই হলো Decision Tree!
🏷️ Classification কী?
Classification হলো ডেটাকে আগে থেকে নির্ধারিত শ্রেণীগুলোর একটিতে ভাগ করা। যেমন: পাস বা ফেল, ঋণ দেওয়া বা না দেওয়া, সুস্থ বা অসুস্থ।
📊 বাস্তব জীবনের Classification উদাহরণ
| পরিস্থিতি | Input (প্রশ্ন করা হয়) | Class (শ্রেণী) |
|---|---|---|
| 🎓 ছাত্রের রেজাল্ট | পড়ার ঘণ্টা, উপস্থিতি | পাস / ফেল |
| 🏦 ঋণ অনুমোদন | আয়, ক্রেডিট স্কোর | অনুমোদিত / প্রত্যাখ্যাত |
| 📧 ইমেইল ফিল্টার | শব্দ, প্রেরক | Spam / Not Spam |
| 🏥 রোগ নির্ণয় | বয়স, লক্ষণ, রক্তচাপ | অসুস্থ / সুস্থ |
| 📱 কাস্টমার Churn | ব্যবহার, অভিযোগ | ছাড়বে / থাকবে |
🌳 আজকের অস্ত্র: Decision Tree
আজ আমরা শিখবো এমন একটি Algorithm যা ঠিক মানুষের মতো প্রশ্নে প্রশ্নে সিদ্ধান্তে পৌঁছায় — Decision Tree। এটি শুধু শক্তিশালী নয়, দেখতেও সুন্দর — একটি প্রকৃত গাছের মতো!
Decision Tree কী?
গল্প: আজ কি ক্রিকেট খেলা যাবে? 🏏
আপনার বন্ধু জিজ্ঞেস করে — "আজ ক্রিকেট খেলতে যাবে?" আপনি সাথে সাথে হ্যাঁ বলেন না। বরং মনে মনে কিছু প্রশ্ন করেন — বৃষ্টি হচ্ছে? মাঠ ভেজা? বাতাস বেশি? এই প্রশ্নের উত্তর দিয়ে আপনি সিদ্ধান্তে পৌঁছান। এটাই Decision Tree!
🏏 আজ কি ক্রিকেট খেলব? — Decision Tree
📖 Decision Tree কেন "Tree" বলা হয়?
একটি প্রকৃত গাছের মতো — উপরে একটি মূল (Root), নিচে ডালপালা (Branch), এবং সবশেষে পাতা (Leaf)। মানুষ যেভাবে প্রশ্ন করে করে সিদ্ধান্তে পৌঁছায়, Decision Tree ঠিক সেভাবেই কাজ করে।
🤔 মানুষ কীভাবে সিদ্ধান্ত নেয়?
আপনি হোটেলে খাবার অর্ডার করার আগে ভাবেন — "ঝাল খাব? মাছ খাব? দাম কত?" প্রতিটি প্রশ্নের উত্তর আপনাকে পরের প্রশ্নে নিয়ে যায়। Decision Tree ঠিক এই মানবিক চিন্তাকে গণিতে রূপ দেয়।
Decision Tree-এর উপাদানসমূহ
🌳 Tree-এর চারটি মূল অংশ
| উপাদান | সহজ ভাষায় | উদাহরণ | গাছের উপমা |
|---|---|---|---|
| Root Node | সবচেয়ে গুরুত্বপূর্ণ প্রথম প্রশ্ন | "পড়ার ঘণ্টা > ৫?" | গাছের মূল/গোড়া |
| Internal Node | মাঝপথের প্রশ্ন | "উপস্থিতি > ৭৫%?" | ডাল |
| Branch | প্রশ্নের উত্তর (হ্যাঁ/না) | হ্যাঁ বা না | শাখা |
| Leaf Node | চূড়ান্ত সিদ্ধান্ত — কোনো প্রশ্ন নেই | পাস বা ফেল | পাতা |
Tree উপাদান — রঙিন চিত্র
📐 Tree-এর গভীরতা (Depth)
Depth বা গভীরতা হলো Root Node থেকে Leaf Node পর্যন্ত কতটি স্তর আছে। উপরের ক্রিকেটের Tree-এর গভীরতা ৩। গভীরতা বেশি হলে Tree জটিল হয়ে যায়।
Decision Tree কীভাবে কাজ করে?
Dataset দেখা
ছাত্রদের পড়ার ঘণ্টা, উপস্থিতি, আগের নম্বর এবং পাস/ফেল ফলাফল নিয়ে শুরু।
সেরা প্রশ্ন (Feature) খোঁজা
কোন প্রশ্নটি করলে ডেটা সবচেয়ে ভালোভাবে ভাগ হয়? যেমন: "পড়ার ঘণ্টা > ৫?" নাকি "উপস্থিতি > ৭৫%?" — সেরাটা Root Node হবে।
ডেটা ভাগ করা (Split)
সেরা প্রশ্নের উত্তর হ্যাঁ/না দিয়ে ডেটা দুটি দলে ভাগ হয়।
প্রতিটি দলে আবার একই কাজ (Recursive Splitting)
প্রতিটি ভাগের জন্য আবার সেরা প্রশ্ন খোঁজা হয় এবং আবার ভাগ করা হয়।
Leaf Node — চূড়ান্ত সিদ্ধান্ত
যখন একটি গ্রুপে সব একই শ্রেণী হয়ে যায়, অথবা আর ভাগ সম্ভব নয় — সেটাই Leaf Node। এখানে পাস বা ফেল সিদ্ধান্ত লেখা থাকে।
📊 ছাত্রের Dataset (উদাহরণ)
| ছাত্র | পড়ার ঘণ্টা | উপস্থিতি % | আগের নম্বর | ফলাফল |
|---|---|---|---|---|
| রাহেলা | 7 | 85 | 70 | পাস |
| করিম | 2 | 40 | 35 | ফেল |
| নীলা | 6 | 78 | 65 | পাস |
| জামাল | 1 | 55 | 30 | ফেল |
| রিতা | 5 | 70 | 60 | পাস |
| সুমন | 3 | 48 | 42 | ফেল |
ছাত্র Dataset থেকে তৈরি Decision Tree
Split কেন দরকার? কোন প্রশ্ন আগে?
গল্প: ভালো প্রশ্ন বনাম খারাপ প্রশ্ন 🎯
কল্পনা করুন, ১০ জন ছাত্রের মধ্যে ৫ জন পাস ও ৫ জন ফেল। আপনি প্রশ্ন করলেন: "ছাত্রের নাম 'ক' অক্ষর দিয়ে শুরু?" — এতে পাস/ফেল ভাগ হয়নি মোটেও! কিন্তু "পড়ার ঘণ্টা > ৫?" জিজ্ঞেস করলে হয়তো বেশিরভাগ পাস এক দিকে, বেশিরভাগ ফেল আরেক দিকে পড়বে। ভালো প্রশ্ন মানে এমন প্রশ্ন যা ডেটাকে সবচেয়ে পরিষ্কারভাবে ভাগ করে।
ভালো Split vs খারাপ Split
⚡ মূল নিয়ম
Decision Tree সর্বদা এমন প্রশ্ন/Feature বেছে নেয় যা ডেটাকে সবচেয়ে "পরিষ্কার" বা "বিশুদ্ধ" (Pure) গ্রুপে ভাগ করে। এই "পরিষ্কারের মাত্রা" পরিমাপ করা হয় Impurity দিয়ে।
Impurity বোঝা — বিশুদ্ধতা ও অবিশুদ্ধতা
গল্প: ফলের বাক্স 🍎
কল্পনা করুন দুটো বাক্স। প্রথম বাক্সে শুধু আম। দ্বিতীয় বাক্সে আম, কলা, আপেল, লিচু একসাথে। প্রথম বাক্স Pure (বিশুদ্ধ) — একই ধরনের জিনিস। দ্বিতীয় বাক্স Impure (অবিশুদ্ধ) — মিশ্রণ। Decision Tree সবসময় বিশুদ্ধ বাক্স তৈরি করতে চায়।
বিশুদ্ধ (Pure) vs অবিশুদ্ধ (Impure) Node
পাস, পাস, পাস, পাস
সবই একই শ্রেণী!
পাস, পাস, ফেল, পাস
বেশিরভাগ একই, একটু মিশ্রণ
পাস, ফেল, পাস, ফেল
সমান মিশ্রণ! সবচেয়ে খারাপ
📊 Impurity স্তর বোঝার টেবিল
| Node-এর বিষয়বস্তু | Impurity মাত্রা | কতটা সমস্যা? |
|---|---|---|
| সব পাস: পাস, পাস, পাস, পাস | শূন্য (০) | কোনো সমস্যা নেই — এটাই লক্ষ্য! |
| ৩ পাস + ১ ফেল | কম | সামান্য সমস্যা |
| ২ পাস + ২ ফেল | সর্বোচ্চ | সর্বোচ্চ সমস্যা — বলা কঠিন! |
| সব ফেল: ফেল, ফেল, ফেল, ফেল | শূন্য (০) | কোনো সমস্যা নেই — এটাও Pure! |
🎯 সারাংশ
Decision Tree Split করার সময় এমন প্রশ্ন বেছে নেয় যা সবচেয়ে বেশি Impurity কমায়। যে Split-এর পরে দুটো গ্রুপ সবচেয়ে বেশি Pure হয়, সেই প্রশ্নই Root বা Internal Node হবে। এই "Impurity পরিমাপ" করা হয় দুটি পদ্ধতিতে — Gini Impurity ও Entropy।
Gini Impurity — পরিষ্কারের মাত্রা পরিমাপ
💡 Gini Impurity কী?
Gini Impurity হলো একটি সংখ্যা (০ থেকে ১-এর মধ্যে) যা বলে দেয় একটি Node কতটা মিশ্রিত (অবিশুদ্ধ)।
০ মানে: সম্পূর্ণ Pure (সব একই শ্রেণী) → সেরা
০.৫ মানে: সর্বোচ্চ Impure (৫০-৫০ মিশ্রণ) → সবচেয়ে খারাপ
🧠 সহজ ভাষায়
প্রতিটি শ্রেণীর ভগ্নাংশ (মোটের মধ্যে কতটুকু) নিজেই নিজেকে গুণ করো, সবগুলো যোগ করো, তারপর ১ থেকে বাদ দাও।
📐 উদাহরণ ১: Pure Node — (পাস, পাস, পাস, পাস)
মোট = ৪, পাস = ৪, ফেল = ০
p(পাস) = ৪/৪ = 1.0 | p(ফেল) = ০/৪ = 0.0
📐 উদাহরণ ২: সর্বোচ্চ Impure — (পাস, ফেল, পাস, ফেল)
মোট = ৪, পাস = ২, ফেল = ২
p(পাস) = ২/৪ = 0.5 | p(ফেল) = ২/৪ = 0.5
📐 উদাহরণ ৩: আধা-বিশুদ্ধ — (পাস, পাস, পাস, ফেল)
মোট = ৪, পাস = ৩, ফেল = ১
p(পাস) = ৩/৪ = 0.75 | p(ফেল) = ১/৪ = 0.25
Interactive Gini Calculator
Node-এ পাস/ফেল সংখ্যা বদলান — Gini তাৎক্ষণিক হিসাব হবে
📊 Gini Impurity সারসংক্ষেপ টেবিল
| Node বিষয়বস্তু | Gini মান | অর্থ |
|---|---|---|
| সব পাস বা সব ফেল | 0.0 | সম্পূর্ণ Pure ✅ |
| ৩ পাস + ১ ফেল | 0.375 | মাঝারি মিশ্রণ |
| ২ পাস + ২ ফেল | 0.5 | সর্বোচ্চ Impure ❌ |
💡 Decision Tree সবসময় এমন Split বেছে নেয় যা সন্তান Node-গুলোর weighted Gini সবচেয়ে কম রাখে।
Entropy ও Information Gain
উপমা: এলোমেলো ঘর vs গোছানো ঘর 🏠
একটি খুব এলোমেলো ঘর — বই, কাপড়, খাবার, জুতা সব এক জায়গায়। এই ঘর থেকে একটি বই খুঁজে পাওয়া কঠিন — Entropy বেশি। আরেকটি ঘর পরিষ্কার ও গোছানো — সব জিনিস নির্দিষ্ট জায়গায়। বই খুঁজে পাওয়া সহজ — Entropy কম। Decision Tree এলোমেলো ডেটাকে গোছানো গ্রুপে সাজাতে চায়।
📖 Entropy কী?
Entropy হলো একটি Node-এর অনিশ্চয়তা বা এলোমেলোপনার পরিমাপ। Gini-র মতোই, বেশি মিশ্রণ = বেশি Entropy। সম্পূর্ণ Pure Node-এর Entropy = ০।
📊 Information Gain কী?
Information Gain হলো একটি Split কতটা Entropy কমিয়েছে তার পরিমাপ। যে Split সবচেয়ে বেশি Information Gain দেয়, সেটাই সেরা Split।
⚖️ Gini vs Entropy — তুলনা
| বিষয় | Gini Impurity | Entropy |
|---|---|---|
| Pure Node-এ মান | 0 | 0 |
| সর্বোচ্চ মান | 0.5 (Binary) | 1.0 (Binary) |
| গণনার গতি | দ্রুত (log নেই) | ধীর (log হিসাব) |
| sklearn default | ✅ হ্যাঁ | criterion='entropy' দিয়ে |
| ব্যবহারিক পার্থক্য | সাধারণত খুব কম — দুটোই ভালো ফলাফল দেয় | |
Prediction কীভাবে হয়?
🔮 নতুন ছাত্রের জন্য Prediction
Tree তৈরি হয়ে গেলে, নতুন ছাত্রের ডেটা দিলে তাকে প্রতিটি Node-এর প্রশ্নের মধ্য দিয়ে নিয়ে যাওয়া হয় যতক্ষণ না Leaf Node-এ পৌঁছায়।
উদাহরণ: রাজীব (পড়া=৬ঘণ্টা, উপস্থিতি=৮০%, আগের নম্বর=৬৫)
Overfitting ও Underfitting
গল্প: মুখস্থ করা ছাত্র 📚
একজন ছাত্র পরীক্ষার প্রস্তুতিতে প্রতিটি প্রশ্নের উত্তর হুবহু মুখস্থ করল। পরীক্ষায় একটু ভিন্ন ভাষায় প্রশ্ন এলে সে পারল না! এটাই Overfitting। Decision Tree খুব গভীর (Deep) হলে একই সমস্যা হয় — Training ডেটা মুখস্থ হয়ে যায়, নতুন ডেটায় ভুল করে।
খুব গভীর Tree
Training: ১০০%
Test: ৬০%
❌ Overfitting!
সঠিক গভীরতা
Training: ৯০%
Test: ৮৫%
✅ ভারসাম্যপূর্ণ!
খুব ছোট Tree
Training: ৬৫%
Test: ৬৩%
⚠️ Underfitting!
🔧 Overfitting নিয়ন্ত্রণের উপায়
| Parameter | কী করে? | উদাহরণ |
|---|---|---|
| max_depth | Tree-র সর্বোচ্চ গভীরতা সীমিত করে | max_depth=3 → ৩ স্তরের বেশি যাবে না |
| min_samples_split | Split করতে ন্যূনতম কত ডেটা দরকার | min_samples_split=5 → ৫টির কমে Split নেই |
| min_samples_leaf | প্রতিটি Leaf Node-এ ন্যূনতম ডেটা | min_samples_leaf=3 → Leaf-এ কমপক্ষে ৩ |
সুবিধা ও অসুবিধা
✅ সুবিধা (Advantages)
- সহজে বোঝা যায়: চোখ দিয়ে দেখা যায়
- Feature Scaling নেই: KNN-এর মতো Scaling দরকার নেই
- উভয় ডেটা: সংখ্যা ও শ্রেণী উভয় handle করে
- Interpretable: ব্যবসার মানুষরাও বুঝতে পারেন
- Feature Importance: কোন Feature গুরুত্বপূর্ণ বোঝা যায়
❌ অসুবিধা (Disadvantages)
- Overfitting: গভীর Tree মুখস্থ করে
- অস্থির: ডেটা একটু বদলালে Tree সম্পূর্ণ বদলায়
- Biased: বেশি শ্রেণীর দিকে ঝোঁক থাকে
- পেচানো সীমানা: XOR ধরনের সমস্যায় দুর্বল
Real-Life Applications
Banking
ঋণ অনুমোদন — আয়, সম্পদ ও ইতিহাস দেখে সিদ্ধান্ত
Healthcare
রোগ নির্ণয় — লক্ষণ ও পরীক্ষার ফলাফল দেখে
Fraud Detection
অস্বাভাবিক লেনদেন ধরা — কোথায়, কত, কখন
Customer Churn
কাস্টমার চলে যাবে কিনা — ব্যবহারের ধরন দেখে
Marketing
কোন কাস্টমার কোন অফারে সাড়া দেবে
Agriculture
কোন মাটিতে কোন ফসল ভালো হবে
Google Colab কোডিং সেশন
📋 আজকের Dataset ও লক্ষ্য
পড়ার ঘণ্টা, উপস্থিতি এবং আগের নম্বর দিয়ে Decision Tree তৈরি করব — Tree ভিজ্যুয়ালও দেখব!
# প্রয়োজনীয় লাইব্রেরি import pandas as pd import numpy as np from sklearn.tree import DecisionTreeClassifier, export_text, plot_tree from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, confusion_matrix, classification_report import matplotlib.pyplot as plt # Dataset তৈরি data = { 'study_hours': [1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,3,5,7,2,8], 'attendance': [40,50,45,55,60,70,65,75,80,85,90,88,95,92,98,48,72,88,42,96], 'previous_marks': [30,40,35,45,50,55,60,58,65,70,75,72,80,78,88,38,62,79,33,84], 'pass_fail': [0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1] } df = pd.DataFrame(data) print("Dataset তৈরি হয়েছে!") print(df.head(8))
•
DecisionTreeClassifier — Decision Tree-এর জন্য sklearn-এর ক্লাস•
export_text — Text আকারে Tree দেখানোর জন্য•
plot_tree — চিত্র আকারে Tree দেখানোর জন্য•
matplotlib — চিত্র আঁকার লাইব্রেরি
# Features ও Target X = df[['study_hours', 'attendance', 'previous_marks']] y = df['pass_fail'] # Train-Test Split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) print("Training:", X_train.shape, "| Testing:", X_test.shape)
• Decision Tree-এ Feature Scaling লাগে না! KNN-এর মতো Distance হিসাব করে না।
• ৮০% Training, ২০% Testing ডেটা
# Decision Tree তৈরি (max_depth=3 দিয়ে Overfitting রোধ) dt_model = DecisionTreeClassifier( max_depth=3, criterion='gini', # Gini Impurity ব্যবহার random_state=42 ) dt_model.fit(X_train, y_train) print("✅ Decision Tree Training সম্পন্ন!") print(f"Tree-এর গভীরতা: {dt_model.get_depth()}") print(f"Leaf Node সংখ্যা: {dt_model.get_n_leaves()}")
•
max_depth=3 → Tree ৩ স্তরের বেশি গভীর হবে না — Overfitting রোধ•
criterion='gini' → Gini Impurity দিয়ে সেরা Split বেছে নেবে•
get_depth() → Tree কতটা গভীর হয়েছে•
get_n_leaves() → কতটি Leaf Node আছে
# Tree-এর Text উপস্থাপনা feature_names = ['study_hours', 'attendance', 'previous_marks'] tree_rules = export_text(dt_model, feature_names=feature_names) print("🌳 Decision Tree Rules:") print(tree_rules)
• এটি Tree-র Text সংস্করণ — প্রতিটি প্রশ্ন এবং উত্তর দেখা যাচ্ছে
•
|--- মানে একটি গভীর স্তর• মডেল নিজেই বেছে নিয়েছে: প্রথম প্রশ্ন
study_hours <= 4.5
# Tree ভিজ্যুয়াল প্লট plt.figure(figsize=(14, 7)) plot_tree( dt_model, feature_names=feature_names, class_names=['ফেল', 'পাস'], filled=True, rounded=True, fontsize=12 ) plt.title("Decision Tree — ছাত্র পাস/ফেল Prediction") plt.savefig('decision_tree.png', bbox_inches='tight', dpi=150) plt.show() print("✅ Tree চিত্র সংরক্ষণ হয়েছে!")
•
filled=True → রঙ দিয়ে শ্রেণী চেনানো হবে•
rounded=True → গোলাকার বাক্স দেখাবে•
class_names → শ্রেণীর নাম দেখাবে
y_pred = dt_model.predict(X_test) print("Predicted:", y_pred) print("Actual: ", y_test.values) print(f"\n✅ Accuracy: {accuracy_score(y_test, y_pred):.2%}") print("\n📊 Classification Report:") print(classification_report(y_test, y_pred, target_names=['ফেল', 'পাস']))
# কোন Feature সবচেয়ে গুরুত্বপূর্ণ? importances = dt_model.feature_importances_ print("📊 Feature Importance:") for feat, imp in zip(feature_names, importances): print(f" {feat}: {imp:.4f} ({imp*100:.1f}%)")
• Feature Importance দেখায় কোন প্রশ্ন Impurity সবচেয়ে বেশি কমিয়েছে
• পড়ার ঘণ্টা (৭৮.২%) সবচেয়ে গুরুত্বপূর্ণ — Tree-র Root Node হয়েছে
• এটি Decision Tree-এর বিশেষ সুবিধা — অন্য Algorithm এটা সহজে দেয় না!
# বিভিন্ন max_depth দিয়ে Accuracy তুলনা print("Max Depth | Train Accuracy | Test Accuracy") print("-" * 45) for depth in [1, 2, 3, 4, 5, None]: model = DecisionTreeClassifier(max_depth=depth, random_state=42) model.fit(X_train, y_train) train_acc = accuracy_score(y_train, model.predict(X_train)) test_acc = accuracy_score(y_test, model.predict(X_test)) print(f" {str(depth):9} | {train_acc:.2%} | {test_acc:.2%}")
• Depth=1 → Underfitting: Train এও ভালো করছে না
• Depth=None → Unlimited: Training Data মুখস্থ হয় (Overfitting ঝুঁকি)
• এই ছোট Dataset-এ depth=2 বা 3-ই যথেষ্ট
Model Evaluation — মডেল মূল্যায়ন
Confusion Matrix — সিদ্ধান্তের ম্যাট্রিক্স
আসলে পাস ✅
বলেছি পাস
আসলে পাস ❌
বলেছি ফেল
আসলে ফেল ❌
বলেছি পাস
আসলে ফেল ✅
বলেছি ফেল
📊 Evaluation Metrics
| Metric | সূত্র | সহজ ভাষায় | কখন গুরুত্বপূর্ণ? |
|---|---|---|---|
| Accuracy | (TP+TN)/Total | সব মিলিয়ে কতটা সঠিক? | সাধারণ সমস্যায় |
| Precision | TP/(TP+FP) | পাস বলা জনের মধ্যে কতজন সত্যিই পাস? | Spam Detection |
| Recall | TP/(TP+FN) | আসল পাস-এর মধ্যে কতজন ধরা গেল? | রোগ নির্ণয় |
| F1 Score | 2×(P×R)/(P+R) | Precision ও Recall-এর সামঞ্জস্য | Imbalanced Data |
অন্যান্য Algorithm-এর সাথে তুলনা
⚖️ Decision Tree vs Logistic Regression
| বিষয় | Decision Tree | Logistic Regression |
|---|---|---|
| Decision Boundary | আয়তাকার বাক্স (Step-like) | মসৃণ সরল রেখা |
| Feature Scaling | দরকার নেই | সাধারণত কম জরুরি |
| Interpretability | খুব সহজ (Tree দেখা যায়) | মাঝারি (Coefficients) |
| Non-linear সম্পর্ক | ভালো handle করে | দুর্বল (Linear ধরে নেয়) |
| Overfitting ঝুঁকি | বেশি (গভীর Tree) | কম |
⚖️ Decision Tree vs KNN
| বিষয় | Decision Tree | KNN |
|---|---|---|
| Training | আছে (Tree তৈরি) | নেই (Lazy Learning) |
| Prediction গতি | অনেক দ্রুত | ধীর (সব ডেটায় Distance) |
| Feature Scaling | দরকার নেই | বাধ্যতামূলক |
| ব্যাখ্যাযোগ্যতা | সর্বোচ্চ (Tree দেখা যায়) | মাঝারি |
| বড় Dataset | ভালো | খুব ধীর |
⚖️ Decision Tree vs Linear Regression
| বিষয় | Decision Tree | Linear Regression |
|---|---|---|
| মূল কাজ | Classification (ও Regression) | শুধু Regression (সংখ্যা) |
| Non-linear সম্পর্ক | সহজে handle করে | শুধু Linear সম্পর্ক |
| Output | শ্রেণী (Class) | সংখ্যা |
🎯 কোনটা কখন বেছে নেবেন?
Common Beginner Mistakes
❌ ভুল ১: Tree খুব গভীর করা (Overfitting)
ভুল: max_depth না দিয়ে Tree unlimited করা।
সমাধান: সবসময় max_depth নির্ধারণ করুন। Training ও Test Accuracy-র পার্থক্য দেখুন।
❌ ভুল ২: Feature Scaling যোগ করা
ভুল ধারণা: KNN-এর মতো Decision Tree-এও Scaling লাগে।
সমাধান: Decision Tree Threshold ব্যবহার করে, তাই Scale-এর প্রভাব নেই। Scaling যোগ করলে ক্ষতি নেই কিন্তু দরকারও নেই।
❌ ভুল ৩: Classification vs Regression Tree গুলিয়ে ফেলা
ভুল: বাড়ির দাম predict করতে DecisionTreeClassifier ব্যবহার।
সমাধান: সংখ্যা predict → DecisionTreeRegressor, শ্রেণী predict → DecisionTreeClassifier।
❌ ভুল ৪: শুধু Accuracy দেখা
ভুল ধারণা: Accuracy ৯৫% মানেই মডেল চমৎকার।
সমাধান: Precision, Recall, F1 ও Confusion Matrix দেখুন। Imbalanced Data-তে Accuracy বিভ্রান্তিকর।
❌ ভুল ৫: Test Data-তে Evaluate না করা
ভুল: Training Data-তেই Test করা।
সমাধান: সবসময় আলাদা Test Set-এ মূল্যায়ন করুন।
Revision — পুনরাবৃত্তি ও MCQ
⚡ Quick Revision Chips
🎤 Viva Questions (ক্লিক করলে উত্তর দেখবে)
📝 MCQ — Multiple Choice Questions
📚 Homework Assignment
- Google Colab খুলুন এবং আজকের সম্পূর্ণ Decision Tree কোড নিজে হাতে লিখুন।
- max_depth = 1, 2, 3, 4, 5, None দিয়ে Train ও Test Accuracy তুলনা করে একটি টেবিল বানান।
- criterion='entropy' দিয়ে Tree তৈরি করুন এবং criterion='gini'-র সাথে তুলনা করুন।
- Feature Importance বার চার্ট matplotlib দিয়ে আঁকুন।
- Kaggle-এ "Titanic Dataset" নামিয়ে Decision Tree দিয়ে বেঁচে থাকার সম্ভাবনা predict করুন।
💼 Interview Questions
| # | প্রশ্ন | মূল বিষয় |
|---|---|---|
| 1 | Decision Tree কীভাবে সেরা Split বেছে নেয়? | Gini/Entropy, Information Gain |
| 2 | Decision Tree-এ Overfitting কীভাবে handle করবেন? | Pruning, max_depth, min_samples |
| 3 | Random Forest ও Decision Tree-এর পার্থক্য কী? | Ensemble of Trees, Bagging |
| 4 | Decision Tree Missing Value কীভাবে handle করে? | Surrogate Splits |
| 5 | Gini Impurity ও Entropy-র মধ্যে কোনটা ভালো? | উভয়ই সমান কার্যকর, গতিতে পার্থক্য |
| 6 | Decision Tree কি Regression-এও ব্যবহার হয়? | DecisionTreeRegressor — Mean হিসাব করে |
🎉 অভিনন্দন! আজকের ক্লাস সম্পন্ন!
আপনি আজ শিখেছেন: Classification সমস্যা, Decision Tree-এর গঠন, Gini Impurity, Entropy, Information Gain, Overfitting রোধ, Feature Importance এবং সম্পূর্ণ Python কোডিং!
পরের ক্লাস: Random Forest — Decision Tree-এর শক্তিশালী রূপ 🌲🌲🌲