Unsupervised 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 | খবরের লেখা | একই বিষয়ের নিউজ গ্রুপ | স্বয়ংক্রিয় শ্রেণীবিভাগ |
Clustering কী? — গ্রুপ করার শিল্প
গল্প: বাজারের ফলওয়ালা 🍎🍌🍊
একজন ফলওয়ালা প্রতিদিন সকালে বাজারে আসেন। তিনি আমগুলো এক ঝুড়িতে, কলাগুলো আরেক ঝুড়িতে, আর কমলাগুলো তৃতীয় ঝুড়িতে রাখেন। কেউ শেখায়নি — তিনি নিজেই বুঝেছেন একই ধরনের ফল একসাথে রাখলে সুবিধা। এটাই Clustering!
📖 Clustering কী?
Clustering হলো ডেটার মধ্যে এমন গ্রুপ (Cluster) খুঁজে বের করা যেখানে একই গ্রুপের সদস্যরা একে অপরের কাছাকাছি (similar) এবং ভিন্ন গ্রুপের সদস্যরা দূরে দূরে (dissimilar)।
Mixed Data → Clustering → গ্রুপ আবিষ্কার
🎯 Clustering কেন গুরুত্বপূর্ণ?
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 — আদর্শ উদাহরণ
K-Means কীভাবে কাজ করে — ধাপে ধাপে
🔄 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 (ক্লিক করে টিক দিন)
সব চিহ্ন এক নজরে (Math Dictionary)
| চিহ্ন | নাম | কী করে | উদাহরণ |
|---|---|---|---|
| K | Cluster সংখ্যা | কতটি গ্রুপ বানাবেন | K=3 |
| C | Centroid | Cluster-এর কেন্দ্রবিন্দু (গড়) | C₀ = (25, 75) |
| d | Euclidean Distance | দুই point কতটা কাছাকাছি | √[(Δx)²+(Δy)²] |
| label(i) | Cluster Assignment | point i কোন cluster-এ | argmin_j d(i,j) |
| WCSS | Within-Cluster SS | ভেতরের বিশৃঙ্খলা — যত কম তত ভালো | Σ d² |
| mean | গড় | নতুন centroid = cluster-এর গড় | (Σx/n, Σy/n) |
| ▲ | Centroid marker | Canvas-এ ত্রিভুজ = centroid | ফ্যাদাফুল = পুরনো |
Mathematical Intuition — দূরত্ব ও গড়
গল্প: মানচিত্রে দূরত্ব 🗺️
ঢাকা থেকে চট্টগ্রামের দূরত্ব মাপতে হলে সোজা রেখায় দূরত্ব মাপা হয়। K-Means-ও ঠিক এভাবে দুটো ডেটা পয়েন্টের মধ্যে "সোজা রেখার দূরত্ব" মাপে — এটাই Euclidean Distance।
🧮 হাতে-কলমে দূরত্ব হিসাব
কাস্টমার A: (বয়স=25, আয়=40) | Centroid C1: (বয়স=20, আয়=35)
কাস্টমার A: (25, 40) | Centroid C2: (50, 80)
C1-এর দূরত্ব কম → কাস্টমার A, Cluster 1-এ যাবে ✅
🧮 Interactive Distance Calculator
Slider বদলান — দূরত্ব ও বিজয়ী cluster তাৎক্ষণিক দেখুন
বিজয়ী: Cluster 1 (C1)
📐 Centroid কীভাবে হিসাব হয়?
Centroid হলো একটি Cluster-এর সব পয়েন্টের গড় (Mean)।
| পয়েন্ট | বয়স (x) | আয় (y) |
|---|---|---|
| কাস্টমার ১ | 25 | 40 |
| কাস্টমার ২ | 30 | 50 |
| কাস্টমার ৩ | 20 | 30 |
| নতুন Centroid | (25+30+20)/3 = 25 | (40+50+30)/3 = 40 |
সুতরাং নতুন Centroid = (25, 40)
সঠিক K নির্বাচন — Elbow Method
গল্প: বই কতটি তাকে সাজাব? 📚
আপনার কাছে ১০০টি বই আছে। ১টি তাকে রাখলে — সব একসাথে, খোঁজা কঠিন। ১০০টি তাকে রাখলে — প্রতিটি বই এক তাকে, জায়গার অপচয়। সঠিক সংখ্যাটা মাঝামাঝি কোথাও — হয়তো ৫-৭টি তাক। K-Means-ও ঠিক এভাবে সঠিক K খোঁজে!
📐 WCSS কী?
WCSS (Within-Cluster Sum of Squares) হলো প্রতিটি Cluster-এর ভেতরে, প্রতিটি পয়েন্ট থেকে তার Centroid-এর দূরত্বের বর্গের সমষ্টি।
WCSS যত কম → Cluster গুলো তত আঁটসাঁট ও ভালো।
Elbow Method — Interactive WCSS vs K
K=3 এ elbow — এর পরে WCSS ধীরে কমে।
| K | WCSS | উন্নতি | সিদ্ধান্ত |
|---|---|---|---|
| K=3 | 159 | 66 | ELBOW — সেরা K! |
📊 K মান পরিবর্তনে WCSS কী হয়?
| K মান | WCSS | উন্নতি | সিদ্ধান্ত |
|---|---|---|---|
| K=1 | 8000 | — | সব একটা Cluster — অর্থহীন |
| K=2 | 4200 | ৩৮০০ কমেছে | অনেক উন্নতি |
| K=3 | 2100 | ২১০০ কমেছে | ✅ ELBOW — সেরা! |
| K=4 | 1800 | মাত্র ৩০০ কমেছে | সামান্য উন্নতি |
| K=5 | 1700 | মাত্র ১০০ কমেছে | জটিলতা বাড়ছে |
সুবিধা ও সীমাবদ্ধতা
✅ সুবিধা (Advantages)
- সহজ ও বোঝা যায়: ধাপগুলো সরল
- দ্রুত: বড় Dataset-এও কার্যকর
- নমনীয়: K পরিবর্তন করে সহজে মানিয়ে নেওয়া যায়
- Scalable: লক্ষ লক্ষ ডেটায়ও ভালো কাজ করে
❌ সীমাবদ্ধতা (Disadvantages)
- K আগে বলতে হবে: সঠিক K না জানলে সমস্যা
- Outlier-sensitive: একটা অস্বাভাবিক পয়েন্ট Centroid সরিয়ে দেয়
- Initialization-sensitive: এলোমেলো শুরু ভুল ফলাফল দিতে পারে
- গোলাকার Cluster: অদ্ভুত আকৃতির Cluster বুঝতে পারে না
K-Means কখন ব্যর্থ হয় — Interactive
Outlier centroid টেনে সরিয়ে দেয় — cluster ভুল হয়
স্ট্যাটিক রেফারেন্স — তিনটি কেস
Real-Life Applications
Customer Segmentation
কাস্টমারদের আচরণ অনুযায়ী গ্রুপ করে টার্গেটেড মার্কেটিং
Recommendation System
একই রুচির ব্যবহারকারীদের গ্রুপ করে ভালো সুপারিশ
Image Compression
একই রকম রঙ একসাথে রেখে ছবির আকার কমানো
Fraud Detection
অস্বাভাবিক লেনদেনের প্যাটার্ন (Anomaly) আলাদা Cluster-এ
Social Media Grouping
একই ধরনের পোস্ট দেওয়া ব্যবহারকারীর গ্রুপ
Document Clustering
একই বিষয়ের নিউজ বা ডকুমেন্ট আলাদা Cluster-এ
Feature Scaling — কেন বাধ্যতামূলক?
গল্প: দাঁড়িপাল্লায় হাতি ও মুরগি 🐘🐔
একটি দাঁড়িপাল্লায় একদিকে ১০০ কেজির হাতি, আরেকদিকে ৫ কেজির মুরগি। হাতি সবসময় ভারী দিক — মুরগি প্রায় উপেক্ষিত। K-Means-এও যদি আয় (১,০০,০০০ টাকা) আর বয়স (২৫) একসাথে দেওয়া হয়, আয়ের বিশাল সংখ্যা দূরত্ব হিসাবে সব দখল করে নেয়!
🧮 Scaling ছাড়া সমস্যার উদাহরণ
| Feature | ব্যক্তি A | ব্যক্তি B | পার্থক্য |
|---|---|---|---|
| বয়স | 25 | 30 | 5 |
| আয় (টাকা) | 1,00,000 | 1,50,000 | 50,000 |
⚠️ বয়সের পার্থক্য (5) হারিয়ে গেছে! শুধু আয় দিয়েই Cluster হচ্ছে!
📐 Standardization (Z-score)
গড় বাদ দিয়ে Standard Deviation দিয়ে ভাগ করা।
সব Feature একই "গড় ০, বিচ্যুতি ১" স্কেলে আসে।
📐 Min-Max Scaling
সব মান ০ থেকে ১-এর মধ্যে নিয়ে আসা।
সব Feature 0 থেকে 1 এর মধ্যে থাকে।
⚖️ Scaling OFF vs ON — Clustering পার্থক্য
Scaling OFF — আয় দূরত্ব দখল করে
Scaling ON — balanced clusters
বাম: Scaling OFF — আয় দূরত্ব দখল করে · ডান: Scaling ON — balanced clusters
Google Colab কোডিং সেশন
📋 আজকের Project: Mall Customer Segmentation
একটি শপিং মলের কাস্টমার ডেটা বিশ্লেষণ করব। বয়স, বার্ষিক আয় এবং Spending Score ব্যবহার করে কাস্টমারদের গ্রুপে ভাগ করব। Chip থেকে যেকোনো ধাপে jump করুন।
Colab — কোডে যেতে ক্লিক করুন
# প্রয়োজনীয় লাইব্রেরি 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())
•
KMeans → K-Means Clustering-এর ক্লাস•
StandardScaler → Feature Scaling (বাধ্যতামূলক!)•
silhouette_score → Clustering মূল্যায়নের জন্যprint("Dataset আকার:", df.shape) print(df.head())
•
shape → কত সারি, কত কলাম•
head() → প্রথম ৫ সারি sample দেখুনprint(df.isnull().sum()) print("\nDuplicate rows:", df.duplicated().sum())
• Clustering-এর আগে missing value থাকলে ঠিক করতে হবে
• সব 0 মানে ডেটা পরিষ্কার ✅
print(df.describe().round(2))
• mean, std, min, max এক নজরে — scaling দরকার কিনা বোঝা যায়
# 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()
• EDA-তে আগে ডেটা দেখি — কোনো গ্রুপ খালি চোখে বোঝা যাচ্ছে কিনা
• subplot(1,2,1) → একটি চিত্রে দুটো গ্রাফ পাশাপাশি
# 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: 15-140, Spending_Score: 1-99 (ভিন্ন পরিসর)
• Scaling-এর পরে উভয়ই একই পরিসরে (গড়≈0, std≈1)
# 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 সেরা!")
•
km.inertia_ → sklearn-এ WCSS-এর মান• K=1 থেকে K=3 পর্যন্ত WCSS দ্রুত কমছে, তারপর ধীরে
# 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))
•
fit_predict() → Training ও Cluster নির্ধারণ একসাথে•
cluster_centers_ → প্রতিটি Cluster-এর Centroid অবস্থান• K=3 — তিনটি স্পষ্ট customer segment
# 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()
•
inverse_transform() → Scaled Centroid-কে আসল স্কেলে ফেরানো•
marker='*' → Centroid-কে তারা চিহ্নে দেখানো•
zorder=5 → Centroid সব পয়েন্টের উপরে থাকবে# 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: -1 (খারাপ) থেকে +1 (চমৎকার)
• K=3-এ সর্বোচ্চ 0.48 → Elbow Method-এর সাথে মিলে গেছে ✅
Model Evaluation — Clustering কতটা ভালো?
📊 Clustering Evaluation Metrics
| Metric | সহজ ভাষায় | ভালো মান | Python |
|---|---|---|---|
| WCSS / Inertia | প্রতিটি Cluster-এর ভেতরের "বিশৃঙ্খলা" | যত কম তত ভালো | km.inertia_ |
| Silhouette Score | প্রতিটি পয়েন্ট সঠিক Cluster-এ কতটা? | +1-এর কাছাকাছি | silhouette_score() |
| Davies-Bouldin Index | Cluster-গুলো পরস্পর থেকে কতটা আলাদা? | যত কম তত ভালো | 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-এর সাথে মিলে ✅
অন্যান্য Algorithm-এর সাথে তুলনা
📊 K-Means vs অন্যান্য Algorithm
| বিষয় | K-Means | KNN | Hierarchical | DBSCAN |
|---|---|---|---|---|
| ধরন | Unsupervised | Supervised | Unsupervised | Unsupervised |
| K আগে বলতে হবে? | হ্যাঁ | হ্যাঁ (প্রতিবেশী) | না | না |
| Outlier sensitivity | বেশি | বেশি | মাঝারি | কম (Noise হিসাবে) |
| গতি (Speed) | দ্রুত | ধীর | খুব ধীর | মাঝারি |
| Cluster আকৃতি | শুধু গোলাকার | যেকোনো | যেকোনো | যেকোনো |
| Feature Scaling | বাধ্যতামূলক | বাধ্যতামূলক | প্রায় | প্রায় |
| বড় Dataset | ভালো | খুব ধীর | অনুপযুক্ত | মাঝারি |
🎯 কোনটা কখন?
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 বেছে নেওয়া হয়।
End-to-End Manual Example — হাতে-কলমে
📊 ৮ কাস্টমারের ছোট Dataset (K=2)
| কাস্টমার | আয় (x) | Spending (y) |
|---|---|---|
| A | 2 | 8 |
| B | 3 | 7 |
| C | 4 | 9 |
| D | 8 | 2 |
| E | 9 | 3 |
| F | 7 | 1 |
| G | 5 | 5 |
| H | 6 | 4 |
🎲 ধাপ ১: এলোমেলো 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.49 | C1 |
| B(3,7) | √[(3-2)²+(7-8)²]=√2≈1.41 | √[(3-8)²+(7-2)²]=√50≈7.07 | C1 |
| C(4,9) | √[(4-2)²+(9-8)²]=√5≈2.24 | √[(4-8)²+(9-2)²]=√65≈8.06 | C1 |
| D(8,2) | √[(8-2)²+(2-8)²]=√72≈8.49 | √[(8-8)²+(2-2)²]=0 | C2 |
| E(9,3) | √[(9-2)²+(3-8)²]=√74≈8.60 | √[(9-8)²+(3-2)²]=√2≈1.41 | C2 |
| F(7,1) | √[(7-2)²+(1-8)²]=√74≈8.60 | √[(7-8)²+(1-2)²]=√2≈1.41 | C2 |
| 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.83 | C2 |
📐 নতুন 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)
Mini Business Project
ব্যবসার গল্প: 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 Buyer | Flash Sale, EMI অফার |
| 🔴 C2 | বেশি | কম | মধ্যবয়স্ক | Conservative High Earner | Premium Product, সঞ্চয় অফার |
| 🟢 C3 | কম | কম | বয়স্ক | Budget Conscious | ছাড়, Combo Deal |
| 🟡 C4 | বেশি | বেশি | তরুণ | Target Customer ★ | Loyalty Program, VIP সুবিধা |
| 🔵 C5 | মাঝারি | মাঝারি | মাঝারি | Average Customer | Seasonal Offer, Newsletter |
Revision, MCQ ও Interview Preparation
⚡ Quick Revision Chips
🎤 Viva Questions (ক্লিক করলে উত্তর)
📝 MCQ — বিকল্পে ক্লিক করুন
💼 Top 25 K-Means Interview Questions — সংক্ষিপ্ত উত্তর
| # | প্রশ্ন | সংক্ষিপ্ত উত্তর |
|---|---|---|
| 1 | K-Means কী? | Unsupervised Clustering Algorithm — K গ্রুপে ভাগ করে Centroid হিসাবে |
| 2 | Centroid কীভাবে নির্ধারিত হয়? | প্রথমে এলোমেলো, তারপর প্রতিটি Cluster-এর গড় |
| 3 | K-Means কখন Converge করে? | যখন Centroid আর নড়ে না বা নির্দিষ্ট Iteration শেষ হয় |
| 4 | WCSS কী? | প্রতিটি পয়েন্ট থেকে তার Centroid-এর দূরত্বের বর্গের সমষ্টি |
| 5 | Elbow Method কী? | WCSS vs K গ্রাফে "হাঁটু" পয়েন্ট দিয়ে সেরা K নির্বাচন |
| 6 | Silhouette Score কী? | -1 থেকে +1 → কতটা ভালো Cluster। +1 কাছাকাছি = ভালো |
| 7 | K-Means কেন Scaling চায়? | Euclidean Distance ব্যবহার করে, বড় মান Clustering দখল করে |
| 8 | K-Means-এর Time Complexity? | O(n × k × i × d) — n=পয়েন্ট, k=Cluster, i=Iteration, d=মাত্রা |
| 9 | K-Means ও KNN-এর পার্থক্য? | K-Means=Unsupervised Clustering, KNN=Supervised Classification |
| 10 | K-Means কখন ব্যর্থ হয়? | Non-spherical Cluster, Outlier বেশি, ভুল K, ভিন্ন Cluster আকার |
| 11 | K-Means++ কী? | উন্নত Initialization — প্রথম Centroid স্মার্টভাবে বাছে |
| 12 | K-Means-এ Outlier কী করে? | Centroid-কে ভুল দিকে টেনে নেয় |
| 13 | Mini-Batch K-Means কী? | বড় Dataset-এ সব ডেটার বদলে ছোট Batch ব্যবহার — দ্রুত |
| 14 | K-Means vs DBSCAN? | K-Means গোলাকার Cluster, DBSCAN যেকোনো আকৃতি ও Noise সামলায় |
| 15 | K-Means Inertia কমার মানে? | Cluster আঁটসাঁট হচ্ছে — ভালো |
| 16 | K-Means Image Compression কীভাবে? | একই রঙের Pixel একই Cluster → শুধু Centroid Color রাখলে ছবি ছোট হয় |
| 17 | K-Means কি Categorical ডেটায় কাজ করে? | না, সরাসরি নয়। One-Hot Encoding করতে হবে |
| 18 | Global Optimal নিশ্চিত করে কি? | না, Local Optimal হতে পারে। তাই n_init বড় রাখুন |
| 19 | K-Means-এ Random State কী করে? | Reproducibility — একই ফলাফল প্রতিবার পাওয়া |
| 20 | Cluster Label কীভাবে ব্যাখ্যা করবেন? | Cluster-এর গড় বৈশিষ্ট্য দেখে নাম দিন — Algorithm নিজে দেয় না |
| 21 | K-Means কি Hierarchical Clustering থেকে ভালো? | বড় Dataset-এ দ্রুত। কিন্তু K আগে বলতে হয় |
| 22 | Euclidean ছাড়া K-Means? | Manhattan Distance বা Cosine Similarity-ও ব্যবহার করা যায় |
| 23 | K-Means Fraud Detection-এ কীভাবে? | স্বাভাবিক লেনদেনের Cluster থেকে দূরের পয়েন্ট = সন্দেহজনক |
| 24 | High-Dimensional ডেটায় K-Means? | "Curse of Dimensionality" সমস্যা হয়। PCA দিয়ে মাত্রা কমান |
| 25 | K-Means-এর বিকল্প Algorithm? | DBSCAN (অদ্ভুত আকার), GMM (Probabilistic), Hierarchical (K অজানা হলে) |
📚 Homework Assignment
- Google Colab খুলুন এবং আজকের সম্পূর্ণ K-Means কোড নিজে লিখুন।
- Age, Annual_Income ও Spending_Score তিনটি Feature একসাথে K-Means-এ দিন এবং 3D Scatter Plot আঁকুন।
- Silhouette Score ও Davies-Bouldin Score হিসাব করে K=2 থেকে K=8 তুলনা টেবিল বানান।
- Kaggle-এর "Mall Customers" Dataset নামিয়ে সম্পূর্ণ EDA ও Clustering করুন।
- আপনার তৈরি Cluster-গুলোর জন্য Business Recommendations লিখুন।
🎉 অভিনন্দন! আজকের ২ ঘণ্টার K-Means ক্লাস সম্পন্ন!
আপনি আজ শিখেছেন: Unsupervised Learning, Clustering, K-Means Algorithm, Euclidean Distance, Elbow Method, Feature Scaling, Silhouette Score, এবং সম্পূর্ণ Python কোডিং!
পরের ক্লাস: Hierarchical Clustering ও DBSCAN — আরও শক্তিশালী Clustering! 🌳