Skip to content

DhimanTarafdar/customer-segmentation-using-k-means

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

🎯 K-Means Clustering - Learning Documentation

📘 What We Learned: Finding Structure Without Labels

🔍 Clustering কি?

Clustering হলো Machine Learning এর একটি Unsupervised Learning পদ্ধতি যেখানে আমরা data points গুলোকে তাদের similarity এর ভিত্তিতে বিভিন্ন groups বা clusters এ ভাগ করি।

🤔 কখন Clustering ব্যবহার করবো?

Clustering ব্যবহার করা হয় যখন:

  • Target Variable নেই - Dataset এ কোনো label বা output column থাকে না
  • Pattern খুঁজতে হয় - Data এর মধ্যে hidden structure বা grouping আছে কিনা জানতে
  • Exploratory Analysis - Data সম্পর্কে insight পেতে চাই কিন্তু কি খুঁজবো জানি না

Example Use Cases:

  • 🛒 Customer Segmentation - গ্রাহকদের আচরণ অনুযায়ী group করা
  • 📰 Document Clustering - Similar topics এর articles group করা
  • 🧬 Gene Analysis - Similar genetic patterns identify করা
  • 🖼️ Image Compression - Similar colors group করা

🎯 K-Means এর Goal কি?

K-Means algorithm এর মূল উদ্দেশ্য:

Data points গুলোকে 'k' সংখ্যক clusters এ এমনভাবে ভাগ করা যাতে একই cluster এর points একে অপরের কাছাকাছি থাকে এবং ভিন্ন cluster এর points যতটা সম্ভব দূরে থাকে।

Mathematical Goal:

  • প্রতিটা cluster এর একটা centroid (কেন্দ্র বিন্দু) থাকে
  • K-Means চেষ্টা করে প্রতিটা point কে তার nearest centroid এ assign করতে
  • Goal হলো intra-cluster distance minimize করা (cluster এর ভেতরের distance কমানো)

📊 Supervised vs Unsupervised Learning

Aspect Supervised Learning Unsupervised Learning (Clustering)
Labels আছে (Target variable) নেই
Goal Predict করা Pattern খুঁজে বের করা
Examples Classification, Regression Clustering, Dimensionality Reduction
Output Known categories Discovered groups

💡 Key Takeaway

Clustering আমাদের দেয় data এর natural structure বুঝার ক্ষমতা, যেখানে আগে থেকে কোনো answer বা label জানা নেই। এটি data exploration এবং insight generation এর জন্য অত্যন্ত powerful tool।


🔄 How K-Means Actually Works

K-Means algorithm টি খুবই elegant এবং simple, কিন্তু এর initial choices এর প্রতি বেশ sensitive। চলুন step-by-step বুঝি কিভাবে এটি কাজ করে।

📝 K-Means Algorithm - Step by Step Process

Step 1️⃣: Choose k (Cluster সংখ্যা নির্ধারণ)

সবার আগে ঠিক করতে হয় আমরা কতগুলো clusters চাই।

k = 5  # আমরা 5টি গ্রুপে ভাগ করতে চাই

কিভাবে k নির্বাচন করবো?

  • 📊 Elbow Method ব্যবহার করে
  • 📈 Silhouette Score দেখে
  • 🧠 Business knowledge/Domain expertise দিয়ে

Step 2️⃣: Initialize Centroids (প্রাথমিক কেন্দ্র নির্ধারণ)

k সংখ্যক random points কে initial centroids হিসেবে select করা হয়।

🎯 K-Means++ Method (Better Initialization):

এটি intelligent way তে centroids choose করে:

  • প্রথম centroid: Random একটা point
  • পরবর্তী centroids: যতটা সম্ভব আগের centroids থেকে দূরে
  • এতে করে convergence দ্রুত হয় এবং better results পাওয়া যায়
KMeans(n_clusters=5, init="k-means++", random_state=42)

কেন K-Means++ ভালো?

  • ✅ Random initialization এর চেয়ে stable results
  • ✅ Local minimum এ আটকে যাওয়ার সম্ভাবনা কম
  • ✅ Faster convergence

Step 3️⃣: Assign Points to Nearest Centroid (Point Assignment)

প্রতিটা data point কে তার সবচেয়ে কাছের centroid এর cluster এ assign করা হয়।

**কিভাবে "কাছে" measure করা হয়? **

Euclidean Distance ব্যবহার করে:

Distance = √[(x₂-x₁)² + (y₂-y₁)²]

Example:

Point A = (50, 60)  
Centroid 1 = (55, 65) → Distance = 7.07
Centroid 2 = (30, 40) → Distance = 28.28

➡️ Point A যাবে Cluster 1 এ (কাছের centroid)

Step 4️⃣: Update Centroids (কেন্দ্র পুনঃনির্ধারণ)

প্রতিটা cluster এর assigned points গুলোর mean (average) নিয়ে নতুন centroid position calculate করা হয়।

Formula:

New Centroid = (Mean of all X coordinates, Mean of all Y coordinates)

Example:

Cluster 1 এ আছে 3টা points: 
Point 1: (20, 30)
Point 2: (25, 35)
Point 3: (30, 40)

New Centroid = ((20+25+30)/3, (30+35+40)/3)
             = (25, 35)

কি ঘটে?

  • 🎯 Centroid move করে cluster এর dense region এর দিকে
  • 📍 যেখানে বেশি points আছে সেদিকে centroid shift হয়

Step 5️⃣: Iterate Until Convergence (পুনরাবৃত্তি)

Step 3 এবং Step 4 বারবার repeat করতে থাকো যতক্ষণ না:

  1. ✅ Centroid positions আর change না হয়
  2. ✅ Point assignments আর change না হয়
  3. ✅ Maximum iterations এ পৌঁছে যায় (যেমন 300)

Convergence মানে:

Iteration 1: 50 points changed cluster
Iteration 2: 20 points changed cluster
Iteration 3: 5 points changed cluster
Iteration 4: 0 points changed cluster ✅ CONVERGED! 

🔍 What We Observed (পর্যবেক্ষণ)

1. Centroids Migrate Toward Dense Regions

Centroid সেখানে চলে যায় যেখানে বেশি data points আছে।

2. Assignments Stabilize as Centroids Settle

প্রথম দিকে points jump করে, শেষে stable হয়ে যায়।

3. Simple Logic Produces Complex Patterns

শুধু distance calculation এবং mean দিয়েই complex customer segments বা patterns বের হয়ে আসে!


⚠️ Critical Insights (গুরুত্বপূর্ণ বিষয়)

🎲 Initial Centroid Choice Matters

# Different random states = Different results
KMeans(n_clusters=5, random_state=10)  # Result A
KMeans(n_clusters=5, random_state=50)  # Result B (may differ!)

Solution: K-Means++ initialization ব্যবহার করো।

🔄 K-Means Can Get Stuck in Local Minima

Algorithm সবসময় global optimum solution নাও দিতে পারে।

Solution: Multiple times run করো different initializations দিয়ে।

📊 Small Changes → Different Results

k এর value একটু change করলেই সম্পূর্ণ ভিন্ন clusters তৈরি হতে পারে।

Key Point: K-Means mathematically straightforward কিন্তু highly parameter-sensitive!


🧮 Mathematical Objective

K-Means minimize করতে চায়:

Minimize: Σ Σ ||xᵢ - cⱼ||²

যেখানে:
xᵢ = i-th data point
cⱼ = j-th centroid
||xᵢ - cⱼ||² = squared Euclidean distance

সহজ ভাষায়:
"প্রতিটা point থেকে তার centroid এর distance এর সমষ্টি যতটা কম করা যায়"


💡 Key Takeaways

✅ K-Means একটি iterative optimization algorithm
✅ Distance + Mean এই দুটো concept ই যথেষ্ট powerful
K-Means++ initialization অবশ্যই ব্যবহার করা উচিত
✅ Algorithm simple কিন্তু initial choices matter
✅ Convergence guarantee আছে, কিন্তু global optimum নাও হতে পারে


⚙️ Choosing k and Practical Considerations

K-Means সফলভাবে implement করতে হলে সঠিক preparation এবং evaluation প্রয়োজন। এর requirements এবং limitations দুটোই বুঝতে হবে।


📏 Scaling is Mandatory (স্কেলিং আবশ্যক)

K-Means distance-based algorithm, তাই feature scaling অত্যন্ত গুরুত্বপূর্ণ।

কেন Scaling দরকার?

যদি features এর scale different হয়, তাহলে বড় range এর feature clustering process কে dominate করবে এবং results বিকৃত হবে।

Example Without Scaling:

Feature 1: Annual Income = 15-140 (range = 125)
Feature 2: Spending Score = 1-100 (range = 99)

Distance calculation এ Annual Income বেশি প্রভাব ফেলবে ❌

Solution: StandardScaler ব্যবহার করো

from sklearn.preprocessing import StandardScaler

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

# এখন সব features এর mean = 0, std = 1 ✅

After Scaling:

Feature 1: Mean = 0, Std = 1
Feature 2: Mean = 0, Std = 1

এখন দুটো features সমান গুরুত্ব পাবে ✅

অন্যান্য Scaling Methods:

  • MinMaxScaler - Values 0 থেকে 1 এর মধ্যে scale করে
  • RobustScaler - Outliers handle করতে ভালো
  • Normalizer - Row-wise scaling

📉 The Elbow Method (সঠিক k খুঁজে বের করা)

এই technique inertia vs k এর graph plot করে optimal clusters সংখ্যা identify করতে সাহায্য করে।

Inertia কি?

Inertia = প্রতিটা point থেকে তার centroid এর squared distance এর সমষ্টি

Inertia = Σ ||xᵢ - nearest_centroid||²

কম Inertia = ভালো clustering

কিভাবে কাজ করে?

inertia_values = []

for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, init="k-means++", random_state=42)
    kmeans.fit(X_scaled)
    inertia_values.append(kmeans.inertia_)

# Plot করো
plt.plot(range(1, 11), inertia_values, marker='o')

"Elbow" খুঁজে বের করো

Inertia
   |
400|•
   |  
300|  •
   |    
200|     •
   |       •___
100|           •___•___•___•
   |________________________
    1  2  3  4  5  6  7  8  9  10  (k)
              ↑
           Elbow Point (k=5)

Interpretation:

  • k=1 থেকে k=5: Inertia দ্রুত কমছে (significant improvement)
  • k=5 এর পর: Inertia আস্তে কমছে (diminishing returns)
  • k=5 হলো optimal choice (Elbow point)

কি দেখবে?

✅ যেখানে curve এর slope হঠাৎ change হয়
✅ যেখানে আর বেশি clusters add করলে তেমন benefit নেই
⚠️ কখনো কখনো clear elbow নাও থাকতে পারে


📊 Evaluation Strategies (মূল্যায়ন পদ্ধতি)

যেহেতু clustering এ true labels নেই, তাই indirect metrics ব্যবহার করতে হয়।


1️⃣ Inertia (Within-Cluster Sum of Squares - WCSS)

kmeans = KMeans(n_clusters=5)
kmeans.fit(X_scaled)
print("Inertia:", kmeans.inertia_)

Lower is Better
✅ Clusters compact (ঘনসন্নিবদ্ধ)
⚠️ শুধু inertia দেখে decision নিও না (k বাড়ালে সবসময় কমবে)


2️⃣ Silhouette Score (Cluster Separation Quality)

Measure করে একটা point তার নিজের cluster এর কতটা কাছাকাছি এবং অন্য cluster থেকে কতটা দূরে।

from sklearn.metrics import silhouette_score

score = silhouette_score(X_scaled, labels)
print("Silhouette Score:", score)

Range: -1 to +1

Score > 0.7  = Excellent clustering ⭐⭐⭐
Score 0.5-0.7 = Good clustering ⭐⭐
Score 0.25-0.5 = Weak clustering ⭐
Score < 0.25 = Poor clustering ❌

আমাদের Project এ:

Silhouette Score: 0.554 ✅ Good Quality

3️⃣ Visualization (দৃশ্যমান যাচাই)

sns.scatterplot(x=X[:,0], y=X[:,1], hue=labels, palette='viridis')
plt.title("Cluster Visualization")

কি দেখবে?

  • ✅ Clusters visually separated কিনা
  • ✅ Similar points একই cluster এ আছে কিনা
  • ❌ Overlapping clusters আছে কিনা

4️⃣ Domain Expertise (ব্যবসায়িক জ্ঞান)

সবচেয়ে গুরুত্বপূর্ণ validation!

প্রশ্ন করো:

  • 🤔 Clusters কি business sense করে?
  • 🤔 প্রতিটা segment এর জন্য actionable strategy তৈরি করা যাবে?
  • 🤔 Stakeholders এই segmentation বুঝবে এবং use করবে?

Example:

❌ Cluster 1: Random mixed customers
✅ Cluster 1: High-income low-spenders (Potential premium segment)

দ্বিতীয়টি actionable এবং meaningful! 

⚠️ Critical Reminder

"A visually appealing cluster plot doesn't guarantee a practically useful model."

Always Validate Against:

Business Objectives - Goals achieve হচ্ছে কিনা?
Domain Knowledge - Industry experts কি বলছে?
Actionability - Results দিয়ে কি practical actions নেওয়া যাবে?
Interpretability - Teams কি easily বুঝতে পারবে?



🚧 Limitations & When to Use

❌ K-Means এর সীমাবদ্ধতা

  • ❌ শুধু spherical clusters এ ���াজ করে
  • Outliers দ্বারা প্রভাবিত হয়
  • k আগে থেকে জানতে হয়
  • ❌ Different sized clusters handle করতে পারে না
  • ❌ Non-convex shapes এ fail করে
  • ❌ Initialization sensitive

✅ কখন K-Means ব্যবহার করবে

  • ✅ Spherical/circular shaped clusters
  • ✅ Similar sized clusters
  • ✅ Well-separated data
  • ✅ Large datasets (fast & efficient)
  • ✅ High-dimensional data (with scaling)

🌍 Real-World Applications

Common Use Cases:

  • 🛒 Customer Segmentation - গ্রাহকদের behavior অনুযায়ী group করা
  • 🖼️ Image Compression - Similar colors cluster করে file size কমানো
  • 📰 Document Clustering - Similar topics এর articles group করা
  • 🏥 Medical Diagnosis - Patient risk groups তৈরি করা
  • 🌐 Network Security - Anomaly detection
  • 📍 Location Services - Delivery zones optimize করা

🔄 Alternative Algorithms

যখন K-Means suitable না:

Algorithm কখন ব্যবহার করবে
DBSCAN Non-spherical clusters, outliers আছে
Hierarchical Cluster hierarchy দেখতে চাও

💡 Key Takeaways

✅ K-Means = simple, fast, effective (সঠিক data এর জন্য)
Scaling mandatory - distance-based algorithm
K-Means++ initialization essential
Elbow + Silhouette দিয়ে k select করো
Spherical clusters এ best, non-spherical এ fail
Business validation সবচেয়ে important
✅ সব data এর জন্য suitable না - alternatives জানতে হবে


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors