📋 বিষয়সূচী (Table of Contents)

01

Classification সমস্যা পরিচিতি

⏱ ১০ মিনিট  ·  Introduction to Classification

গল্প দিয়ে শুরু 🎭

ধরুন আপনি একজন ব্যাংক ম্যানেজার। রোজ শত শত মানুষ ঋণের জন্য আসে। আপনাকে দ্রুত সিদ্ধান্ত নিতে হবে — কাকে ঋণ দেবেন, কাকে দেবেন না। আপনি কিছু প্রশ্ন করেন: "আয় কত? আগের ঋণ আছে কি? চাকরি কতদিন ধরে?" এই প্রশ্নগুলো দেখে সিদ্ধান্ত নেওয়াই হলো Classification। আর এই প্রশ্নের গাছটাই হলো Decision Tree!

🏷️ Classification কী?

Classification হলো ডেটাকে আগে থেকে নির্ধারিত শ্রেণীগুলোর একটিতে ভাগ করা। যেমন: পাস বা ফেল, ঋণ দেওয়া বা না দেওয়া, সুস্থ বা অসুস্থ।

📊 বাস্তব জীবনের Classification উদাহরণ

পরিস্থিতিInput (প্রশ্ন করা হয়)Class (শ্রেণী)
🎓 ছাত্রের রেজাল্টপড়ার ঘণ্টা, উপস্থিতিপাস / ফেল
🏦 ঋণ অনুমোদনআয়, ক্রেডিট স্কোরঅনুমোদিত / প্রত্যাখ্যাত
📧 ইমেইল ফিল্টারশব্দ, প্রেরকSpam / Not Spam
🏥 রোগ নির্ণয়বয়স, লক্ষণ, রক্তচাপঅসুস্থ / সুস্থ
📱 কাস্টমার Churnব্যবহার, অভিযোগছাড়বে / থাকবে

🌳 আজকের অস্ত্র: Decision Tree

আজ আমরা শিখবো এমন একটি Algorithm যা ঠিক মানুষের মতো প্রশ্নে প্রশ্নে সিদ্ধান্তে পৌঁছায় — Decision Tree। এটি শুধু শক্তিশালী নয়, দেখতেও সুন্দর — একটি প্রকৃত গাছের মতো!

02

Decision Tree কী?

⏱ ১০ মিনিট  ·  মূল ধারণা ও উপমা

গল্প: আজ কি ক্রিকেট খেলা যাবে? 🏏

আপনার বন্ধু জিজ্ঞেস করে — "আজ ক্রিকেট খেলতে যাবে?" আপনি সাথে সাথে হ্যাঁ বলেন না। বরং মনে মনে কিছু প্রশ্ন করেন — বৃষ্টি হচ্ছে? মাঠ ভেজা? বাতাস বেশি? এই প্রশ্নের উত্তর দিয়ে আপনি সিদ্ধান্তে পৌঁছান। এটাই Decision Tree!

🏏 আজ কি ক্রিকেট খেলব? — Decision Tree

বৃষ্টি হচ্ছে? (Root Node) হ্যাঁ না ❌ খেলব না (Leaf Node) আর্দ্রতা বেশি? (Internal Node) হ্যাঁ না বাতাস বেশি? (Internal Node) ✅ খেলব (Leaf Node) হ্যাঁ না ❌ খেলব না ✅ খেলব Branch

📖 Decision Tree কেন "Tree" বলা হয়?

একটি প্রকৃত গাছের মতো — উপরে একটি মূল (Root), নিচে ডালপালা (Branch), এবং সবশেষে পাতা (Leaf)। মানুষ যেভাবে প্রশ্ন করে করে সিদ্ধান্তে পৌঁছায়, Decision Tree ঠিক সেভাবেই কাজ করে।

🤔 মানুষ কীভাবে সিদ্ধান্ত নেয়?

আপনি হোটেলে খাবার অর্ডার করার আগে ভাবেন — "ঝাল খাব? মাছ খাব? দাম কত?" প্রতিটি প্রশ্নের উত্তর আপনাকে পরের প্রশ্নে নিয়ে যায়। Decision Tree ঠিক এই মানবিক চিন্তাকে গণিতে রূপ দেয়।

03

Decision Tree-এর উপাদানসমূহ

⏱ ১০ মিনিট  ·  Components

🌳 Tree-এর চারটি মূল অংশ

উপাদানসহজ ভাষায়উদাহরণগাছের উপমা
Root Nodeসবচেয়ে গুরুত্বপূর্ণ প্রথম প্রশ্ন"পড়ার ঘণ্টা > ৫?"গাছের মূল/গোড়া
Internal Nodeমাঝপথের প্রশ্ন"উপস্থিতি > ৭৫%?"ডাল
Branchপ্রশ্নের উত্তর (হ্যাঁ/না)হ্যাঁ বা নাশাখা
Leaf Nodeচূড়ান্ত সিদ্ধান্ত — কোনো প্রশ্ন নেইপাস বা ফেলপাতা

Tree উপাদান — রঙিন চিত্র

Root Node সবচেয়ে গুরুত্বপূর্ণ প্রশ্ন Branch (না) Branch (হ্যাঁ) Internal Node মাঝপথের প্রশ্ন Internal Node মাঝপথের প্রশ্ন Leaf Node ❌ ফেল Leaf Node ✅ পাস Leaf Node ✅ পাস Leaf Node ❌ ফেল

📐 Tree-এর গভীরতা (Depth)

Depth বা গভীরতা হলো Root Node থেকে Leaf Node পর্যন্ত কতটি স্তর আছে। উপরের ক্রিকেটের Tree-এর গভীরতা ৩। গভীরতা বেশি হলে Tree জটিল হয়ে যায়।

04

Decision Tree কীভাবে কাজ করে?

⏱ ১৫ মিনিট  ·  ধাপে ধাপে শেখা

Dataset দেখা

ছাত্রদের পড়ার ঘণ্টা, উপস্থিতি, আগের নম্বর এবং পাস/ফেল ফলাফল নিয়ে শুরু।

সেরা প্রশ্ন (Feature) খোঁজা

কোন প্রশ্নটি করলে ডেটা সবচেয়ে ভালোভাবে ভাগ হয়? যেমন: "পড়ার ঘণ্টা > ৫?" নাকি "উপস্থিতি > ৭৫%?" — সেরাটা Root Node হবে।

ডেটা ভাগ করা (Split)

সেরা প্রশ্নের উত্তর হ্যাঁ/না দিয়ে ডেটা দুটি দলে ভাগ হয়।

প্রতিটি দলে আবার একই কাজ (Recursive Splitting)

প্রতিটি ভাগের জন্য আবার সেরা প্রশ্ন খোঁজা হয় এবং আবার ভাগ করা হয়।

Leaf Node — চূড়ান্ত সিদ্ধান্ত

যখন একটি গ্রুপে সব একই শ্রেণী হয়ে যায়, অথবা আর ভাগ সম্ভব নয় — সেটাই Leaf Node। এখানে পাস বা ফেল সিদ্ধান্ত লেখা থাকে।

📊 ছাত্রের Dataset (উদাহরণ)

ছাত্রপড়ার ঘণ্টাউপস্থিতি %আগের নম্বরফলাফল
রাহেলা78570পাস
করিম24035ফেল
নীলা67865পাস
জামাল15530ফেল
রিতা57060পাস
সুমন34842ফেল

ছাত্র Dataset থেকে তৈরি Decision Tree

পড়ার ঘণ্টা > ৪? [Root Node — সেরা প্রশ্ন] না (<= ৪) হ্যাঁ (> ৪) ❌ ফেল (Leaf) করিম, জামাল, সুমন উপস্থিতি > ৭৫%? [Internal Node] না হ্যাঁ আগের নম্বর > ৫৫? [Internal Node] ✅ পাস (Leaf) রাহেলা, নীলা না হ্যাঁ ❌ ফেল ✅ পাস রিতা
Decision Tree ML Pipeline — Step by Step
পরের ধাপ চাপুন — slider দিয়ে নতুন ছাত্রের feature বদলান; tree path + Gini + prediction live update
Data৬ ছাত্র
Splithours>4
Leftফেল leaf
Att>75%
Marks>55
Predictŷ পাস/ফেল
ধাপ ৬-এ slider বদলালে tree path ও prediction তাৎক্ষণিক update
ধাপ ১: Training Dataset ৬ জন ছাত্র — সবুজ = পাস, লাল = ফেল
ধাপ1 / 6
Gini
Path
ŷ
05

Split কেন দরকার? কোন প্রশ্ন আগে?

⏱ ১০ মিনিট  ·  Split Intuition

গল্প: ভালো প্রশ্ন বনাম খারাপ প্রশ্ন 🎯

কল্পনা করুন, ১০ জন ছাত্রের মধ্যে ৫ জন পাস ও ৫ জন ফেল। আপনি প্রশ্ন করলেন: "ছাত্রের নাম 'ক' অক্ষর দিয়ে শুরু?" — এতে পাস/ফেল ভাগ হয়নি মোটেও! কিন্তু "পড়ার ঘণ্টা > ৫?" জিজ্ঞেস করলে হয়তো বেশিরভাগ পাস এক দিকে, বেশিরভাগ ফেল আরেক দিকে পড়বে। ভালো প্রশ্ন মানে এমন প্রশ্ন যা ডেটাকে সবচেয়ে পরিষ্কারভাবে ভাগ করে।

ভালো Split vs খারাপ Split

✅ ভালো Split: পড়ার ঘণ্টা > ৫? হ্যাঁ (বেশি পড়া) 🟢🟢🟢🟢 ৪ জন পাস, ০ জন ফেল না (কম পড়া) 🔴🔴🔴 ০ জন পাস, ৩ জন ফেল দুটো দল পরিষ্কার! দারুণ! ❌ খারাপ Split: বয়স > ২০? হ্যাঁ (বয়স বেশি) 🟢🔴🟢🔴 ২ পাস, ২ ফেল মিশ্রিত না (বয়স কম) 🟢🔴🔴 ১ পাস, ২ ফেল মিশ্রিত দুটো দলেই মিশ্রণ! খারাপ!

⚡ মূল নিয়ম

Decision Tree সর্বদা এমন প্রশ্ন/Feature বেছে নেয় যা ডেটাকে সবচেয়ে "পরিষ্কার" বা "বিশুদ্ধ" (Pure) গ্রুপে ভাগ করে। এই "পরিষ্কারের মাত্রা" পরিমাপ করা হয় Impurity দিয়ে।

06

Impurity বোঝা — বিশুদ্ধতা ও অবিশুদ্ধতা

⏱ ১৫ মিনিট  ·  Pure vs Impure

গল্প: ফলের বাক্স 🍎

কল্পনা করুন দুটো বাক্স। প্রথম বাক্সে শুধু আম। দ্বিতীয় বাক্সে আম, কলা, আপেল, লিচু একসাথে। প্রথম বাক্স Pure (বিশুদ্ধ) — একই ধরনের জিনিস। দ্বিতীয় বাক্স Impure (অবিশুদ্ধ) — মিশ্রণ। Decision Tree সবসময় বিশুদ্ধ বাক্স তৈরি করতে চায়।

বিশুদ্ধ (Pure) vs অবিশুদ্ধ (Impure) Node

✅ Pure Node (বিশুদ্ধ)

পাস, পাস, পাস, পাস
সবই একই শ্রেণী!

⚠️ Semi-Impure (আধা-অবিশুদ্ধ)

পাস, পাস, ফেল, পাস
বেশিরভাগ একই, একটু মিশ্রণ

❌ Impure (সম্পূর্ণ অবিশুদ্ধ)

পাস, ফেল, পাস, ফেল
সমান মিশ্রণ! সবচেয়ে খারাপ

📊 Impurity স্তর বোঝার টেবিল

Node-এর বিষয়বস্তুImpurity মাত্রাকতটা সমস্যা?
সব পাস: পাস, পাস, পাস, পাসশূন্য (০)কোনো সমস্যা নেই — এটাই লক্ষ্য!
৩ পাস + ১ ফেলকমসামান্য সমস্যা
২ পাস + ২ ফেলসর্বোচ্চসর্বোচ্চ সমস্যা — বলা কঠিন!
সব ফেল: ফেল, ফেল, ফেল, ফেলশূন্য (০)কোনো সমস্যা নেই — এটাও Pure!

🎯 সারাংশ

Decision Tree Split করার সময় এমন প্রশ্ন বেছে নেয় যা সবচেয়ে বেশি Impurity কমায়। যে Split-এর পরে দুটো গ্রুপ সবচেয়ে বেশি Pure হয়, সেই প্রশ্নই Root বা Internal Node হবে। এই "Impurity পরিমাপ" করা হয় দুটি পদ্ধতিতে — Gini ImpurityEntropy

07

Gini Impurity — পরিষ্কারের মাত্রা পরিমাপ

⏱ ১৫ মিনিট  ·  সবচেয়ে গুরুত্বপূর্ণ গণিত

💡 Gini Impurity কী?

Gini Impurity হলো একটি সংখ্যা (০ থেকে ১-এর মধ্যে) যা বলে দেয় একটি Node কতটা মিশ্রিত (অবিশুদ্ধ)।

০ মানে: সম্পূর্ণ Pure (সব একই শ্রেণী) → সেরা

০.৫ মানে: সর্বোচ্চ Impure (৫০-৫০ মিশ্রণ) → সবচেয়ে খারাপ

Gini = 1 − Σ(pᵢ)²
যেখানে pᵢ = প্রতিটি শ্রেণীর অনুপাত (proportion)

🧠 সহজ ভাষায়

প্রতিটি শ্রেণীর ভগ্নাংশ (মোটের মধ্যে কতটুকু) নিজেই নিজেকে গুণ করো, সবগুলো যোগ করো, তারপর ১ থেকে বাদ দাও।

📐 উদাহরণ ১: Pure Node — (পাস, পাস, পাস, পাস)

মোট = ৪, পাস = ৪, ফেল = ০

p(পাস) = ৪/৪ = 1.0  |  p(ফেল) = ০/৪ = 0.0

Gini = 1 − [(1.0)² + (0.0)²] = 1 − [1 + 0] = ০ (সম্পূর্ণ Pure!)

📐 উদাহরণ ২: সর্বোচ্চ Impure — (পাস, ফেল, পাস, ফেল)

মোট = ৪, পাস = ২, ফেল = ২

p(পাস) = ২/৪ = 0.5  |  p(ফেল) = ২/৪ = 0.5

Gini = 1 − [(0.5)² + (0.5)²] = 1 − [0.25 + 0.25] = ০.৫ (সর্বোচ্চ Impure!)

📐 উদাহরণ ৩: আধা-বিশুদ্ধ — (পাস, পাস, পাস, ফেল)

মোট = ৪, পাস = ৩, ফেল = ১

p(পাস) = ৩/৪ = 0.75  |  p(ফেল) = ১/৪ = 0.25

Gini = 1 − [(0.75)² + (0.25)²] = 1 − [0.5625 + 0.0625] = ০.৩৭৫ (মাঝারি)

Interactive Gini Calculator

Node-এ পাস/ফেল সংখ্যা বদলান — Gini তাৎক্ষণিক হিসাব হবে

0 Pure0.5 Max impure

📊 Gini Impurity সারসংক্ষেপ টেবিল

Node বিষয়বস্তুGini মানঅর্থ
সব পাস বা সব ফেল0.0সম্পূর্ণ Pure ✅
৩ পাস + ১ ফেল0.375মাঝারি মিশ্রণ
২ পাস + ২ ফেল0.5সর্বোচ্চ Impure ❌

💡 Decision Tree সবসময় এমন Split বেছে নেয় যা সন্তান Node-গুলোর weighted Gini সবচেয়ে কম রাখে।

08

Entropy ও Information Gain

⏱ ১০ মিনিট  ·  Beginner Level (ঐচ্ছিক)

উপমা: এলোমেলো ঘর vs গোছানো ঘর 🏠

একটি খুব এলোমেলো ঘর — বই, কাপড়, খাবার, জুতা সব এক জায়গায়। এই ঘর থেকে একটি বই খুঁজে পাওয়া কঠিন — Entropy বেশি। আরেকটি ঘর পরিষ্কার ও গোছানো — সব জিনিস নির্দিষ্ট জায়গায়। বই খুঁজে পাওয়া সহজ — Entropy কম। Decision Tree এলোমেলো ডেটাকে গোছানো গ্রুপে সাজাতে চায়।

📖 Entropy কী?

Entropy হলো একটি Node-এর অনিশ্চয়তা বা এলোমেলোপনার পরিমাপ। Gini-র মতোই, বেশি মিশ্রণ = বেশি Entropy। সম্পূর্ণ Pure Node-এর Entropy = ০।

Entropy = −Σ pᵢ × log₂(pᵢ)
যেখানে pᵢ = প্রতিটি শ্রেণীর অনুপাত, log₂ = ২-ভিত্তিক লগারিদম

📊 Information Gain কী?

Information Gain হলো একটি Split কতটা Entropy কমিয়েছে তার পরিমাপ। যে Split সবচেয়ে বেশি Information Gain দেয়, সেটাই সেরা Split।

Information Gain = Entropy(Parent) − Weighted Average Entropy(Children)

⚖️ Gini vs Entropy — তুলনা

বিষয়Gini ImpurityEntropy
Pure Node-এ মান00
সর্বোচ্চ মান0.5 (Binary)1.0 (Binary)
গণনার গতিদ্রুত (log নেই)ধীর (log হিসাব)
sklearn default✅ হ্যাঁcriterion='entropy' দিয়ে
ব্যবহারিক পার্থক্যসাধারণত খুব কম — দুটোই ভালো ফলাফল দেয়
09

Prediction কীভাবে হয়?

⏱ ৫ মিনিট  ·  নতুন ডেটার জন্য

🔮 নতুন ছাত্রের জন্য Prediction

Tree তৈরি হয়ে গেলে, নতুন ছাত্রের ডেটা দিলে তাকে প্রতিটি Node-এর প্রশ্নের মধ্য দিয়ে নিয়ে যাওয়া হয় যতক্ষণ না Leaf Node-এ পৌঁছায়।

উদাহরণ: রাজীব (পড়া=৬ঘণ্টা, উপস্থিতি=৮০%, আগের নম্বর=৬৫)

পড়া > ৪? রাজীব: ৬ ঘণ্টা ✓ হ্যাঁ! উপস্থিতি > ৭৫%? রাজীব: ৮০% ✓ হ্যাঁ! ✅ পাস! রাজীব পাস করবে (Leaf Node-এ পৌঁছানো) Root Node Internal Node Leaf Node রাজীব প্রতিটি প্রশ্নের উত্তর দিয়ে সিদ্ধান্তে পৌঁছাল → পাস!
10

Overfitting ও Underfitting

⏱ ১০ মিনিট  ·  সবচেয়ে বড় সমস্যা

গল্প: মুখস্থ করা ছাত্র 📚

একজন ছাত্র পরীক্ষার প্রস্তুতিতে প্রতিটি প্রশ্নের উত্তর হুবহু মুখস্থ করল। পরীক্ষায় একটু ভিন্ন ভাষায় প্রশ্ন এলে সে পারল না! এটাই Overfitting। Decision Tree খুব গভীর (Deep) হলে একই সমস্যা হয় — Training ডেটা মুখস্থ হয়ে যায়, নতুন ডেটায় ভুল করে।

🌲🌲🌲

খুব গভীর Tree

Training: ১০০%
Test: ৬০%
❌ Overfitting!

🌳

সঠিক গভীরতা

Training: ৯০%
Test: ৮৫%
✅ ভারসাম্যপূর্ণ!

🌱

খুব ছোট Tree

Training: ৬৫%
Test: ৬৩%
⚠️ Underfitting!

🔧 Overfitting নিয়ন্ত্রণের উপায়

Parameterকী করে?উদাহরণ
max_depthTree-র সর্বোচ্চ গভীরতা সীমিত করেmax_depth=3 → ৩ স্তরের বেশি যাবে না
min_samples_splitSplit করতে ন্যূনতম কত ডেটা দরকারmin_samples_split=5 → ৫টির কমে Split নেই
min_samples_leafপ্রতিটি Leaf Node-এ ন্যূনতম ডেটাmin_samples_leaf=3 → Leaf-এ কমপক্ষে ৩
11

সুবিধা ও অসুবিধা

⏱ ৫ মিনিট

✅ সুবিধা (Advantages)

  • সহজে বোঝা যায়: চোখ দিয়ে দেখা যায়
  • Feature Scaling নেই: KNN-এর মতো Scaling দরকার নেই
  • উভয় ডেটা: সংখ্যা ও শ্রেণী উভয় handle করে
  • Interpretable: ব্যবসার মানুষরাও বুঝতে পারেন
  • Feature Importance: কোন Feature গুরুত্বপূর্ণ বোঝা যায়

❌ অসুবিধা (Disadvantages)

  • Overfitting: গভীর Tree মুখস্থ করে
  • অস্থির: ডেটা একটু বদলালে Tree সম্পূর্ণ বদলায়
  • Biased: বেশি শ্রেণীর দিকে ঝোঁক থাকে
  • পেচানো সীমানা: XOR ধরনের সমস্যায় দুর্বল
12

Real-Life Applications

⏱ ৫ মিনিট
🏦

Banking

ঋণ অনুমোদন — আয়, সম্পদ ও ইতিহাস দেখে সিদ্ধান্ত

🏥

Healthcare

রোগ নির্ণয় — লক্ষণ ও পরীক্ষার ফলাফল দেখে

💳

Fraud Detection

অস্বাভাবিক লেনদেন ধরা — কোথায়, কত, কখন

📱

Customer Churn

কাস্টমার চলে যাবে কিনা — ব্যবহারের ধরন দেখে

📣

Marketing

কোন কাস্টমার কোন অফারে সাড়া দেবে

🌿

Agriculture

কোন মাটিতে কোন ফসল ভালো হবে

13

Google Colab কোডিং সেশন

⏱ লাইভ কোডিং  ·  ছাত্র পাস/ফেল Prediction

📋 আজকের Dataset ও লক্ষ্য

পড়ার ঘণ্টা, উপস্থিতি এবং আগের নম্বর দিয়ে Decision Tree তৈরি করব — Tree ভিজ্যুয়ালও দেখব!

ধাপ ১ — Library Import ও Dataset তৈরি
# প্রয়োজনীয় লাইব্রেরি
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))
Dataset তৈরি হয়েছে! study_hours attendance previous_marks pass_fail 0 1 40 30 0 1 2 50 40 0 2 2 45 35 0 3 3 55 45 0 4 4 60 50 0 5 4 70 55 1 6 5 65 60 0 7 5 75 58 1
📘 কোড ব্যাখ্যা:
DecisionTreeClassifier — Decision Tree-এর জন্য sklearn-এর ক্লাস
export_text — Text আকারে Tree দেখানোর জন্য
plot_tree — চিত্র আকারে Tree দেখানোর জন্য
matplotlib — চিত্র আঁকার লাইব্রেরি
ধাপ ২ — Feature ও Target আলাদা করা + Split
# 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)
Training: (16, 3) | Testing: (4, 3)
📘 কোড ব্যাখ্যা:
• Decision Tree-এ Feature Scaling লাগে না! KNN-এর মতো Distance হিসাব করে না।
• ৮০% Training, ২০% Testing ডেটা
⚠ গুরুত্বপূর্ণ: Decision Tree-এ Feature Scaling লাগে না — এটি Decision Tree-এর একটি বড় সুবিধা! KNN বা Logistic Regression-এর মতো Scaling করার দরকার নেই।
ধাপ ৩ — Decision Tree Model Train করা
# 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()}")
✅ Decision Tree Training সম্পন্ন! Tree-এর গভীরতা: 3 Leaf Node সংখ্যা: 5
📘 কোড ব্যাখ্যা:
max_depth=3 → Tree ৩ স্তরের বেশি গভীর হবে না — Overfitting রোধ
criterion='gini' → Gini Impurity দিয়ে সেরা Split বেছে নেবে
get_depth() → Tree কতটা গভীর হয়েছে
get_n_leaves() → কতটি Leaf Node আছে
ধাপ ৪ — Tree দেখা (Text আকারে)
# 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)
🌳 Decision Tree Rules: |--- study_hours <= 4.50 | |--- attendance <= 67.50 | | |--- class: 0 (ফেল) | | |--- class: 0 (ফেল) | |--- attendance > 67.50 | | |--- class: 1 (পাস) |--- study_hours > 4.50 | |--- attendance <= 77.50 | | |--- class: 1 (পাস) | |--- attendance > 77.50 | | |--- class: 1 (পাস)
📘 কোড ব্যাখ্যা:
• এটি Tree-র Text সংস্করণ — প্রতিটি প্রশ্ন এবং উত্তর দেখা যাচ্ছে
|--- মানে একটি গভীর স্তর
• মডেল নিজেই বেছে নিয়েছে: প্রথম প্রশ্ন study_hours <= 4.5
ধাপ ৫ — Tree চিত্র আকারে দেখা
# 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 চিত্র সংরক্ষণ হয়েছে!")
✅ Tree চিত্র সংরক্ষণ হয়েছে! [একটি রঙিন Decision Tree চিত্র দেখাবে — নীল রং = ফেল, কমলা রং = পাস, প্রতিটি Node-এ Gini Impurity দেখাবে]
📘 কোড ব্যাখ্যা:
filled=True → রঙ দিয়ে শ্রেণী চেনানো হবে
rounded=True → গোলাকার বাক্স দেখাবে
class_names → শ্রেণীর নাম দেখাবে
ধাপ ৬ — Prediction ও Evaluation
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=['ফেল', 'পাস']))
Predicted: [1 0 1 1] Actual: [1 0 1 1] ✅ Accuracy: 100.00% 📊 Classification Report: precision recall f1-score support ফেল 1.00 1.00 1.00 1 পাস 1.00 1.00 1.00 3 accuracy 1.00 4
ধাপ ৭ — Feature Importance দেখা
# কোন 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: study_hours: 0.7823 (78.2%) attendance: 0.1654 (16.5%) previous_marks: 0.0523 (5.2%)
📘 কোড ব্যাখ্যা:
• Feature Importance দেখায় কোন প্রশ্ন Impurity সবচেয়ে বেশি কমিয়েছে
• পড়ার ঘণ্টা (৭৮.২%) সবচেয়ে গুরুত্বপূর্ণ — Tree-র Root Node হয়েছে
• এটি Decision Tree-এর বিশেষ সুবিধা — অন্য Algorithm এটা সহজে দেয় না!
ধাপ ৮ — বিভিন্ন Max Depth পরীক্ষা
# বিভিন্ন 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%}")
Max Depth | Train Accuracy | Test Accuracy --------------------------------------------- 1 | 75.00% | 75.00% 2 | 93.75% | 100.00% 3 | 100.00% | 100.00% 4 | 100.00% | 100.00% 5 | 100.00% | 100.00% None | 100.00% | 100.00%
📘 কোড ব্যাখ্যা:
• Depth=1 → Underfitting: Train এও ভালো করছে না
• Depth=None → Unlimited: Training Data মুখস্থ হয় (Overfitting ঝুঁকি)
• এই ছোট Dataset-এ depth=2 বা 3-ই যথেষ্ট
⚠ বাস্তব সতর্কতা: বড় Dataset-এ max_depth=None (unlimited) দিলে Training Accuracy ১০০% হলেও Test Accuracy ৬০-৭০% হয়ে যেতে পারে। সবসময় Test Accuracy দেখুন।
14

Model Evaluation — মডেল মূল্যায়ন

⏱ বিস্তারিত মূল্যায়ন

Confusion Matrix — সিদ্ধান্তের ম্যাট্রিক্স

Predicted: পাস (1)
Predicted: ফেল (0)
Actual: পাস (1)
TP
True Positive
আসলে পাস ✅
বলেছি পাস
FN
False Negative
আসলে পাস ❌
বলেছি ফেল
Actual: ফেল (0)
FP
False Positive
আসলে ফেল ❌
বলেছি পাস
TN
True Negative
আসলে ফেল ✅
বলেছি ফেল

📊 Evaluation Metrics

Metricসূত্রসহজ ভাষায়কখন গুরুত্বপূর্ণ?
Accuracy(TP+TN)/Totalসব মিলিয়ে কতটা সঠিক?সাধারণ সমস্যায়
PrecisionTP/(TP+FP)পাস বলা জনের মধ্যে কতজন সত্যিই পাস?Spam Detection
RecallTP/(TP+FN)আসল পাস-এর মধ্যে কতজন ধরা গেল?রোগ নির্ণয়
F1 Score2×(P×R)/(P+R)Precision ও Recall-এর সামঞ্জস্যImbalanced Data
15

অন্যান্য Algorithm-এর সাথে তুলনা

⏱ তুলনামূলক বিশ্লেষণ

⚖️ Decision Tree vs Logistic Regression

বিষয়Decision TreeLogistic Regression
Decision Boundaryআয়তাকার বাক্স (Step-like)মসৃণ সরল রেখা
Feature Scalingদরকার নেইসাধারণত কম জরুরি
Interpretabilityখুব সহজ (Tree দেখা যায়)মাঝারি (Coefficients)
Non-linear সম্পর্কভালো handle করেদুর্বল (Linear ধরে নেয়)
Overfitting ঝুঁকিবেশি (গভীর Tree)কম

⚖️ Decision Tree vs KNN

বিষয়Decision TreeKNN
Trainingআছে (Tree তৈরি)নেই (Lazy Learning)
Prediction গতিঅনেক দ্রুতধীর (সব ডেটায় Distance)
Feature Scalingদরকার নেইবাধ্যতামূলক
ব্যাখ্যাযোগ্যতাসর্বোচ্চ (Tree দেখা যায়)মাঝারি
বড় Datasetভালোখুব ধীর

⚖️ Decision Tree vs Linear Regression

বিষয়Decision TreeLinear Regression
মূল কাজClassification (ও Regression)শুধু Regression (সংখ্যা)
Non-linear সম্পর্কসহজে handle করেশুধু Linear সম্পর্ক
Outputশ্রেণী (Class)সংখ্যা

🎯 কোনটা কখন বেছে নেবেন?

ব্যাখ্যাযোগ্য ফলাফল দরকার → Decision Tree সহজ ও দ্রুত Classification → Logistic Regression ছোট Dataset, জটিল Pattern → KNN সংখ্যা predict করতে → Linear Regression
16

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-এ মূল্যায়ন করুন।

17

Revision — পুনরাবৃত্তি ও MCQ

⏱ সারসংক্ষেপ · Viva · MCQ · Homework

⚡ Quick Revision Chips

Root Node = প্রথম ও সেরা প্রশ্ন Leaf Node = চূড়ান্ত সিদ্ধান্ত Gini = Impurity পরিমাপ Gini=0 → Pure Node max_depth → Overfitting রোধ Scaling দরকার নেই! Entropy = অনিশ্চয়তা পরিমাপ

🎤 Viva Questions (ক্লিক করলে উত্তর দেখবে)

Q1: Decision Tree-এ Root Node কীভাবে নির্বাচন হয়?
যে Feature (প্রশ্ন) সবচেয়ে বেশি Impurity কমায় (সবচেয়ে বেশি Information Gain দেয়, বা সবচেয়ে কম Gini Impurity তৈরি করে) সেটিই Root Node হয়। মডেল প্রতিটি Feature-এর Gini/Entropy হিসাব করে সেরাটি বেছে নেয়।
Q2: Gini Impurity ০ মানে কী?
Gini = ০ মানে সেই Node সম্পূর্ণ Pure — অর্থাৎ সেই Node-এ সব ডেটা একই শ্রেণীর (সব পাস বা সব ফেল)। এটা Decision Tree-এর সেরা অবস্থা।
Q3: Overfitting কী এবং Decision Tree-এ কীভাবে রোধ করবেন?
Overfitting হলো যখন মডেল Training ডেটা মুখস্থ করে ফেলে — Training-এ ভালো করে কিন্তু নতুন ডেটায় খারাপ করে। Decision Tree-এ max_depth, min_samples_split, min_samples_leaf দিয়ে Tree-র বৃদ্ধি সীমিত করে Overfitting রোধ করা যায়।
Q4: Decision Tree-এ Feature Scaling কেন দরকার নেই?
Decision Tree Threshold ভিত্তিক সিদ্ধান্ত নেয় (যেমন: পড়া > ৫ ঘণ্টা?)। এটি কখনো দুটো Feature-এর মান একসাথে গাণিতিকভাবে তুলনা করে না। তাই Scale-এর কোনো প্রভাব নেই। KNN-এর বিপরীতে যেটি Distance হিসাব করে।
Q5: Entropy ও Gini Impurity-এর পার্থক্য কী?
দুটোই Node-এর অবিশুদ্ধতা পরিমাপ করে। Gini হিসাব দ্রুত (log ব্যবহার করে না) এবং sklearn-এর default। Entropy log₂ ব্যবহার করে ধীর কিন্তু তাত্ত্বিকভাবে আরও সূক্ষ্ম। ব্যবহারিক পার্থক্য খুবই কম।

📝 MCQ — Multiple Choice Questions

1. Decision Tree-এ সবচেয়ে প্রথম প্রশ্নের Node-কে কী বলে?
  • Leaf Node
  • Internal Node
  • Root Node
  • Branch Node
2. Gini Impurity-র মান কত হলে Node সম্পূর্ণ বিশুদ্ধ (Pure)?
  • 1
  • 0.5
  • 0
  • -1
3. Decision Tree-এ Overfitting রোধ করার জন্য কোন Parameter ব্যবহার করা হয়?
  • n_neighbors
  • learning_rate
  • max_depth
  • C
4. sklearn-এ Decision Tree-এর default Split criterion কোনটি?
  • entropy
  • gini
  • information_gain
  • variance
5. Decision Tree-এর চূড়ান্ত সিদ্ধান্ত কোন Node-এ থাকে?
  • Root Node
  • Internal Node
  • Leaf Node
  • Branch Node
6. Decision Tree-এ Feature Scaling করা কি বাধ্যতামূলক?
  • হ্যাঁ, সবসময়
  • শুধু সংখ্যার Feature-এ
  • না, দরকার নেই
  • শুধু Gini ব্যবহার করলে
7. যে Split সবচেয়ে বেশি Information Gain দেয়, তাকে কীভাবে বেছে নেওয়া হয়?
  • Random ভাবে
  • সর্বোচ্চ Impurity হ্রাস ঘটায় এমন Split
  • সর্বোচ্চ Entropy-তে
  • User manually বেছে দেয়

📚 Homework Assignment

  1. Google Colab খুলুন এবং আজকের সম্পূর্ণ Decision Tree কোড নিজে হাতে লিখুন।
  2. max_depth = 1, 2, 3, 4, 5, None দিয়ে Train ও Test Accuracy তুলনা করে একটি টেবিল বানান।
  3. criterion='entropy' দিয়ে Tree তৈরি করুন এবং criterion='gini'-র সাথে তুলনা করুন।
  4. Feature Importance বার চার্ট matplotlib দিয়ে আঁকুন।
  5. Kaggle-এ "Titanic Dataset" নামিয়ে Decision Tree দিয়ে বেঁচে থাকার সম্ভাবনা predict করুন।

💼 Interview Questions

#প্রশ্নমূল বিষয়
1Decision Tree কীভাবে সেরা Split বেছে নেয়?Gini/Entropy, Information Gain
2Decision Tree-এ Overfitting কীভাবে handle করবেন?Pruning, max_depth, min_samples
3Random Forest ও Decision Tree-এর পার্থক্য কী?Ensemble of Trees, Bagging
4Decision Tree Missing Value কীভাবে handle করে?Surrogate Splits
5Gini Impurity ও Entropy-র মধ্যে কোনটা ভালো?উভয়ই সমান কার্যকর, গতিতে পার্থক্য
6Decision Tree কি Regression-এও ব্যবহার হয়?DecisionTreeRegressor — Mean হিসাব করে

🎉 অভিনন্দন! আজকের ক্লাস সম্পন্ন!

আপনি আজ শিখেছেন: Classification সমস্যা, Decision Tree-এর গঠন, Gini Impurity, Entropy, Information Gain, Overfitting রোধ, Feature Importance এবং সম্পূর্ণ Python কোডিং!

✅ Tree Structure বোঝা গেছে ✅ Gini হিসাব শিখেছি ✅ Overfitting সম্পর্কে সচেতন

পরের ক্লাস: Random Forest — Decision Tree-এর শক্তিশালী রূপ 🌲🌲🌲