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

01

Unsupervised Learning — শিক্ষক ছাড়া শেখা

⏱ ১৫ মিনিট · Machine Learning-এর ধরন

গল্প: শিশুর শেখার পদ্ধতি 👶

একটি শিশু জীবনে প্রথমবার কুকুর দেখলো। মা বললেন — "এটা কুকুর।" পরেরবার আবার কুকুর দেখলে শিশু চিনতে পারে — এটা Supervised Learning। কিন্তু যদি শিশুকে হাজারটা ছবি দেওয়া হয় কোনো নাম না বলে, সে নিজেই লক্ষ্য করবে কিছু ছবি একই রকম — এটাই Unsupervised Learning!

🧠 Machine Learning-এর তিনটি ধরন

Machine Learning মানে হলো কম্পিউটারকে ডেটা দেখিয়ে শেখানো। এটা তিনভাবে হয়:

📊 তিনটি ধরনের তুলনা

ধরনলেবেল আছে?মানুষের মতো উদাহরণML উদাহরণ
🎓 Supervisedহ্যাঁশিক্ষক সঠিক উত্তর বলে দেনপাস/ফেল, Spam/Not Spam
🔍 Unsupervisedনানিজে খুঁজে খুঁজে বোঝাCustomer Segmentation, Clustering
🎮 Reinforcementপুরস্কার/শাস্তিখেলা খেলে শেখাChess AI, Robot Control

Supervised vs Unsupervised — দৃশ্যমান পার্থক্য

Supervised = লেবেল (পাস/ফেল) · Unsupervised = নিজে গ্রুপ খোঁজে

📊 Unsupervised Learning-এর বাস্তব উদাহরণ

সমস্যাডেটা কী?কী খুঁজি?ব্যবসায়িক লাভ
🛒 Customer Segmentationবয়স, আয়, কেনার ধরনএকই রকম কাস্টমার গ্রুপটার্গেটেড মার্কেটিং
🎬 Netflix Recommendationদেখার ইতিহাসএকই পছন্দের দর্শক গ্রুপসঠিক সুপারিশ
🛍️ Market Basket Analysisকেনার তালিকাএকসাথে কেনা পণ্যের গ্রুপপণ্য রাখার পরিকল্পনা
📰 Document Clusteringখবরের লেখাএকই বিষয়ের নিউজ গ্রুপস্বয়ংক্রিয় শ্রেণীবিভাগ
02

Clustering কী? — গ্রুপ করার শিল্প

⏱ ১৫ মিনিট

গল্প: বাজারের ফলওয়ালা 🍎🍌🍊

একজন ফলওয়ালা প্রতিদিন সকালে বাজারে আসেন। তিনি আমগুলো এক ঝুড়িতে, কলাগুলো আরেক ঝুড়িতে, আর কমলাগুলো তৃতীয় ঝুড়িতে রাখেন। কেউ শেখায়নি — তিনি নিজেই বুঝেছেন একই ধরনের ফল একসাথে রাখলে সুবিধা। এটাই Clustering!

📖 Clustering কী?

Clustering হলো ডেটার মধ্যে এমন গ্রুপ (Cluster) খুঁজে বের করা যেখানে একই গ্রুপের সদস্যরা একে অপরের কাছাকাছি (similar) এবং ভিন্ন গ্রুপের সদস্যরা দূরে দূরে (dissimilar)।

Mixed Data → Clustering → গ্রুপ আবিষ্কার

মিশ্র ডেটা K-Means Cluster আবিষ্কার Business Insight 🟣 প্রিমিয়াম কাস্টমার 🟡 মধ্যম শ্রেণী 🟢 সাশ্রয়ী

🎯 Clustering কেন গুরুত্বপূর্ণ?

একই রকম গ্রুপ খোঁজা লেবেল ছাড়া শেখা Hidden Pattern আবিষ্কার Marketing কৌশল Anomaly Detection Data Compression
03

K-Means Clustering কী?

⏱ ১৫ মিনিট · নামের অর্থ ও মূল ধারণা

গল্প: মলের ম্যানেজারের সমস্যা 🏪

একটি শপিং মলের ম্যানেজার সোহেল সাহেব ৫০০০ কাস্টমারকে কিছু দলে ভাগ করতে চান — যাতে প্রতিটি দলের জন্য আলাদা অফার দেওয়া যায়। কিন্তু কাকে কোন দলে রাখবেন? K-Means এই কাজটাই করে — বয়স, আয়, খরচের স্বভাব দেখে কাস্টমারদের স্বাভাবিক দলে ভাগ করে দেয়!

📖 K-Means কী এবং নামটির অর্থ

K = কতটি দল/গ্রুপ (Cluster) বানাতে চাই। K=3 মানে ৩টি গ্রুপ।

Means = গড় (Mean)। প্রতিটি Cluster-এর কেন্দ্র (Centroid) হলো সেই Cluster-এর সব পয়েন্টের গড়।

K-Means = এমন একটি Algorithm যা ডেটাকে K-টি দলে ভাগ করে, যেখানে প্রতিটি দলের কেন্দ্র হলো সেই দলের গড়।

📊 K-এর মান কীভাবে বোঝায়?

K মানমানেCustomer Segmentation-এ
K=2২টি গ্রুপPremium vs Budget
K=3৩টি গ্রুপHigh / Middle / Low Income
K=4৪টি গ্রুপYoung Rich / Old Rich / Young Poor / Old Poor

K=3 সহ Customer Segmentation — আদর্শ উদাহরণ

বার্ষিক আয় → বয়স → 🔴 গ্রুপ A 🟣 গ্রুপ B 🟢 গ্রুপ C ▲ = Centroid (কেন্দ্র) | বৃত্তের রেখা = Cluster সীমানা
04

K-Means কীভাবে কাজ করে — ধাপে ধাপে

⏱ ২৫ মিনিট · সম্পূর্ণ Algorithm

🔄 K-Means-এর ৬টি ধাপ

K-Means একটি পুনরাবৃত্তিমূলক (Iterative) Algorithm। এটি বারবার একই ধাপ চালায় যতক্ষণ না Centroid-গুলো স্থির হয়ে যায়।

K নির্ধারণ করুন

আমরা ঠিক করি — কতটি দল (Cluster) বানাতে চাই। যেমন K=3 মানে ৩টি দল।

K-টি Centroid এলোমেলোভাবে বসানো

ডেটার মধ্যে K-টি এলোমেলো বিন্দু বেছে নেওয়া হয় — এগুলোই প্রথম Centroid (কেন্দ্রবিন্দু)।

প্রতিটি ডেটা পয়েন্টের দূরত্ব হিসাব

প্রতিটি ডেটা পয়েন্ট থেকে সব K-টি Centroid-এর দূরত্ব পরিমাপ করা হয় Euclidean Distance দিয়ে।

নিকটতম Centroid-এ নিযুক্ত করা

প্রতিটি পয়েন্ট যে Centroid-এর সবচেয়ে কাছে, সেই Cluster-এ যোগ দেয়।

নতুন Centroid হিসাব করা

প্রতিটি Cluster-এর সব পয়েন্টের গড় (Mean) বের করে নতুন Centroid নির্ধারণ করা হয়।

Convergence পর্যন্ত পুনরাবৃত্তি

ধাপ ৩-৫ বারবার চলে যতক্ষণ না Centroid আর নড়ে না (Convergence)। তখনই চূড়ান্ত Cluster পাওয়া যায়।

✅ Algorithm Step Checklist (ক্লিক করে টিক দিন)

K-Means ML Pipeline — Step by Step
পরের ধাপ চাপুন · K slider বদলান · Iteration ৪-এ "পরের iteration" চাপুন
Kনির্ধারণ
InitCentroids
Assignlabel
Updatemean
Repeatiterate
Segmentdone
সব চিহ্ন এক নজরে (Math Dictionary)
চিহ্ননামকী করেউদাহরণ
KCluster সংখ্যাকতটি গ্রুপ বানাবেনK=3
CCentroidCluster-এর কেন্দ্রবিন্দু (গড়)C₀ = (25, 75)
dEuclidean Distanceদুই point কতটা কাছাকাছি√[(Δx)²+(Δy)²]
label(i)Cluster Assignmentpoint i কোন cluster-এargmin_j d(i,j)
WCSSWithin-Cluster SSভেতরের বিশৃঙ্খলা — যত কম তত ভালোΣ d²
meanগড়নতুন centroid = cluster-এর গড়(Σx/n, Σy/n)
Centroid markerCanvas-এ ত্রিভুজ = centroidফ্যাদাফুল = পুরনো
ধাপ ১: K নির্ধারণ K=৩ — এলোমেলো centroid
ধাপ1 / 6
WCSS
Iteration
Sizes
05

Mathematical Intuition — দূরত্ব ও গড়

⏱ ১৫ মিনিট · Euclidean Distance

গল্প: মানচিত্রে দূরত্ব 🗺️

ঢাকা থেকে চট্টগ্রামের দূরত্ব মাপতে হলে সোজা রেখায় দূরত্ব মাপা হয়। K-Means-ও ঠিক এভাবে দুটো ডেটা পয়েন্টের মধ্যে "সোজা রেখার দূরত্ব" মাপে — এটাই Euclidean Distance

Euclidean Distance = √[(x₂ - x₁)² + (y₂ - y₁)²]
x₁,y₁ = প্রথম বিন্দু | x₂,y₂ = দ্বিতীয় বিন্দু | √ = বর্গমূল

🧮 হাতে-কলমে দূরত্ব হিসাব

কাস্টমার A: (বয়স=25, আয়=40) | Centroid C1: (বয়স=20, আয়=35)

Distance = √[(25-20)² + (40-35)²] = √[25 + 25] = √50 ≈ 7.07

কাস্টমার A: (25, 40) | Centroid C2: (50, 80)

Distance = √[(25-50)² + (40-80)²] = √[625 + 1600] = √2225 ≈ 47.17

C1-এর দূরত্ব কম → কাস্টমার A, Cluster 1-এ যাবে ✅

🧮 Interactive Distance Calculator

Slider বদলান — দূরত্ব ও বিজয়ী cluster তাৎক্ষণিক দেখুন

d(C1) = 7.07 · d(C2) = 47.17
বিজয়ী: Cluster 1 (C1)

📐 Centroid কীভাবে হিসাব হয়?

Centroid হলো একটি Cluster-এর সব পয়েন্টের গড় (Mean)

পয়েন্টবয়স (x)আয় (y)
কাস্টমার ১2540
কাস্টমার ২3050
কাস্টমার ৩2030
নতুন Centroid(25+30+20)/3 = 25(40+50+30)/3 = 40

সুতরাং নতুন Centroid = (25, 40)

06

সঠিক K নির্বাচন — Elbow Method

⏱ ২০ মিনিট · WCSS ও Elbow

গল্প: বই কতটি তাকে সাজাব? 📚

আপনার কাছে ১০০টি বই আছে। ১টি তাকে রাখলে — সব একসাথে, খোঁজা কঠিন। ১০০টি তাকে রাখলে — প্রতিটি বই এক তাকে, জায়গার অপচয়। সঠিক সংখ্যাটা মাঝামাঝি কোথাও — হয়তো ৫-৭টি তাক। K-Means-ও ঠিক এভাবে সঠিক K খোঁজে!

📐 WCSS কী?

WCSS (Within-Cluster Sum of Squares) হলো প্রতিটি Cluster-এর ভেতরে, প্রতিটি পয়েন্ট থেকে তার Centroid-এর দূরত্বের বর্গের সমষ্টি।

WCSS যত কম → Cluster গুলো তত আঁটসাঁট ও ভালো।

Elbow Method — Interactive WCSS vs K

K=3 এ elbow — এর পরে WCSS ধীরে কমে।

KWCSSউন্নতিসিদ্ধান্ত
K=315966ELBOW — সেরা K!

📊 K মান পরিবর্তনে WCSS কী হয়?

K মানWCSSউন্নতিসিদ্ধান্ত
K=18000সব একটা Cluster — অর্থহীন
K=24200৩৮০০ কমেছেঅনেক উন্নতি
K=32100২১০০ কমেছে✅ ELBOW — সেরা!
K=41800মাত্র ৩০০ কমেছেসামান্য উন্নতি
K=51700মাত্র ১০০ কমেছেজটিলতা বাড়ছে
07

সুবিধা ও সীমাবদ্ধতা

⏱ ১০ মিনিট

✅ সুবিধা (Advantages)

  • সহজ ও বোঝা যায়: ধাপগুলো সরল
  • দ্রুত: বড় Dataset-এও কার্যকর
  • নমনীয়: K পরিবর্তন করে সহজে মানিয়ে নেওয়া যায়
  • Scalable: লক্ষ লক্ষ ডেটায়ও ভালো কাজ করে

❌ সীমাবদ্ধতা (Disadvantages)

  • K আগে বলতে হবে: সঠিক K না জানলে সমস্যা
  • Outlier-sensitive: একটা অস্বাভাবিক পয়েন্ট Centroid সরিয়ে দেয়
  • Initialization-sensitive: এলোমেলো শুরু ভুল ফলাফল দিতে পারে
  • গোলাকার Cluster: অদ্ভুত আকৃতির Cluster বুঝতে পারে না

K-Means কখন ব্যর্থ হয় — Interactive

Outlier centroid টেনে সরিয়ে দেয় — cluster ভুল হয়

স্ট্যাটিক রেফারেন্স — তিনটি কেস

❌ Outlier সমস্যা Outlier! Centroid টেনে সরে গেছে ❌ অদ্ভুত আকার চাঁদ আকারে K-Means ব্যর্থ ❌ ভুল K মান K=2 দিলে ভুল ভাগ!
08

Real-Life Applications

⏱ ১০ মিনিট
🛒

Customer Segmentation

কাস্টমারদের আচরণ অনুযায়ী গ্রুপ করে টার্গেটেড মার্কেটিং

🎬

Recommendation System

একই রুচির ব্যবহারকারীদের গ্রুপ করে ভালো সুপারিশ

🖼️

Image Compression

একই রকম রঙ একসাথে রেখে ছবির আকার কমানো

💳

Fraud Detection

অস্বাভাবিক লেনদেনের প্যাটার্ন (Anomaly) আলাদা Cluster-এ

📱

Social Media Grouping

একই ধরনের পোস্ট দেওয়া ব্যবহারকারীর গ্রুপ

📄

Document Clustering

একই বিষয়ের নিউজ বা ডকুমেন্ট আলাদা Cluster-এ

09

Feature Scaling — কেন বাধ্যতামূলক?

⏱ ১০ মিনিট

গল্প: দাঁড়িপাল্লায় হাতি ও মুরগি 🐘🐔

একটি দাঁড়িপাল্লায় একদিকে ১০০ কেজির হাতি, আরেকদিকে ৫ কেজির মুরগি। হাতি সবসময় ভারী দিক — মুরগি প্রায় উপেক্ষিত। K-Means-এও যদি আয় (১,০০,০০০ টাকা) আর বয়স (২৫) একসাথে দেওয়া হয়, আয়ের বিশাল সংখ্যা দূরত্ব হিসাবে সব দখল করে নেয়!

🧮 Scaling ছাড়া সমস্যার উদাহরণ

Featureব্যক্তি Aব্যক্তি Bপার্থক্য
বয়স25305
আয় (টাকা)1,00,0001,50,00050,000
Distance = √[(5)² + (50000)²] = √[25 + 2,500,000,000] ≈ 50,000

⚠️ বয়সের পার্থক্য (5) হারিয়ে গেছে! শুধু আয় দিয়েই Cluster হচ্ছে!

📐 Standardization (Z-score)

গড় বাদ দিয়ে Standard Deviation দিয়ে ভাগ করা।

z = (x − mean) / std

সব Feature একই "গড় ০, বিচ্যুতি ১" স্কেলে আসে।

📐 Min-Max Scaling

সব মান ০ থেকে ১-এর মধ্যে নিয়ে আসা।

x' = (x − min) / (max − min)

সব Feature 0 থেকে 1 এর মধ্যে থাকে।

⚖️ Scaling OFF vs ON — Clustering পার্থক্য

Scaling OFF — আয় দূরত্ব দখল করে

Scaling ON — balanced clusters

বাম: Scaling OFF — আয় দূরত্ব দখল করে · ডান: Scaling ON — balanced clusters

10

Google Colab কোডিং সেশন

⏱ Mall Customer Dataset · সম্পূর্ণ Pipeline

📋 আজকের Project: Mall Customer Segmentation

একটি শপিং মলের কাস্টমার ডেটা বিশ্লেষণ করব। বয়স, বার্ষিক আয় এবং Spending Score ব্যবহার করে কাস্টমারদের গ্রুপে ভাগ করব। Chip থেকে যেকোনো ধাপে jump করুন।

Colab — কোডে যেতে ক্লিক করুন

ধাপ ১ — Library ও Dataset
# প্রয়োজনীয় লাইব্রেরি
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score
import warnings
warnings.filterwarnings('ignore')
plt.style.use('seaborn-v0_8')
np.random.seed(42)

# Mall Customer Dataset তৈরি
n = 200
df = pd.DataFrame({
    'CustomerID':    range(1, n+1),
    'Age':           np.random.randint(18, 70, n),
    'Annual_Income': np.random.randint(15, 140, n),  # হাজার টাকায়
    'Spending_Score':np.random.randint(1,  100, n)
})
print("Dataset আকার:", df.shape)
print(df.head())
Dataset আকার: (200, 4) CustomerID Age Annual_Income Spending_Score 0 1 37 85 72 1 2 52 43 31 2 3 29 120 88 3 4 64 28 15 4 5 22 95 65
📘 কোড ব্যাখ্যা:
KMeans → K-Means Clustering-এর ক্লাস
StandardScaler → Feature Scaling (বাধ্যতামূলক!)
silhouette_score → Clustering মূল্যায়নের জন্য
EDA ১ — shape ও head()
print("Dataset আকার:", df.shape)
print(df.head())
Dataset আকার: (200, 4) CustomerID Age Annual_Income Spending_Score 0 1 37 85 72 1 2 52 43 31 2 3 29 120 88 3 4 64 28 15 4 5 22 95 65
📘 কোড ব্যাখ্যা:
shape → কত সারি, কত কলাম
head() → প্রথম ৫ সারি sample দেখুন
EDA ২ — Missing Value চেক
print(df.isnull().sum())
print("\nDuplicate rows:", df.duplicated().sum())
CustomerID 0 Age 0 Annual_Income 0 Spending_Score 0 dtype: int64 Duplicate rows: 0
📘 কোড ব্যাখ্যা:
• Clustering-এর আগে missing value থাকলে ঠিক করতে হবে
• সব 0 মানে ডেটা পরিষ্কার ✅
EDA ৩ — describe() Summary
print(df.describe().round(2))
Age Annual_Income Spending_Score count 200 200.00 200.00 mean 38.5 77.50 50.20 std 13.2 36.20 28.80 min 18.0 15.00 1.00 max 69.0 140.00 99.00
📘 কোড ব্যাখ্যা:
• mean, std, min, max এক নজরে — scaling দরকার কিনা বোঝা যায়
EDA ৪ — Scatter Plot (Clustering Prep)
# Scatter Plot: আয় vs Spending Score
plt.figure(figsize=(10, 5))
plt.subplot(1,2,1)
plt.scatter(df['Annual_Income'], df['Spending_Score'],
            color='#534AB7', alpha=0.7, s=50)
plt.xlabel('বার্ষিক আয় (হাজার)')
plt.ylabel('Spending Score')
plt.title('Clustering আগে — Unlabeled')

plt.subplot(1,2,2)
plt.scatter(df['Age'], df['Spending_Score'],
            color='#993C1D', alpha=0.7, s=50)
plt.xlabel('বয়স')
plt.ylabel('Spending Score')
plt.title('বয়স vs Spending')
plt.tight_layout()
plt.show()
[দুটো Scatter Plot — কোনো রঙিন গ্রুপ নেই, সব একরঙা — Clustering-এর আগের অবস্থা]
📘 কোড ব্যাখ্যা:
• EDA-তে আগে ডেটা দেখি — কোনো গ্রুপ খালি চোখে বোঝা যাচ্ছে কিনা
• subplot(1,2,1) → একটি চিত্রে দুটো গ্রাফ পাশাপাশি
ধাপ ৩ — Feature Scaling (বাধ্যতামূলক!)
# Clustering-এর জন্য Feature বেছে নেওয়া
X = df[['Annual_Income', 'Spending_Score']]

# Scaling করার আগে ও পরে তুলনা
print("Scaling-এর আগে:")
print(X.describe().round(2))

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

print("\nScaling-এর পরে (প্রথম ৫ সারি):")
print(pd.DataFrame(X_scaled, columns=X.columns).head().round(3))
Scaling-এর আগে: Annual_Income Spending_Score count 200.0 200.0 mean 77.5 50.2 std 36.2 28.8 min 15.0 1.0 max 140.0 99.0 Scaling-এর পরে: Annual_Income Spending_Score 0 0.207 0.756 1 -0.953 -0.667 2 1.174 1.315 3 -1.370 -1.225 4 0.484 0.513
📘 কোড ব্যাখ্যা:
• Scaling-এর আগে Annual_Income: 15-140, Spending_Score: 1-99 (ভিন্ন পরিসর)
• Scaling-এর পরে উভয়ই একই পরিসরে (গড়≈0, std≈1)
⚠ সবচেয়ে বড় ভুল: Feature Scaling ছাড়া K-Means চালানো। বেশি মানের Feature সব Clustering নিয়ন্ত্রণ করে।
ধাপ ৪ — Elbow Method: সেরা K খোঁজা
# WCSS হিসাব করি K=1 থেকে K=10
wcss = []
for k in range(1, 11):
    km = KMeans(n_clusters=k, random_state=42, n_init=10)
    km.fit(X_scaled)
    wcss.append(km.inertia_)
    print(f"K={k}: WCSS={km.inertia_:.2f}")

# Elbow Curve
plt.figure(figsize=(9, 5))
plt.plot(range(1, 11), wcss,
         marker='o', linewidth=2.5,
         color='#534AB7', markerfacecolor='#E24B4A', markersize=9)
plt.axvline(x=3, color='#E24B4A', linestyle='--', linewidth=2,
            label='Elbow Point (K=3)')
plt.xlabel('K (Cluster সংখ্যা)', fontsize=12)
plt.ylabel('WCSS', fontsize=12)
plt.title('Elbow Method — সেরা K নির্বাচন', fontsize=14)
plt.xticks(range(1, 11))
plt.legend()
plt.grid(True, alpha=0.4)
plt.tight_layout()
plt.show()
print("\n✅ Elbow দেখে বোঝা যাচ্ছে K=3 সেরা!")
K=1: WCSS=392.41 K=2: WCSS=225.17 K=3: WCSS=158.92 K=4: WCSS=120.34 K=5: WCSS=88.46 K=6: WCSS=82.15 K=7: WCSS=79.23 K=8: WCSS=77.81 K=9: WCSS=76.45 K=10: WCSS=75.90 ✅ Elbow দেখে বোঝা যাচ্ছে K=3 সেরা!
📘 কোড ব্যাখ্যা:
km.inertia_ → sklearn-এ WCSS-এর মান
• K=1 থেকে K=3 পর্যন্ত WCSS দ্রুত কমছে, তারপর ধীরে
ধাপ ৫ — K-Means Training (K=3)
# K=3 দিয়ে K-Means মডেল Train
km3 = KMeans(n_clusters=3, random_state=42, n_init=10)
df['Cluster'] = km3.fit_predict(X_scaled)

print("✅ Clustering সম্পন্ন!")
print("\nCluster Distribution:")
print(df['Cluster'].value_counts().sort_index())

print("\nCentroid অবস্থান (Scaled):")
print(pd.DataFrame(km3.cluster_centers_,
      columns=['Annual_Income','Spending_Score']).round(3))
✅ Clustering সম্পন্ন! Cluster Distribution: 0 68 1 66 2 66 dtype: int64 Centroid অবস্থান (Scaled): Annual_Income Spending_Score 0 -0.921 0.881 1 0.854 -0.745 2 0.101 0.124
📘 কোড ব্যাখ্যা:
fit_predict() → Training ও Cluster নির্ধারণ একসাথে
cluster_centers_ → প্রতিটি Cluster-এর Centroid অবস্থান
• K=3 — তিনটি স্পষ্ট customer segment
ধাপ ৬ — Cluster Visualization
# Cluster চিত্র
colors = ['#534AB7','#E24B4A','#3B6D11']
labels = ['Low Income High Spender', 'High Income Low Spender',
           'Average Customer']

plt.figure(figsize=(10, 6))
for i in range(3):
    mask = df['Cluster'] == i
    plt.scatter(df[mask]['Annual_Income'],
                df[mask]['Spending_Score'],
                c=colors[i], label=labels[i], s=60, alpha=0.8)

# Centroid গুলো দেখানো
centroids_orig = scaler.inverse_transform(km3.cluster_centers_)
plt.scatter(centroids_orig[:,0], centroids_orig[:,1],
            marker='*', s=300, c='black', zorder=5, label='Centroids')

plt.xlabel('বার্ষিক আয় (হাজার টাকা)', fontsize=12)
plt.ylabel('Spending Score', fontsize=12)
plt.title('Mall Customer Segmentation — K=3', fontsize=14)
plt.legend(bbox_to_anchor=(1.05,1), loc='upper left', fontsize=10)
plt.tight_layout()
plt.show()
[রঙিন Scatter Plot — ৩টি রঙিন Cluster, কালো ★ Centroid চিহ্নিত]
📘 কোড ব্যাখ্যা:
inverse_transform() → Scaled Centroid-কে আসল স্কেলে ফেরানো
marker='*' → Centroid-কে তারা চিহ্নে দেখানো
zorder=5 → Centroid সব পয়েন্টের উপরে থাকবে
✅ Business Insight: ★ দেখলে বোঝা যাচ্ছে — High Income High Spender গ্রুপে প্রিমিয়াম অফার, Low Income Low Spender-এ বাজেট ডিল দেওয়া উচিত!
ধাপ ৭ — Silhouette Score দিয়ে মূল্যায়ন
# Silhouette Score হিসাব
sil_score = silhouette_score(X_scaled, df['Cluster'])
print(f"✅ Silhouette Score: {sil_score:.4f}")
print("(১-এর কাছাকাছি মানে ভালো Clustering)")

# বিভিন্ন K-তে Silhouette Score তুলনা
print("\nK মান | Silhouette Score")
print("-" * 28)
for k in range(2, 9):
    km_t = KMeans(n_clusters=k, random_state=42, n_init=10)
    labels_t = km_t.fit_predict(X_scaled)
    sc = silhouette_score(X_scaled, labels_t)
    print(f"K={k}   | {sc:.4f}")
✅ Silhouette Score: 0.4812 (১-এর কাছাকাছি মানে ভালো Clustering) K মান | Silhouette Score ---------------------------- K=2 | 0.3812 K=3 | 0.4812 ← সর্বোচ্চ! K=4 | 0.4421 K=5 | 0.4123 K=6 | 0.3934 K=7 | 0.3689 K=8 | 0.3467
📘 কোড ব্যাখ্যা:
• Silhouette Score: -1 (খারাপ) থেকে +1 (চমৎকার)
• K=3-এ সর্বোচ্চ 0.48 → Elbow Method-এর সাথে মিলে গেছে ✅
11

Model Evaluation — Clustering কতটা ভালো?

⏱ ১০ মিনিট

📊 Clustering Evaluation Metrics

Metricসহজ ভাষায়ভালো মানPython
WCSS / Inertiaপ্রতিটি Cluster-এর ভেতরের "বিশৃঙ্খলা"যত কম তত ভালোkm.inertia_
Silhouette Scoreপ্রতিটি পয়েন্ট সঠিক Cluster-এ কতটা?+1-এর কাছাকাছিsilhouette_score()
Davies-Bouldin IndexCluster-গুলো পরস্পর থেকে কতটা আলাদা?যত কম তত ভালোdavies_bouldin_score()

💡 গুরুত্বপূর্ণ বিষয়

Supervised Learning-এ আমরা Accuracy, F1 Score দিয়ে মূল্যায়ন করি কারণ সঠিক উত্তর জানা থাকে। কিন্তু Unsupervised Learning-এ কোনো "সঠিক উত্তর" নেই! তাই আমরা Internal Metrics ব্যবহার করি — কতটা আঁটসাঁট (Compact) এবং কতটা আলাদা (Separated) Cluster হয়েছে।

Silhouette Score — Interactive K তুলনা

K=3: Silhouette = 0.48 — সর্বোচ্চ! Elbow-এর সাথে মিলে ✅

12

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

⏱ ১০ মিনিট

📊 K-Means vs অন্যান্য Algorithm

বিষয়K-MeansKNNHierarchicalDBSCAN
ধরনUnsupervisedSupervisedUnsupervisedUnsupervised
K আগে বলতে হবে?হ্যাঁহ্যাঁ (প্রতিবেশী)নানা
Outlier sensitivityবেশিবেশিমাঝারিকম (Noise হিসাবে)
গতি (Speed)দ্রুতধীরখুব ধীরমাঝারি
Cluster আকৃতিশুধু গোলাকারযেকোনোযেকোনোযেকোনো
Feature Scalingবাধ্যতামূলকবাধ্যতামূলকপ্রায়প্রায়
বড় Datasetভালোখুব ধীরঅনুপযুক্তমাঝারি

🎯 কোনটা কখন?

Customer Segmentation → K-Means Classification → KNN/Logistic অদ্ভুত আকারের Cluster → DBSCAN K অজানা, hierarchy দরকার → Hierarchical
13

Common Beginner Mistakes

⏱ সতর্কতা

❌ ভুল ১: Feature Scaling ভুলে যাওয়া

K-Means Distance-ভিত্তিক। Scaling ছাড়া বড় মানের Feature সব Clustering নিয়ন্ত্রণ করে। সমাধান: সবসময় StandardScaler বা MinMaxScaler।

❌ ভুল ২: Elbow না দেখে K বেছে নেওয়া

K=2 বা K=10 মনমতো বেছে নেওয়া। সমাধান: Elbow Method ও Silhouette Score দিয়ে K যাচাই করুন।

❌ ভুল ৩: Cluster Label-কে অর্থপূর্ণ মনে করা

K-Means Cluster 0, 1, 2 নম্বর দেয় — এই নম্বরের কোনো মানে নেই। আপনাকে ব্যাখ্যা করতে হবে কোনটা "High Spender"।

❌ ভুল ৪: Categorical ডেটায় K-Means

K-Means শুধু সংখ্যার ডেটায় কাজ করে। "শহর", "লিঙ্গ" সরাসরি দিলে ভুল হবে। সমাধান: One-Hot Encoding করুন।

❌ ভুল ৫: Outlier উপেক্ষা করা

একটি অস্বাভাবিক পয়েন্ট Centroid-কে টেনে সরিয়ে দেয়। সমাধান: EDA-তে Outlier দেখুন এবং প্রয়োজনে সরান।

❌ ভুল ৬: n_init কম রাখা

K-Means এলোমেলো শুরু করে — ভুল শুরু ভুল ফলাফল দিতে পারে। সমাধান: n_init=10 বা বেশি রাখুন যাতে সেরা initialization বেছে নেওয়া হয়।

14

End-to-End Manual Example — হাতে-কলমে

⏱ সম্পূর্ণ Iteration দেখানো

📊 ৮ কাস্টমারের ছোট Dataset (K=2)

কাস্টমারআয় (x)Spending (y)
A28
B37
C49
D82
E93
F71
G55
H64

🎲 ধাপ ১: এলোমেলো Centroid বেছে নিই

C1 = (2, 8) [A পয়েন্ট], C2 = (8, 2) [D পয়েন্ট]

📐 Iteration ১: দূরত্ব হিসাব

কাস্টমারC1=(2,8) পর্যন্ত দূরত্বC2=(8,2) পর্যন্ত দূরত্বনিযুক্ত Cluster
A(2,8)√[(2-2)²+(8-8)²]=0√[(2-8)²+(8-2)²]=√72≈8.49C1
B(3,7)√[(3-2)²+(7-8)²]=√2≈1.41√[(3-8)²+(7-2)²]=√50≈7.07C1
C(4,9)√[(4-2)²+(9-8)²]=√5≈2.24√[(4-8)²+(9-2)²]=√65≈8.06C1
D(8,2)√[(8-2)²+(2-8)²]=√72≈8.49√[(8-8)²+(2-2)²]=0C2
E(9,3)√[(9-2)²+(3-8)²]=√74≈8.60√[(9-8)²+(3-2)²]=√2≈1.41C2
F(7,1)√[(7-2)²+(1-8)²]=√74≈8.60√[(7-8)²+(1-2)²]=√2≈1.41C2
G(5,5)√[(5-2)²+(5-8)²]=√18≈4.24√[(5-8)²+(5-2)²]=√18≈4.24টাই → C1
H(6,4)√[(6-2)²+(4-8)²]=√32≈5.66√[(6-8)²+(4-2)²]=√8≈2.83C2

📐 নতুন Centroid হিসাব

Cluster 1 (A, B, C, G): নতুন C1 = ((2+3+4+5)/4, (8+7+9+5)/4) = (3.5, 7.25)

Cluster 2 (D, E, F, H): নতুন C2 = ((8+9+7+6)/4, (2+3+1+4)/4) = (7.5, 2.5)

✅ Iteration ২ পরে: Centroid প্রায় স্থির → Convergence!

Iteration ২-এ C1=(3.5, 7.25), C2=(7.5, 2.5)। এই দুটো Centroid দিয়ে আবার দূরত্ব হিসাব করলে Cluster একই থাকে — মানে Algorithm Converge করেছে!

চূড়ান্ত ফলাফল: Cluster 1 = {A, B, C, G} (High Spender), Cluster 2 = {D, E, F, H} (Low Spender)

15

Mini Business Project

⏱ সম্পূর্ণ Industry Workflow

ব্যবসার গল্প: Star Shopping Mall 🏪

"Star Shopping Mall" ঢাকার একটি বড় মল। Manager আসিফ সাহেব চান ৫০০ নিয়মিত কাস্টমারকে গ্রুপে ভাগ করতে — যাতে প্রতিটি গ্রুপের জন্য আলাদা Marketing কৌশল নেওয়া যায়। Data Scientist হিসেবে আপনার কাজ K-Means দিয়ে সেই গ্রুপ খোঁজা।

ব্যবসার সমস্যা বোঝা

লক্ষ্য: কাস্টমারদের বয়স, আয় ও Spending Score অনুযায়ী ৩টি গ্রুপে ভাগ করা।

EDA — ডেটা বোঝা

df.describe(), Missing Value চেক, Histogram, Scatter Plot আঁকা।

Feature Scaling

StandardScaler দিয়ে Annual_Income ও Spending_Score একই পরিসরে আনা।

Elbow Method

K=1 থেকে K=10 পর্যন্ত WCSS হিসাব করে Elbow খোঁজা → K=3 নির্বাচন।

K-Means Training

K=3 দিয়ে KMeans().fit_predict() → ৩টি Cluster Label পাওয়া।

Business Recommendations

প্রতিটি Cluster-এর গড় বৈশিষ্ট্য দেখে ব্যবসায়িক পরামর্শ দেওয়া।

📊 Business Cluster Analysis ফলাফল

Clusterআয়Spendingবয়সগ্রুপের নামMarketing কৌশল
🟣 C1কমবেশিতরুণImpulsive BuyerFlash Sale, EMI অফার
🔴 C2বেশিকমমধ্যবয়স্কConservative High EarnerPremium Product, সঞ্চয় অফার
🟢 C3কমকমবয়স্কBudget Consciousছাড়, Combo Deal
🟡 C4বেশিবেশিতরুণTarget Customer ★Loyalty Program, VIP সুবিধা
🔵 C5মাঝারিমাঝারিমাঝারিAverage CustomerSeasonal Offer, Newsletter
16

Revision, MCQ ও Interview Preparation

⏱ Quick Revision · MCQ · Top 25 Interview Q&A

⚡ Quick Revision Chips

K = Cluster সংখ্যা Means = গড় (Centroid) Unsupervised = কোনো লেবেল নেই Feature Scaling বাধ্যতামূলক! Elbow Method → সেরা K WCSS কম = ভালো Cluster Silhouette +1 = চমৎকার

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

Q1: K-Means-কে কেন "Unsupervised Learning" বলা হয়?
কারণ Training ডেটায় কোনো Label (পাস/ফেল, Spam/Not Spam) থাকে না। Algorithm নিজেই ডেটার প্যাটার্ন দেখে গ্রুপ (Cluster) তৈরি করে। মানুষের কোনো গাইডেন্স ছাড়াই শেখে।
Q2: K-Means Algorithm-এর ধাপগুলো বলুন।
১. K নির্বাচন → ২. K-টি এলোমেলো Centroid বসানো → ৩. প্রতিটি পয়েন্ট থেকে সব Centroid-এর দূরত্ব হিসাব → ৪. নিকটতম Centroid-এ নিযুক্ত করা → ৫. নতুন Centroid হিসাব (গড়) → ৬. Convergence পর্যন্ত ধাপ ৩-৫ পুনরাবৃত্তি।
Q3: Elbow Method কী এবং কীভাবে K নির্বাচন করা হয়?
Elbow Method-এ K=1 থেকে K=n পর্যন্ত WCSS হিসাব করে Graph আঁকা হয়। যেখানে WCSS-এর কমার হার হঠাৎ কমে যায় (হাঁটুর মতো বাঁক), সেই K-ই সর্বোত্তম। এর পরে K বাড়ালে সামান্য উন্নতি হয় কিন্তু জটিলতা বাড়ে।
Q4: K-Means-এ Feature Scaling কেন বাধ্যতামূলক?
K-Means Euclidean Distance হিসাব করে। যদি একটি Feature-এর মান অনেক বড় হয় (যেমন আয় = ১,০০,০০০), সে একাই দূরত্ব নিয়ন্ত্রণ করে এবং অন্য Feature (যেমন বয়স = ২৫) কার্যত উপেক্ষিত হয়। StandardScaler সব Feature-কে সমান গুরুত্ব দেয়।
Q5: Silhouette Score কী এবং ভালো Clustering-এ এর মান কত?
Silhouette Score পরিমাপ করে একটি পয়েন্ট তার নিজের Cluster-এর কতটা কাছে এবং অন্য Cluster থেকে কতটা দূরে। মান -1 থেকে +1। +1-এর কাছাকাছি মানে চমৎকার Clustering। ০-এর কাছাকাছি মানে Cluster-গুলো ওভারল্যাপ করছে।

📝 MCQ — বিকল্পে ক্লিক করুন

1. K-Means Clustering কোন ধরনের Machine Learning?
Supervised Learning
Unsupervised Learning
Reinforcement Learning
Semi-Supervised Learning
2. K-Means-এ "K" কী নির্দেশ করে?
K-টি ডেটা পয়েন্ট
K-টি Cluster বা গ্রুপ
K-তম Iteration
K-টি Feature
3. K-Means Centroid কীভাবে আপডেট হয়?
Cluster-এর সর্বোচ্চ মান
Cluster-এর সব পয়েন্টের গড়
Cluster-এর সর্বনিম্ন মান
এলোমেলোভাবে
4. WCSS কম হওয়া মানে কী?
খারাপ Clustering
K ভুল নির্বাচন
Cluster-গুলো আঁটসাঁট ও ভালো
Outlier বেশি
5. K-Means কখন সবচেয়ে বেশি ব্যর্থ হয়?
বড় Dataset-এ
অদ্ভুত আকারের (Non-spherical) Cluster-এ
সংখ্যার ডেটায়
Feature Scaling করা হলে
6. sklearn-এ K-Means-এর WCSS দেখার attribute কোনটি?
km.wcss_
km.inertia_
km.score_
km.error_
7. K-Means-এ n_init=10 কী করে?
১০ বার Iteration করে
১০ বার ভিন্ন শুরু দিয়ে সেরাটা বেছে নেয়
K=10 মানে
১০টি Feature নেয়

💼 Top 25 K-Means Interview Questions — সংক্ষিপ্ত উত্তর

#প্রশ্নসংক্ষিপ্ত উত্তর
1K-Means কী?Unsupervised Clustering Algorithm — K গ্রুপে ভাগ করে Centroid হিসাবে
2Centroid কীভাবে নির্ধারিত হয়?প্রথমে এলোমেলো, তারপর প্রতিটি Cluster-এর গড়
3K-Means কখন Converge করে?যখন Centroid আর নড়ে না বা নির্দিষ্ট Iteration শেষ হয়
4WCSS কী?প্রতিটি পয়েন্ট থেকে তার Centroid-এর দূরত্বের বর্গের সমষ্টি
5Elbow Method কী?WCSS vs K গ্রাফে "হাঁটু" পয়েন্ট দিয়ে সেরা K নির্বাচন
6Silhouette Score কী?-1 থেকে +1 → কতটা ভালো Cluster। +1 কাছাকাছি = ভালো
7K-Means কেন Scaling চায়?Euclidean Distance ব্যবহার করে, বড় মান Clustering দখল করে
8K-Means-এর Time Complexity?O(n × k × i × d) — n=পয়েন্ট, k=Cluster, i=Iteration, d=মাত্রা
9K-Means ও KNN-এর পার্থক্য?K-Means=Unsupervised Clustering, KNN=Supervised Classification
10K-Means কখন ব্যর্থ হয়?Non-spherical Cluster, Outlier বেশি, ভুল K, ভিন্ন Cluster আকার
11K-Means++ কী?উন্নত Initialization — প্রথম Centroid স্মার্টভাবে বাছে
12K-Means-এ Outlier কী করে?Centroid-কে ভুল দিকে টেনে নেয়
13Mini-Batch K-Means কী?বড় Dataset-এ সব ডেটার বদলে ছোট Batch ব্যবহার — দ্রুত
14K-Means vs DBSCAN?K-Means গোলাকার Cluster, DBSCAN যেকোনো আকৃতি ও Noise সামলায়
15K-Means Inertia কমার মানে?Cluster আঁটসাঁট হচ্ছে — ভালো
16K-Means Image Compression কীভাবে?একই রঙের Pixel একই Cluster → শুধু Centroid Color রাখলে ছবি ছোট হয়
17K-Means কি Categorical ডেটায় কাজ করে?না, সরাসরি নয়। One-Hot Encoding করতে হবে
18Global Optimal নিশ্চিত করে কি?না, Local Optimal হতে পারে। তাই n_init বড় রাখুন
19K-Means-এ Random State কী করে?Reproducibility — একই ফলাফল প্রতিবার পাওয়া
20Cluster Label কীভাবে ব্যাখ্যা করবেন?Cluster-এর গড় বৈশিষ্ট্য দেখে নাম দিন — Algorithm নিজে দেয় না
21K-Means কি Hierarchical Clustering থেকে ভালো?বড় Dataset-এ দ্রুত। কিন্তু K আগে বলতে হয়
22Euclidean ছাড়া K-Means?Manhattan Distance বা Cosine Similarity-ও ব্যবহার করা যায়
23K-Means Fraud Detection-এ কীভাবে?স্বাভাবিক লেনদেনের Cluster থেকে দূরের পয়েন্ট = সন্দেহজনক
24High-Dimensional ডেটায় K-Means?"Curse of Dimensionality" সমস্যা হয়। PCA দিয়ে মাত্রা কমান
25K-Means-এর বিকল্প Algorithm?DBSCAN (অদ্ভুত আকার), GMM (Probabilistic), Hierarchical (K অজানা হলে)

📚 Homework Assignment

  1. Google Colab খুলুন এবং আজকের সম্পূর্ণ K-Means কোড নিজে লিখুন।
  2. Age, Annual_Income ও Spending_Score তিনটি Feature একসাথে K-Means-এ দিন এবং 3D Scatter Plot আঁকুন।
  3. Silhouette Score ও Davies-Bouldin Score হিসাব করে K=2 থেকে K=8 তুলনা টেবিল বানান।
  4. Kaggle-এর "Mall Customers" Dataset নামিয়ে সম্পূর্ণ EDA ও Clustering করুন।
  5. আপনার তৈরি Cluster-গুলোর জন্য Business Recommendations লিখুন।

🎉 অভিনন্দন! আজকের ২ ঘণ্টার K-Means ক্লাস সম্পন্ন!

আপনি আজ শিখেছেন: Unsupervised Learning, Clustering, K-Means Algorithm, Euclidean Distance, Elbow Method, Feature Scaling, Silhouette Score, এবং সম্পূর্ণ Python কোডিং!

✅ Clustering বোঝা গেছে ✅ Elbow Method শিখেছি ✅ Business Insight দিতে পারি

পরের ক্লাস: Hierarchical Clustering ও DBSCAN — আরও শক্তিশালী Clustering! 🌳