Table of Contents

    Customer Segmentation Project

    MACHINE LEARNING

    Customer Segmentation Project

    Build a real-world clustering model that groups customers based on their behavior using K-Means.

    Project Overview

    In this hands-on project, we'll build a Customer Segmentation Model using K-Means Clustering. The goal is to group customers based on their annual income and spending behavior, helping businesses make smart, data-driven decisions.

    Goal: Segment customers into meaningful groups to enable targeted marketing, personalized offers, and improved customer engagement.

    Project Objectives

    • Understand customer data and clean it.
    • Perform Exploratory Data Analysis (EDA).
    • Apply scaling and preprocessing.
    • Use the Elbow Method to choose optimal K.
    • Apply K-Means Clustering.
    • Evaluate cluster quality using Silhouette Score.
    • Visualize and interpret customer segments.

    Prerequisites

    Required Tools:
    • Python 3.x
    • Jupyter Notebook / Google Colab
    • Libraries: pandas, numpy, matplotlib, seaborn, scikit-learn
    pip install pandas numpy matplotlib seaborn scikit-learn

    Project Workflow

    Step-by-Step Plan

    • Import libraries
    • Load dataset
    • Perform EDA
    • Feature selection
    • Scale features
    • Use Elbow Method
    • Apply K-Means
    • Visualize clusters
    • Interpret segments
    • Suggest business insights

    Step 1: Import Libraries

    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

    Step 2: Create / Load Dataset

    For demonstration, we'll create a sample dataset of mall customers.

    data = {
        "CustomerID": list(range(1, 21)),
        "Age":        [19, 21, 20, 23, 31, 22, 35, 45, 60, 55,
                       30, 40, 28, 33, 50, 27, 42, 38, 47, 25],
        "Annual_Income": [15, 16, 17, 18, 20, 25, 35, 40, 50, 55,
                          45, 60, 70, 75, 80, 90, 95, 100, 110, 120],   # in $1000
        "Spending_Score": [39, 81, 6, 77, 40, 76, 6, 94, 3, 72,
                           55, 65, 50, 60, 20, 90, 30, 85, 25, 95]   # 1-100
    }
    
    df = pd.DataFrame(data)
    print(df.head())
    Insight Each row represents a customer with their Age, Annual Income, and Spending Score.

    Step 3: Data Exploration

    print(df.shape)
    print(df.info())
    print(df.describe())
    print(df.isnull().sum())

    Visualize the distribution of each feature:

    sns.pairplot(df[["Age", "Annual_Income", "Spending_Score"]])
    plt.show()

    Step 4: Feature Selection

    For segmentation, we'll use two key features:

    X = df[["Annual_Income", "Spending_Score"]]
    print(X.head())
    These features reflect customer earnings and shopping behavior — perfect for segmentation.

    Step 5: Feature Scaling

    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    Why Important Scaling ensures both features contribute equally to clustering.

    Step 6: Find Optimal K Using Elbow Method

    wcss = []
    for k in range(1, 11):
        km = KMeans(n_clusters=k, init="k-means++", random_state=42, n_init=10)
        km.fit(X_scaled)
        wcss.append(km.inertia_)
    
    plt.plot(range(1, 11), wcss, marker="o", color="red")
    plt.title("Elbow Method")
    plt.xlabel("Number of Clusters (K)")
    plt.ylabel("WCSS")
    plt.grid(True)
    plt.show()
    Output The graph forms an "elbow shape" — pick K where the curve bends (usually K = 5).

    Step 7: Apply K-Means with Optimal K

    kmeans = KMeans(n_clusters=5, init="k-means++", random_state=42, n_init=10)
    y_kmeans = kmeans.fit_predict(X_scaled)
    
    df["Cluster"] = y_kmeans
    print(df.head())
    Output Each customer is now assigned to one of 5 distinct clusters.

    Step 8: Evaluate Cluster Quality

    score = silhouette_score(X_scaled, y_kmeans)
    print(f"Silhouette Score: {score:.3f}")
    Higher Silhouette Score (close to +1) means strong clusters.

    Step 9: Visualize Clusters

    plt.figure(figsize=(8, 6))
    sns.scatterplot(
        x=X["Annual_Income"], y=X["Spending_Score"],
        hue=y_kmeans, palette="viridis", s=100
    )
    plt.scatter(
        scaler.inverse_transform(kmeans.cluster_centers_)[:, 0],
        scaler.inverse_transform(kmeans.cluster_centers_)[:, 1],
        s=200, c="red", marker="X", label="Centroids"
    )
    plt.title("Customer Segments")
    plt.xlabel("Annual Income (k$)")
    plt.ylabel("Spending Score")
    plt.legend()
    plt.show()
    Output The plot shows different customer segments with their centroids highlighted in red.

    Step 10: Interpret Customer Segments

    Based on income and spending behavior, here are typical clusters:

    Cluster Income Spending Customer Type
    0LowLowBudget Customers
    1LowHighCareless Spenders
    2HighLowCautious Wealthy
    3HighHighPremium Customers
    4MediumMediumAverage Buyers

    Business Insights & Strategies

    Budget Customers

    • Offer discounts
    • Promote affordable products

    Careless Spenders

    • Loyalty programs
    • Targeted upsells

    Cautious Wealthy

    • Highlight premium quality
    • Use trust-based marketing

    Premium Customers

    • Exclusive offers
    • VIP membership programs

    Average Buyers

    • General promotions
    • Cross-selling strategies

    Bonus: Save the Model

    import joblib
    
    joblib.dump(kmeans, "customer_segmentation_model.pkl")
    joblib.dump(scaler, "scaler.pkl")
    
    # Load and Predict
    loaded_model = joblib.load("customer_segmentation_model.pkl")
    loaded_scaler = joblib.load("scaler.pkl")
    
    new_customer = [[70, 80]]  # Annual Income, Spending Score
    prediction = loaded_model.predict(loaded_scaler.transform(new_customer))
    print("Predicted Cluster:", prediction[0])
    Output The saved model can predict the segment of any new customer.

    Suggested Project Folder Structure

    customer_segmentation_project/
    │
    ├── data/
    │   └── customers.csv
    ├── notebooks/
    │   └── customer_segmentation.ipynb
    ├── models/
    │   └── customer_segmentation_model.pkl
    ├── visualizations/
    │   ├── elbow_plot.png
    │   └── cluster_plot.png
    ├── requirements.txt
    └── README.md

    Real-Life Analogy

    Customer Segmentation = Store Layout

    Just like supermarkets group similar products together (dairy, snacks, beverages), businesses group similar customers to better serve them. Clustering automates this process using data.

    Real-World Applications

    E-Commerce

    • Personalized recommendations
    • Targeted marketing campaigns

    Banking

    • Customer profiling
    • Loan and credit segmentation

    Telecom

    • Plan recommendation
    • Churn prediction

    Retail & FMCG

    • Sales optimization
    • Inventory planning

    Healthcare

    • Patient segmentation
    • Personalized care plans

    OTT / Streaming

    • Group users by interests
    • Recommendation engines

    Common Mistakes to Avoid

    Mistake 1 Skipping feature scaling.
    Mistake 2 Choosing K without using Elbow + Silhouette.
    Mistake 3 Ignoring outliers — they distort clusters.
    Mistake 4 Not interpreting segments in business terms.

    Best Practices

    Quick Tips

    • Use clean and recent customer data.
    • Combine Elbow + Silhouette to choose K.
    • Standardize features before clustering.
    • Use PCA for high-dimensional data.
    • Always interpret clusters in business context.
    • Save models for reuse.

    What You Learned

    Data Handling

    • Cleaning & visualization
    • Feature selection

    Clustering Skills

    • Apply K-Means
    • Evaluate using Silhouette

    Visualization

    • Cluster visualization
    • Elbow & Silhouette plots

    Business Insight

    • Interpret clusters
    • Suggest marketing actions

    Golden Rule

    REMEMBER
    Smart Clustering + Business Interpretation = Powerful Customer Strategy

    Key Takeaway

    This Customer Segmentation Project demonstrates how clustering algorithms like K-Means can transform raw customer data into actionable business insights. By identifying meaningful segments, businesses can deliver personalized experiences, boost sales, and improve customer satisfaction.