Quay lại Blog
Metrics & AnalyticsCập nhật: 1 tháng 2, 202617 phút đọc

Customer Segmentation: kỹ thuật nâng cao để Personalization & Targeting

Hướng dẫn Customer Segmentation từ RFM analysis đến K-Means clustering. Case study e-commerce VN: email open rate 2% → 18% (+800%), conversion +467%. Kèm SQL & Python code.

Đặng Quỳnh Hương

Đặng Quỳnh Hương

Senior Data Scientist

Customer segmentation visualization showing different customer groups and personas
#Customer Segmentation#RFM Analysis#K-Means Clustering#Personalization#Machine Learning#Customer Analytics#Marketing Automation

TL;DR

Customer Segmentation là việc chia khách hàng thành các nhóm có đặc điểm, hành vi, hoặc nhu cầu tương tự nhau để cá nhân hoá marketing, sản phẩm, và trải nghiệm khách hàng.

Theo McKinsey, doanh nghiệp áp dụng customer segmentation hiện đại có ROI cao hơn 86% so với phương pháp truyền thống. Cụ thể:

  • Cá nhân hoá: Email gửi đại trà có CTR ~2%, email theo segment đạt CTR ~15%
  • Giảm chi phí: Marketing đúng segment giúp giảm CAC 30-50%
  • Tăng LTV: Tập trung nguồn lực vào nhóm khách hàng giá trị cao nhất
Phương phápDựa trênỨng dụngĐộ khó
DemographicTuổi, giới tính, thu nhậpB2C marketingDễ
GeographicVị trí, múi giờLogistics, bản địa hoáDễ
FirmographicQuy mô công ty, ngànhB2B salesTrung bình
BehavioralHành vi, usage patternsCá nhân hoá sản phẩmTrung bình
RFMRecency, Frequency, MonetaryE-commerce retentionTrung bình
ML ClusteringKết hợp tất cảCá nhân hoá nâng caoKhó

Customer Segmentation là gì?

Customer Segmentation là quá trình chia tệp khách hàng thành các nhóm nhỏ hơn (segments) dựa trên đặc điểm chung, hành vi, hoặc nhu cầu tương tự.

Mục đích chính:

  • Cá nhân hoá: Tùy chỉnh thông điệp, ưu đãi, sản phẩm cho từng segment
  • Ưu tiên nguồn lực: Tập trung vào nhóm khách hàng có giá trị cao
  • Hiểu khách hàng: Phân tích sâu từng nhóm để ra quyết định dựa trên dữ liệu

Theo Gartner, 95% khách hàng sẵn sàng tương tác nhiều hơn với thương hiệu biết cá nhân hoá trải nghiệm mà vẫn tôn trọng quyền riêng tư. Đây là lý do customer segmentation không chỉ là công cụ marketing mà còn là nền tảng của chiến lược Data Platform hiện đại.

So sánh: gửi đại trà vs Segmentation

Vấn đề với gửi đại trà:

Campaign: "Giảm 50% tất cả sản phẩm!"

Kết quả:
- Khách mới: 5% conversion (giá rẻ thu hút)
- Khách VIP: 1% conversion (không cần giảm giá, thậm chí khó chịu)
- Khách sắp rời: 2% conversion (cần re-engagement, không phải giảm giá)

Tổng: 2.5% conversion

Với Customer Segmentation:

Segment 1: Khách mới
→ Email: "Chào mừng! Giảm 20% đơn hàng đầu tiên"
→ Conversion: 15%

Segment 2: Khách VIP
→ Email: "Bạn được quyền truy cập sớm bộ sưu tập mới"
→ Conversion: 12%

Segment 3: Khách sắp rời
→ Email: "Chúng tôi nhớ bạn! Đây là những gì mới + gợi ý riêng cho bạn"
→ Conversion: 8%

Tổng: 11.7% conversion (gấp 4.7 lần!)

Khi nào nên segment?

Nên segment khi:

  • Có đủ khách hàng (trên 1.000 khách hàng hoạt động)
  • Tệp khách hàng đa dạng (không phải tất cả giống nhau)
  • Có nguồn lực để cá nhân hoá cho từng segment
  • Có dữ liệu để phân nhóm (hành vi, nhân khẩu học...)

Chưa cần segment khi:

  • Quá ít khách hàng (dưới 500)
  • Khách hàng rất đồng nhất
  • Không có cách cá nhân hoá (sản phẩm/thông điệp giống nhau cho tất cả)

Các phương pháp Customer Segmentation

Demographic Segmentation (Đơn giản nhất)

Phân nhóm theo tuổi, giới tính, thu nhập, trình độ học vấn, nghề nghiệp.

SELECT
  CASE
    WHEN age BETWEEN 18 AND 24 THEN 'Gen Z'
    WHEN age BETWEEN 25 AND 40 THEN 'Millennial'
    WHEN age BETWEEN 41 AND 56 THEN 'Gen X'
    WHEN age > 56 THEN 'Boomer'
  END AS age_segment,
  gender,
  COUNT(*) AS customer_count,
  AVG(lifetime_value) AS avg_ltv
FROM customers
GROUP BY age_segment, gender
ORDER BY avg_ltv DESC;

Ứng dụng: Fashion e-commerce phân nhóm theo giới tính và tuổi để cá nhân hoá trang chủ. Ngân hàng phân theo thu nhập để gợi ý sản phẩm phù hợp (tiết kiệm vs đầu tư).

Hạn chế: Demographic không dự đoán hành vi tốt — hai người cùng tuổi, cùng giới tính có thể có hành vi mua hàng hoàn toàn khác nhau.

Behavioral Segmentation (Mạnh nhất)

Phân nhóm theo lịch sử mua hàng, mức độ sử dụng sản phẩm, feature adoption, và mức độ tương tác. Đây là phương pháp được khuyến nghị cho các doanh nghiệp đã có hệ thống Data Platform thu thập dữ liệu hành vi.

WITH user_activity AS (
  SELECT
    user_id,
    COUNT(DISTINCT DATE(event_timestamp)) AS active_days_last_30,
    COUNT(*) AS total_events_last_30
  FROM events
  WHERE event_timestamp >= CURRENT_DATE - INTERVAL '30 days'
  GROUP BY user_id
)

SELECT
  CASE
    WHEN active_days_last_30 >= 20 THEN 'Power User'
    WHEN active_days_last_30 BETWEEN 10 AND 19 THEN 'Regular User'
    WHEN active_days_last_30 BETWEEN 1 AND 9 THEN 'Casual User'
    ELSE 'Inactive'
  END AS engagement_segment,
  COUNT(*) AS user_count,
  AVG(total_events_last_30) AS avg_events
FROM user_activity
GROUP BY engagement_segment;

Ứng dụng phổ biến:

  • SaaS: Power users → upsell tính năng premium
  • E-commerce: Người mua thường xuyên → chương trình VIP
  • Mobile app: Người dùng ít tương tác → chiến dịch re-engagement

RFM Analysis: phương pháp phổ biến nhất cho E-commerce

RFM là gì?

Theo Springer Nature (2023), RFM analysis xuất hiện trong 80% các nghiên cứu về customer segmentation và là phương pháp feature selection phổ biến nhất. RFM phân tích khách hàng dựa trên 3 yếu tố:

  • Recency (R): Mua hàng gần đây nhất khi nào? (số ngày kể từ đơn cuối)
  • Frequency (F): Mua hàng bao nhiêu lần? (tổng số đơn hàng)
  • Monetary (M): Tổng chi tiêu bao nhiêu? (tổng doanh thu)

Tại sao RFM hiệu quả?

  • Đơn giản, dễ hiểu và giải thích cho stakeholders
  • Chỉ cần dữ liệu giao dịch (không cần Machine Learning)
  • Đã được chứng minh hiệu quả qua hơn 80 năm trong direct marketing
  • Theo Admetrics (2026), retargeting segment 5-5-5 có thể đạt ROAS gấp 2 lần so với campaign chung

SQL tính RFM Scores

WITH rfm_calc AS (
  SELECT
    customer_id,
    DATEDIFF(CURRENT_DATE, MAX(order_date)) AS recency,
    COUNT(DISTINCT order_id) AS frequency,
    SUM(order_value) AS monetary
  FROM orders
  WHERE order_date >= CURRENT_DATE - INTERVAL '365 days'
  GROUP BY customer_id
),

rfm_scores AS (
  SELECT
    customer_id,
    recency,
    frequency,
    monetary,
    -- Recency: Càng gần đây, score càng cao
    NTILE(5) OVER (ORDER BY recency DESC) AS r_score,
    -- Frequency: Càng nhiều lần, score càng cao
    NTILE(5) OVER (ORDER BY frequency ASC) AS f_score,
    -- Monetary: Càng chi nhiều, score càng cao
    NTILE(5) OVER (ORDER BY monetary ASC) AS m_score
  FROM rfm_calc
)

SELECT
  customer_id,
  recency,
  frequency,
  monetary,
  r_score,
  f_score,
  m_score,
  CONCAT(r_score, f_score, m_score) AS rfm_score
FROM rfm_scores;

Phân nhóm 11 RFM Segments

SELECT
  CASE
    WHEN r_score >= 4 AND f_score >= 4 AND m_score >= 4 THEN 'Champions'
    WHEN r_score >= 3 AND f_score >= 3 AND m_score >= 3 THEN 'Loyal Customers'
    WHEN r_score >= 4 AND f_score <= 2 AND m_score <= 2 THEN 'New Customers'
    WHEN r_score >= 3 AND f_score <= 2 AND m_score <= 2 THEN 'Promising'
    WHEN r_score >= 3 AND f_score >= 3 AND m_score <= 2 THEN 'Need Attention'
    WHEN r_score >= 4 AND f_score <= 1 AND m_score <= 1 THEN 'About to Sleep'
    WHEN r_score <= 2 AND f_score >= 3 AND m_score >= 3 THEN 'At Risk'
    WHEN r_score <= 2 AND f_score >= 4 AND m_score >= 4 THEN 'Cant Lose Them'
    WHEN r_score <= 1 AND f_score >= 2 AND m_score >= 2 THEN 'Hibernating'
    WHEN r_score <= 2 AND f_score <= 2 AND m_score <= 2 THEN 'Lost'
    ELSE 'Others'
  END AS rfm_segment,
  COUNT(*) AS customer_count,
  AVG(monetary) AS avg_monetary,
  SUM(monetary) AS total_revenue
FROM rfm_scores
GROUP BY rfm_segment
ORDER BY total_revenue DESC;

Kết quả ví dụ cho một sàn e-commerce VN:

SegmentSố lượngRecency TBFrequency TBMonetary TBTổng doanh thu
Champions50015 ngày25 đơn100M VNĐ50 tỷ
Loyal Customers1.20045 ngày15 đơn50M VNĐ60 tỷ
At Risk800150 ngày18 đơn60M VNĐ48 tỷ
New Customers2.00010 ngày1 đơn2M VNĐ4 tỷ
Lost3.000300 ngày8 đơn24M VNĐ72 tỷ

Hành động cho từng RFM Segment

Champions (R=5, F=5, M=5):

  • Hành động: Tri ân, quyền truy cập sớm, đãi ngộ VIP
  • Email: "Cảm ơn bạn! Xem trước bộ sưu tập mới trước 24 giờ"
  • Ưu đãi: Miễn phí vận chuyển vĩnh viễn, early access

At Risk (R=1-2, F=3-5, M=3-5):

  • Hành động: Re-engage ngay! (khách hàng giá trị cao đang rời đi)
  • Email: "Chúng tôi nhớ bạn! Có gì chúng tôi làm chưa tốt?" + ưu đãi cá nhân
  • Ưu đãi: Voucher giảm 15-25%, khảo sát kèm quà

New Customers (R=4-5, F=1, M=1-2):

  • Hành động: Onboarding, thúc đẩy đơn hàng thứ hai
  • Email: "Chào mừng! Đây là cách tận dụng tốt nhất sản phẩm"
  • Ưu đãi: Giảm 10% cho đơn hàng thứ hai

Lost (R=1, F=1-2, M=1-2):

  • Hành động: Win-back mạnh tay hoặc dừng chi phí
  • Email: "Cơ hội cuối! Giảm 30% để quay lại"
  • Ưu đãi: Giảm sâu 30-50% hoặc loại khỏi danh sách

K-Means Clustering: phương pháp Machine Learning

Khi nào dùng K-Means?

RFM rất tốt cho e-commerce, nhưng K-Means mạnh hơn khi:

  • Nhiều features (trên 3): Demographics + Behavioral + Firmographic
  • Patterns phức tạp, không rõ ràng bằng rule-based
  • Muốn phát hiện hidden segments mà RFM không thấy

Nghiên cứu trên ResearchGate (2025) cho thấy kết hợp RFM với Hierarchical Clustering cho Silhouette Score 0.47Calinski-Harabasz Index 3.787, tốt hơn K-Means đơn thuần.

Triển khai K-Means bằng Python

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# Load dữ liệu khách hàng
df = pd.read_sql("""
  SELECT
    customer_id, recency, frequency, monetary,
    avg_order_value, total_sessions,
    avg_session_duration, products_viewed
  FROM customer_features
""", conn)

features = ['recency', 'frequency', 'monetary', 'avg_order_value',
            'total_sessions', 'avg_session_duration', 'products_viewed']
X = df[features]

# Chuẩn hoá features (quan trọng cho K-Means!)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Elbow method để tìm K tối ưu
inertias = []
for k in range(2, 11):
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    kmeans.fit(X_scaled)
    inertias.append(kmeans.inertia_)

# Chọn K=5 dựa trên elbow curve
optimal_k = 5
kmeans = KMeans(n_clusters=optimal_k, random_state=42, n_init=10)
df['cluster'] = kmeans.fit_predict(X_scaled)

# Phân tích từng cluster
cluster_summary = df.groupby('cluster')[features].mean()
print(cluster_summary)

Đặt tên và phân tích Cluster

Sau khi chạy K-Means, bước quan trọng nhất là đặt tên có ý nghĩa cho từng cluster dựa trên đặc điểm:

for cluster_id in range(optimal_k):
    cluster_data = df[df['cluster'] == cluster_id]
    print(f"Cluster {cluster_id}: {len(cluster_data):,} khách hàng")
    print(f"  Recency TB: {cluster_data['recency'].mean():.0f} ngày")
    print(f"  Frequency TB: {cluster_data['frequency'].mean():.1f} đơn")
    print(f"  Monetary TB: {cluster_data['monetary'].mean():,.0f} VNĐ")

    # Gán tên dựa trên đặc điểm
    if cluster_data['recency'].mean() < 30 and cluster_data['frequency'].mean() > 20:
        print("  → Champions")
    elif cluster_data['recency'].mean() > 120 and cluster_data['frequency'].mean() > 10:
        print("  → At Risk")
    elif cluster_data['recency'].mean() < 30 and cluster_data['frequency'].mean() <= 2:
        print("  → New Customers")

Case Study: E-commerce Việt Nam — RFM Segmentation

Bối cảnh

Một sàn e-commerce tại Việt Nam với hơn 10 triệu người dùng gặp vấn đề:

  • Trước đây: Gửi khuyến mãi đại trà cho tất cả người dùng
  • Kết quả: Email open rate chỉ 2%, tỷ lệ huỷ đăng ký cao

Triển khai RFM

Bước 1: Tính RFM scores cho toàn bộ user base

Bước 2: Phân nhóm và xây dựng chiến dịch riêng

SegmentQuy môHành độngKênhƯu đãi
Champions500K (5%)Tri ânEmail, App pushMiễn phí vận chuyển, early access
Loyal1.5M (15%)UpsellEmailBundle deals, giảm 10%
At Risk800K (8%)Win-backEmail, SMS, AdsGiảm 20%, gợi ý cá nhân
New3M (30%)OnboardingApp, EmailGiảm 15% đơn thứ 2
Lost4.2M (42%)Win-back mạnh hoặc dừngSMS (1 lần)Giảm 40% hoặc loại khỏi list

Bước 3: Email cá nhân hoá theo segment

Email cho Champions:

Tiêu đề: [VIP] Bạn được chọn trước 24h!
Nội dung: Cảm ơn vì đã là khách hàng thân thiết!
Sản phẩm mới sẽ mở bán ngày mai, nhưng bạn có thể mua NGAY BÂY GIỜ.
[Mua Ngay]

Email cho At Risk:

Tiêu đề: Chúng tôi nhớ bạn! Voucher 20% đặc biệt
Nội dung: Bạn đã không mua hàng 3 tháng rồi.
Có gì chúng tôi làm chưa tốt không?
Đây là voucher 20% để bạn quay lại thử.
[Mua Hàng] [Góp Ý]

Kết quả sau 3 tháng

Chỉ sốTrướcSauThay đổi
Email Open Rate2%18%+800%
Click Rate0.5%4.2%+740%
Conversion Rate1.2%6.8%+467%
Tỷ lệ huỷ đăng ký0.8%0.2%-75%
Doanh thu/email3.500 VNĐ28.000 VNĐ+700%

Kết quả này phù hợp với dữ liệu từ Braze: RFM segmentation giúp giảm chi phí marketing đáng kể bằng cách tập trung ngân sách vào các nhóm có khả năng chuyển đổi cao nhất.


Case Study: SaaS Startup — Behavioral Clustering

Bối cảnh

Một công ty SaaS B2B (công cụ quản lý dự án) với 50.000 người dùng muốn tăng tỷ lệ nâng cấp từ gói miễn phí sang trả phí.

Phân tích K-Means

Chạy K-Means clustering với 7 features hành vi, phát hiện 4 nhóm chính:

Cluster "Power Users" (5%, 2.500 người):

  • Nhiều dự án (trung bình 15), đội nhóm lớn (trung bình 20 thành viên)
  • Đã trả phí → Hành động: upsell gói Enterprise

Cluster "Growing Teams" (15%, 7.500 người):

  • Dự án vừa (trung bình 5), đội nhỏ (trung bình 8 thành viên)
  • Gói miễn phí, sắp chạm giới hạn → Hành động: chiến dịch nâng cấp

Cluster "Solo Users" (60%, 30.000 người):

  • Ít dự án (trung bình 2), không mời đội nhóm
  • Tương tác thấp → Hành động: nội dung giáo dục, onboarding

Cluster "Churned" (20%, 10.000 người):

  • Tạo tài khoản nhưng không sử dụng
  • Chưa kích hoạt → Hành động: chiến dịch re-onboarding

Kết quả

Tập trung vào nhóm "Growing Teams" với chiến dịch nâng cấp có mục tiêu:

  • In-app: "Đội ngũ bạn đang phát triển! Nâng cấp để mở khoá dự án không giới hạn"
  • Ưu đãi: Giảm 20% năm đầu tiên
  • Kết quả: Tỷ lệ nâng cấp 25% (so với 2% trước đó)

MRR tăng từ $200K → $350K (+75%) trong 6 tháng nhờ tập trung vào segment có ROI cao nhất.


Best Practices

Bắt đầu đơn giản, nâng dần

Giai đoạn 1: Demographic/Geographic (tuần 1)
Giai đoạn 2: RFM Analysis (tuần 2-3)
Giai đoạn 3: Behavioral segments (tháng 2)
Giai đoạn 4: ML Clustering (tháng 3+)

Segment phải có hành động cụ thể

Segment tệ: "Người dùng thích cả mèo và chó" → không biết làm gì với thông tin này.

Segment tốt: "Khách hàng giá trị cao đang có nguy cơ rời đi" → chiến dịch win-back với ưu đãi cá nhân.

Số lượng segment cân đối

  • Quá nhiều (50 segments): Không đủ nguồn lực cá nhân hoá từng nhóm
  • Quá ít (2 segments): Bỏ lỡ sự khác biệt quan trọng
  • Quy tắc: 5-10 segments là phù hợp cho hầu hết doanh nghiệp

Cập nhật định kỳ

Theo Gartner, doanh nghiệp thành công review và điều chỉnh chiến lược segmentation mỗi 90 ngày để theo kịp thay đổi hành vi khách hàng. Cụ thể:

  • Chạy lại RFM scores hàng tháng
  • Review segment composition hàng quý
  • Đánh giá lại toàn bộ framework mỗi 6 tháng

Quyền riêng tư và đạo đức

  • Công khai việc phân nhóm trong Privacy Policy
  • Cho phép khách hàng từ chối marketing cá nhân hoá
  • Không phân biệt đối xử (ví dụ: tăng giá cho nhóm nhân khẩu học cụ thể)
  • Không sử dụng dữ liệu nhạy cảm (sức khoẻ, tôn giáo...)

Công cụ và Tech Stack

Phân tích và Segmentation

  • SQL + Python: BigQuery/Snowflake cho RFM, Python (Pandas, Scikit-learn) cho clustering
  • BI Tools: Looker, Tableau, Metabase để trực quan hoá segments
  • Data Pipeline: dbt để tự động hoá tính toán segment hàng ngày

Kích hoạt (Activation)

  • Braze: Segmentation nâng cao, multi-channel (chi phí cao)
  • Customer.io: Behavioral triggers, chiến dịch theo segment (chi phí vừa)
  • Mailchimp: Segmentation cơ bản (chi phí thấp)

Customer Data Platform

Nếu doanh nghiệp của bạn cần thu thập và đồng bộ dữ liệu khách hàng từ nhiều nguồn, hãy cân nhắc Customer Data Platform (CDP) như Segment, RudderStack, hoặc mParticle.


Kết luận

Customer Segmentation là nền tảng của cá nhân hoá và targeted marketing. Thay vì gửi cùng một thông điệp cho tất cả, segmentation giúp bạn hiểu và phục vụ từng nhóm khách hàng tốt hơn.

Tóm tắt

  • Bắt đầu với RFM — đơn giản nhất, hiệu quả nhất cho e-commerce
  • Thêm behavioral data khi có đủ nguồn lực
  • Dùng ML Clustering cho cá nhân hoá nâng cao (khi có đủ dữ liệu và đội ngũ)
  • Mỗi segment cần hành động rõ ràng — segment không actionable là segment vô nghĩa
  • Cập nhật định kỳ — hành vi khách hàng thay đổi, segments phải theo kịp

Chỉ số cần theo dõi

Chỉ sốĐịnh nghĩaMục tiêu
Conversion Rate theo segmentTỷ lệ chuyển đổi của từng nhómTăng theo thời gian
LTV theo segmentGiá trị vòng đời của từng nhómPhát triển nhóm giá trị cao
Segment MovementTỷ lệ khách hàng di chuyển lên/xuốngNhiều khách di chuyển lên
Campaign ROI theo segmentROI chiến dịch của từng nhómTập trung vào nhóm ROI cao

Bước tiếp theo

Sau khi triển khai Customer Segmentation:


Carptech — giải pháp Customer Segmentation cho doanh nghiệp Việt Nam

Tại Carptech, chúng tôi giúp doanh nghiệp Việt Nam xây dựng chiến lược segmentation từ đầu:

  • Phân tích Segmentation: RFM, behavioral, ML clustering
  • Data Pipeline: Tự động tính toán segment hàng ngày với modern data stack
  • Activation: Tích hợp với email tools, CRM, ad platforms
  • Dashboard: Theo dõi segment real-time với Looker, Metabase

Liên hệ tư vấn | Đặt lịch trao đổi

Đăng ký nhận bài viết mới

Nhận thông báo khi chúng tôi publish bài viết mới về Data Platform, Analytics và AI.

Có câu hỏi về Data Platform?

Đội ngũ chuyên gia của Carptech sẵn sàng tư vấn miễn phí về giải pháp phù hợp nhất cho doanh nghiệp của bạn. Đặt lịch tư vấn 60 phút qua Microsoft Teams hoặc gửi form liên hệ.

✓ Miễn phí 100% • ✓ Microsoft Teams • ✓ Không cam kết dài hạn