Unsupervised: K-Means ও PCA — label ছাড়া pattern

clustering ও dimensionality reduction (Series 05, Episode 09)

🟡 INTERMEDIATE Series 05 — Classical Machine Learning Episode 09 / 11

📑 এই পর্বে যা যা আছে

📝 ১. গল্প: label ছাড়া data-র স্তূপ

Nila একটা e-commerce কোম্পানির ১ লাখ customer-এর data নিয়ে বসল। প্রতিটা row-তে আছে — কত টাকা খরচ, কতবার order, কী কিনেছে। কিন্তু কোথাও লেখা নেই "এই customer কোন type-এর"। কোনো label নেই।

Rahim: "কিন্তু label ছাড়া model কীভাবে শিখবে? আগের সব episode-এ তো আমরা y (label) দিয়ে train করেছি!"

Nila: "এখানেই Unsupervised Learning-এর মজা। আমরা model-কে বলি না 'এটা কোন type'। বরং model নিজেই data-র মধ্যে স্বাভাবিক দল (group) খুঁজে বের করে — কোন কোন customer একে অপরের মতো আচরণ করে। এটাই clustering।"

এই episode-এ দুটো সবচেয়ে দরকারি unsupervised technique শিখব — K-Means (দল খোঁজা) ও PCA (মাত্রা কমানো)।

২. সমস্যা: Supervised বনাম Unsupervised

Supervised (আগের episode-গুলো)

data-তে label (y) আছে।
লক্ষ্য: X থেকে y predict করা।
উদাহরণ: churn (হ্যাঁ/না), house price।
Unsupervised (আজ)

কোনো label নেই, শুধু X।
লক্ষ্য: data-র লুকানো গঠন/দল খোঁজা।
উদাহরণ: customer segmentation, topic খোঁজা।
মনে রাখুন distinction: Classification-এ আপনি আগে থেকে জানেন কয়টা class ও কোনটা কী (label আছে)। Clustering-এ আপনি জানেন না — model নিজেই দল বানায়, তারপর আপনি সেই দলগুলোর অর্থ ব্যাখ্যা করেন।

🎯 ৩. Clustering কী? K-Means-এর গল্প (৩ স্তরে)

Level 1 — সহজ intuition

একটা পার্টিতে অচেনা মানুষ। কেউ বলে দেয়নি কে কোন দলের। কিন্তু আপনি খেয়াল করলেন — কিছু মানুষ কাছাকাছি দাঁড়িয়ে গল্প করছে, আরেক দল আরেক কোণে। আপনি স্বাভাবিকভাবেই "দল" চিনে ফেললেন। K-Means ঠিক এটাই করে — যারা "কাছাকাছি" (মিল বেশি) তাদের এক দলে ফেলে।

Level 2 — technical ভাবে কী হচ্ছে

আপনি বলে দেন কয়টা দল চান (k)। K-Means প্রতিটা দলের একটা কেন্দ্র (centroid) ধরে, তারপর প্রতিটা point-কে তার সবচেয়ে কাছের centroid-এর দলে দেয় (সাধারণত Euclidean distance)। এরপর centroid-গুলো দলের গড় অবস্থানে সরে যায়। এই দুই ধাপ বারবার চলে যতক্ষণ centroid আর নড়ে না।

Level 3 — engineer perspective

Engineer হিসেবে মনে রাখবেন — K-Means distance-নির্ভর, তাই feature scaling বাধ্যতামূলক (নাহলে বড় স্কেলের feature, যেমন "টাকা", ছোট স্কেলের feature, যেমন "order সংখ্যা"-কে চাপা দেবে)। আর k আপনাকে বেছে দিতে হয় — এটাই সবচেয়ে বড় practical চ্যালেঞ্জ।

🖼️ ৪. Visual: K-Means কীভাবে ধাপে ধাপে কাজ করে

ধাপ ০: এলোমেলো k=২ centroid (X) বসানো o o o o o o X o o o o X o o o ধাপ ১: প্রতিটা point কাছের centroid-এর দলে যায় [A A] [B] [A A A] X [B B] [A A] X [B B B] ধাপ ২: centroid দলের গড়ে সরে যায় (X নতুন জায়গায়) [A A] [B] [A A X A] [B X B] [A A] [B B B] ধাপ ১-২ বারবার চলে -> centroid স্থির হলে থামে (converge)

💻 ৫. কোড: K-Means দিয়ে segmentation

কেন scikit-learn? classical unsupervised algorithm-এর জন্য এটাই standard, API সহজ ও সুসংগত।

import numpy as np from sklearn.datasets import make_blobs from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans # উদাহরণ data (বাস্তবে: customer/job feature বসবে) X, _ = make_blobs(n_samples=500, centers=3, cluster_std=1.2, random_state=42) # ধাপ ১: scaling — K-Means distance-নির্ভর, তাই আবশ্যক X_scaled = StandardScaler().fit_transform(X) # ধাপ ২: K-Means (k=3), n_init=10 => ভালো শুরু বেছে নেয় km = KMeans(n_clusters=3, n_init=10, random_state=42) labels = km.fit_predict(X_scaled) print("প্রতিটা point-এর cluster:", labels[:10]) print("centroid আকার:", km.cluster_centers_.shape) print("inertia (কম = ভালো):", round(km.inertia_, 2))
fit_predict প্রতিটা point-কে একটা cluster নম্বর দেয় (0,1,2...)। এই নম্বর শুধুই label — "cluster 0" মানে "সবচেয়ে ভালো" নয়। দল বানানোর পর আপনাকেই বিশ্লেষণ করতে হবে প্রতিটা দলের বৈশিষ্ট্য কী।

📐 ৬. কয়টা cluster? Elbow ও Silhouette method

সবচেয়ে বড় প্রশ্ন — k কত হবে? দুটো জনপ্রিয় উপায়:

from sklearn.metrics import silhouette_score for k in range(2, 7): km = KMeans(n_clusters=k, n_init=10, random_state=42) lab = km.fit_predict(X_scaled) sil = silhouette_score(X_scaled, lab) print("k=%d inertia=%.1f silhouette=%.3f" % (k, km.inertia_, sil)) # সবচেয়ে বেশি silhouette + elbow দেখে k বাছুন
k বাছাই বিজ্ঞান আর ব্যবসায়িক বোধ দুটোরই মিশ্রণ। Elbow/Silhouette পথ দেখায়, কিন্তু শেষমেশ দলগুলো ব্যাখ্যা করা যায় কি না সেটাই আসল — "৩টা দল হলো premium, regular, dormant customer" — এমন অর্থপূর্ণ ভাগই কাজে লাগে।

🎯 ৭. PCA কী? মাত্রা কমানোর গল্প (৩ স্তরে)

Level 1 — সহজ intuition

একটা ৩D বস্তুর ছবি তুললে সেটা ২D কাগজে আসে — কিছু তথ্য হারায়, কিন্তু মূল আকৃতি বোঝা যায়। PCA ঠিক তাই করে — অনেক feature (উচ্চ মাত্রা) থেকে কম feature-এ নামায়, যাতে সবচেয়ে বেশি তথ্য (variance) ধরে থাকে।

Level 2 — technical ভাবে কী হচ্ছে

PCA এমন নতুন অক্ষ (principal component) খুঁজে বের করে যেগুলোর দিকে data-র variance সবচেয়ে বেশি। প্রথম component সবচেয়ে বেশি variance ধরে, দ্বিতীয়টা তার পরে, এভাবে। তারপর কম-গুরুত্বপূর্ণ component বাদ দিয়ে মাত্রা কমানো হয়। এটা একটা linear transformation।

Level 3 — engineer perspective

PCA কেন লাগে? (১) অনেক feature থাকলে model ধীর হয় ও overfit করতে পারে — "curse of dimensionality"; (২) visualization — ৫০ feature-কে ২D-তে নামিয়ে plot করা যায়; (৩) noise কমানো। তবে সাবধান — PCA-এর পর নতুন axis-গুলো আর মানুষের বোধগম্য feature থাকে না (interpretability হারায়)।

🖼️ ৮. Visual: PCA কীভাবে তথ্য ধরে রাখে

২টা feature (2D) -> ১টা principal component (1D) feature2 | o o | o o o <- data একটা কোনাকুনি দিকে ছড়ানো | o o o |o o o +-------------- feature1 PCA নতুন অক্ষ (PC1) বসায় ঠিক সেই দিকে যেখানে ছড়ানো (variance) সবচেয়ে বেশি: PC1 (সবচেয়ে বেশি variance এই দিকে) / / o o o o o <- এখন শুধু PC1-এর উপর দূরত্ব দিয়েই / o o o o বেশিরভাগ তথ্য ধরে রাখা যায় / o o o

💻 ৯. কোড: PCA দিয়ে dimensionality reduction

from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler # PCA-ও scale-sensitive => আগে standardize করুন X_scaled = StandardScaler().fit_transform(X) pca = PCA(n_components=2) X_pca = pca.fit_transform(X_scaled) print("আগের আকার:", X_scaled.shape) print("PCA-এর পরে:", X_pca.shape) print("প্রতিটা component কত variance ধরল:", pca.explained_variance_ratio_.round(3)) print("মোট ধরা variance:", round(pca.explained_variance_ratio_.sum(), 3))
explained_variance_ratio_ বলে প্রতিটা component মূল তথ্যের কত ভাগ ধরল। যদি প্রথম ২টা component মিলে ০.৯৫ (৯৫%) ধরে, তাহলে বাকি feature বাদ দিয়ে সামান্য তথ্য হারিয়ে অনেক সরল model পাওয়া যায়।

🧪 ১০. Experiment: PCA + K-Means একসাথে

বাস্তব pipeline-এ প্রায়ই PCA দিয়ে মাত্রা কমিয়ে, তারপর K-Means clustering করা হয় (দ্রুত ও কম noise):

from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score pipe = Pipeline([ ("scale", StandardScaler()), ("pca", PCA(n_components=2)), ("kmeans", KMeans(n_clusters=3, n_init=10, random_state=42)), ]) labels = pipe.fit_predict(X) # silhouette মাপতে PCA-transformed data লাগবে X_reduced = pipe[:-1].transform(X) # scale + pca পর্যন্ত print("silhouette:", round(silhouette_score(X_reduced, labels), 3))

কী দেখবেন: PCA দিয়ে মাত্রা কমানোর পরও যদি silhouette ভালো থাকে, তাহলে বুঝবেন কম feature-এই দল স্পষ্ট — model হালকা হলো, তথ্য প্রায় অটুট থাকল। Pipeline ব্যবহার করায় scaling/PCA সবসময় সঠিক ক্রমে হয়।

🇧🇩 ১১. Bangladesh উদাহরণ ও Boss Question

Daraz-এর মতো e-commerce বা GP/Robi-এর মতো telco প্রতিদিন লক্ষ লক্ষ customer নিয়ে কাজ করে। কোনো label নেই, তবু তারা জানতে চায় — কোন কোন ধরনের customer আছে? K-Means দিয়ে তারা customer segment বানায় (high-value, occasional, churn-risk), তারপর প্রতিটা segment-এ আলাদা offer পাঠায়। PCA দিয়ে শত শত behavioral feature-কে হালকা করে দ্রুত বিশ্লেষণ করে।

💼 Boss Question

Boss: "আমাদের তো কোনো labeled data নেই। তাহলে এই clustering দিয়ে আমার লাভটা কোথায়?"

উত্তর: "স্যার, এটাই এর সৌন্দর্য — label ছাড়াই আমরা customer-দের স্বাভাবিক দল বের করতে পারি। যেমন — কারা বেশি খরচ করে, কারা চলে যাওয়ার ঝুঁকিতে। তারপর প্রতিটা দলে আলাদা marketing/offer দিলে খরচ কমে, conversion বাড়ে। মানে labeled data না থাকলেও data থেকে সরাসরি business সিদ্ধান্ত — এটাই unsupervised learning-এর business value।"

🔎 ১২. Job Requirement Decoder

JD-তে দেখবেন: "Familiarity with clustering (K-Means) and dimensionality reduction (PCA)."

১. কী বোঝায়? label ছাড়া data-তে group খোঁজা ও feature কমানো আপনি পারেন।

২. কেন চায়? segmentation, EDA, noise কমানো ও বড় feature space সামলাতে এগুলো লাগে।

৩. কোন সমস্যা সমাধান করে? "labeled data নেই কিন্তু data থেকে insight চাই" — এই সমস্যা।

৪. junior-এর কী জানা লাগে? K-Means-এর ধাপ, scaling কেন আবশ্যক, k বাছাই (elbow/silhouette), PCA কী করে, explained_variance_ratio_

৫. এখনই কী master লাগে না? DBSCAN, hierarchical clustering, t-SNE/UMAP-এর গণিত, kernel PCA — পরে।

৬. GitHub-এ কীভাবে দেখাবে? customer segmentation notebook — elbow plot, silhouette, ২D PCA scatter যেখানে cluster রং করা, আর প্রতিটা segment-এর ব্যাখ্যা।

৭. Interview-তে কী জিজ্ঞেস করতে পারে? "K-Means কীভাবে কাজ করে?", "k কীভাবে বাছবেন?", "K-Means-এ scaling কেন জরুরি?", "PCA কী ও কখন ব্যবহার করবেন?", "Clustering vs classification পার্থক্য?"

⚠️ ১৩. সাধারণ ভুল

ভুল ১: scaling ছাড়া K-Means/PCA চালানো। → বড়-স্কেলের feature ফলাফল নষ্ট করে; আগে StandardScaler।

ভুল ২: cluster নম্বরকে (0,1,2) অর্থপূর্ণ label ভাবা। → এগুলো শুধু id; আপনাকে ব্যাখ্যা করতে হবে।

ভুল ৩: k অনুমানে বসিয়ে দেওয়া। → elbow/silhouette + business বোধ দিয়ে বাছুন।

ভুল ৪: PCA-কে feature selection ভাবা। → PCA নতুন combined axis বানায়, মূল feature বাছে না।

ভুল ৫: সবসময় PCA করা। → কম feature বা interpretability দরকার হলে PCA এড়িয়ে চলুন।

🎤 ১৪. Interview Prep

প্রশ্ন ১: K-Means কীভাবে কাজ করে?
উত্তর: k centroid বসায় → প্রতিটা point কাছের centroid-এর দলে যায় → centroid দলের গড়ে সরে → converge না হওয়া পর্যন্ত repeat।

প্রশ্ন ২: Optimal k কীভাবে বাছবেন?
উত্তর: Elbow method (inertia curve-এর কনুই) ও Silhouette score; সাথে business ব্যাখ্যা।

প্রশ্ন ৩: PCA কী এবং কখন ব্যবহার করবেন?
উত্তর: variance ধরে রেখে মাত্রা কমানোর technique; বেশি feature, visualization বা noise কমাতে দরকার।

প্রশ্ন ৪: K-Means ও PCA-তে scaling কেন জরুরি?
উত্তর: দুটোই distance/variance-নির্ভর; unscaled feature হলে বড়-স্কেলের feature আধিপত্য করে ফল বিকৃত করে।

✍️ ১৫. হাতে-কলমে

P1-এর Bangladesh Job Market data (বা যেকোনো customer data) নিন:

১. কিছু numeric feature বাছুন (যেমন salary, experience_years)।
২. StandardScaler দিয়ে scale করুন।
৩. k=2..6 এর জন্য silhouette বের করে সেরা k বাছুন।
৪. সেই k দিয়ে K-Means চালিয়ে cluster বের করুন।
৫. PCA(2) দিয়ে ২D scatter plot বানান, cluster অনুযায়ী রং দিন।
৬. প্রতিটা cluster-কে ২-৩ শব্দে নাম দিন (যেমন "junior-low-salary")।

প্রশ্ন: cluster-গুলো কি ব্যবসায়িকভাবে অর্থপূর্ণ? scaling না করলে ফল কতটা বদলায়?

🚀 ১৬. Project Connection ও সারসংক্ষেপ

Flagship "Bangladesh Tech Career Assistant"-এ K-Means দিয়ে আমরা মিল-থাকা চাকরি বা skill-দল আলাদা করতে পারি (যেমন "data role", "web role", "DevOps role") — কোনো label ছাড়াই। আর PCA পরে (Series 07-08) embedding-এর উচ্চ মাত্রা visualize করতে কাজে দেবে। মনে রাখুন — clustering দিয়ে তৈরি label পরে supervised model-এর feature হিসেবেও ব্যবহার করা যায়।

এই Episode-এ শিখলাম:

✓ Supervised (label আছে) বনাম Unsupervised (label নেই) — মূল পার্থক্য
✓ K-Means: centroid → assign → move → repeat; দল বানায়, নম্বর শুধুই id
✓ k বাছাই: Elbow ও Silhouette + business বোধ
✓ PCA: variance ধরে রেখে মাত্রা কমানো; explained_variance_ratio_ দেখে কত ধরল বোঝা
✓ K-Means ও PCA দুটোতেই feature scaling আবশ্যক
✓ Pipeline দিয়ে scale → PCA → K-Means সঠিক ক্রমে চালানো
পরবর্তী Episode: Feature Engineering — model-এর আসল শক্তি data থেকেই আসে। দেখব কীভাবে কাঁচা data থেকে ভালো feature বানালে সাধারণ model-ও চমকে দেয়।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.