🎯 Mục tiêu bài học
- Phân khúc khách hàng theo mô hình Mass / Affluent / Priority
- Áp dụng RFM (Recency-Frequency-Monetary) trên dữ liệu giao dịch ngân hàng
- Xác định khách hàng tiềm năng cross-sell (bán chéo sản phẩm)
- Phân tích Customer Lifetime Value (CLV) cơ bản
| Thông tin | Chi tiết |
|---|---|
| ⏱️ Thời lượng | 2 giờ |
| 📖 Chủ đề chính | Customer Segmentation, RFM, Cross-sell, CLV |
| 💡 Kiến thức cần có | Bài 04, SQL Window Functions |
| 🎯 Output | Customer Segmentation Report |
📖 Thuật ngữ quan trọng
| Thuật ngữ | Tiếng Việt | Mô tả |
|---|---|---|
| Segmentation | Phân khúc | Chia KH thành nhóm dựa trên đặc điểm chung |
| Mass | Khách hàng đại chúng | KH phổ thông, thu nhập < 20M VND |
| Affluent | Khách hàng khá giả | KH trung lưu, thu nhập 20-50M VND |
| Priority/VIP | Khách hàng ưu tiên | KH giàu có, thu nhập > 50M VND |
| RFM | Recency-Frequency-Monetary | Phân khúc theo gần đây, tần suất, giá trị |
| Cross-sell | Bán chéo | Bán thêm sản phẩm khác cho KH hiện tại |
| Up-sell | Bán nâng cấp | Nâng hạn mức, nâng tier cho KH |
| CLV | Customer Lifetime Value | Giá trị trọn đời của khách hàng |
| Wallet Share | Tỷ trọng ví tiền | % nhu cầu tài chính KH dùng tại ngân hàng |
| Churn | Rời bỏ | KH ngừng sử dụng dịch vụ |
Checkpoint
Ngân hàng phân KH thành Mass (đại chúng), Affluent (khá giả), Priority (VIP) theo thu nhập và số dư. RFM phân tích hành vi giao dịch: Recency (gần đây nhất), Frequency (tần suất), Monetary (giá trị). Cross-sell tăng wallet share — bán thêm sản phẩm cho KH hiện tại ít tốn kém hơn 5-7x so với tìm KH mới.
👥 Phân khúc theo Thu nhập & Giá trị
Mô hình phân khúc ngân hàng
| Segment | Tỷ trọng | Tiêu chí | Chiến lược phục vụ |
|---|---|---|---|
| ⭐ PRIORITY / VIP | 5% | Income > 50M | Balance > 500M | RM chuyên biệt, ưu đãi đặc biệt |
| 📎 AFFLUENT | 15% | Income 20–50M | Balance 100–500M | Gói sản phẩm, tư vấn tài chính |
| 👥 MASS | 80% | Income < 20M | Balance < 100M | Self-service, digital banking |
SQL: Phân khúc theo thu nhập
1-- 1. Customer segmentation theo thu nhập2SELECT 3 CASE 4 WHEN c.monthly_income >= 50000000 THEN 'Priority (>50M)'5 WHEN c.monthly_income >= 20000000 THEN 'Affluent (20-50M)'6 ELSE 'Mass (<20M)'7 END AS customer_segment,8 COUNT(*) AS customer_count,9 ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 1) AS pct_customers,10 ROUND(AVG(c.monthly_income), 0) AS avg_income,11 -- Loan metrics12 COUNT(DISTINCT l.application_id) AS total_loans,13 ROUND(AVG(l.loan_amount), 0) AS avg_loan_amount,14 ROUND(AVG(l.default_flag) * 100, 2) AS default_rate_pct15FROM dim_customer c16LEFT JOIN fact_loan_application l 17 ON c.customer_id = l.customer_id AND l.status = 'Approved'18GROUP BY 19 CASE 20 WHEN c.monthly_income >= 50000000 THEN 'Priority (>50M)'21 WHEN c.monthly_income >= 20000000 THEN 'Affluent (20-50M)'22 ELSE 'Mass (<20M)'23 END24ORDER BY avg_income DESC;SQL: Phân tích chi tiết theo segment
1-- 2. Customer profile theo segment2SELECT 3 CASE 4 WHEN c.monthly_income >= 50000000 THEN 'Priority'5 WHEN c.monthly_income >= 20000000 THEN 'Affluent'6 ELSE 'Mass'7 END AS segment,8 c.employment_type,9 COUNT(*) AS count,10 ROUND(AVG(c.age), 1) AS avg_age,11 ROUND(AVG(c.years_employed), 1) AS avg_years_employed,12 ROUND(AVG(l.credit_score), 0) AS avg_credit_score13FROM dim_customer c14LEFT JOIN fact_loan_application l ON c.customer_id = l.customer_id15GROUP BY 16 CASE 17 WHEN c.monthly_income >= 50000000 THEN 'Priority'18 WHEN c.monthly_income >= 20000000 THEN 'Affluent'19 ELSE 'Mass'20 END,21 c.employment_type22ORDER BY segment, count DESC;📊 RFM Analysis cho Ngân hàng
RFM trên Transaction Data
1-- 3. RFM Calculation2WITH rfm_base AS (3 SELECT 4 customer_id,5 DATEDIFF(DAY, MAX(transaction_date), '2024-12-31') AS recency_days,6 COUNT(*) AS frequency,7 SUM(amount) AS monetary8 FROM fact_transaction9 GROUP BY customer_id10),11rfm_scores AS (12 SELECT 13 customer_id,14 recency_days,15 frequency,16 monetary,17 NTILE(5) OVER (ORDER BY recency_days DESC) AS r_score,18 NTILE(5) OVER (ORDER BY frequency ASC) AS f_score,19 NTILE(5) OVER (ORDER BY monetary ASC) AS m_score20 FROM rfm_base21)22SELECT 23 customer_id,24 recency_days,25 frequency,26 monetary,27 r_score,28 f_score,29 m_score,30 CONCAT(r_score, f_score, m_score) AS rfm_segment,31 CASE 32 WHEN r_score >= 4 AND f_score >= 4 AND m_score >= 4 THEN 'Champions'33 WHEN r_score >= 4 AND f_score >= 3 THEN 'Loyal Customers'34 WHEN r_score >= 3 AND f_score >= 1 AND m_score >= 3 THEN 'Potential Loyalists'35 WHEN r_score >= 4 AND f_score <= 2 THEN 'New Customers'36 WHEN r_score <= 2 AND f_score >= 3 THEN 'At Risk'37 WHEN r_score <= 2 AND f_score >= 4 AND m_score >= 4 THEN 'Cannot Lose Them'38 WHEN r_score <= 2 AND f_score <= 2 THEN 'Hibernating'39 ELSE 'Need Attention'40 END AS rfm_label41FROM rfm_scores;RFM Segment Summary
1-- 4. RFM Summary2WITH rfm_labeled AS (3 -- (use the CTE above)4 SELECT customer_id, r_score, f_score, m_score, monetary,5 CASE 6 WHEN r_score >= 4 AND f_score >= 4 AND m_score >= 4 THEN 'Champions'7 WHEN r_score >= 4 AND f_score >= 3 THEN 'Loyal'8 WHEN r_score >= 3 AND m_score >= 3 THEN 'Potential Loyalists'9 WHEN r_score >= 4 AND f_score <= 2 THEN 'New Customers'10 WHEN r_score <= 2 AND f_score >= 3 THEN 'At Risk'11 WHEN r_score <= 2 AND f_score <= 2 THEN 'Hibernating'12 ELSE 'Need Attention'13 END AS rfm_label14 FROM (15 SELECT customer_id,16 NTILE(5) OVER (ORDER BY DATEDIFF(DAY, MAX(transaction_date), '2024-12-31') DESC) AS r_score,17 NTILE(5) OVER (ORDER BY COUNT(*) ASC) AS f_score,18 NTILE(5) OVER (ORDER BY SUM(amount) ASC) AS m_score,19 SUM(amount) AS monetary20 FROM fact_transaction21 GROUP BY customer_id22 ) scores23)24SELECT 25 rfm_label,26 COUNT(*) AS customer_count,27 ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 1) AS pct,28 ROUND(AVG(monetary), 0) AS avg_monetary29FROM rfm_labeled30GROUP BY rfm_label31ORDER BY avg_monetary DESC;| Segment | Hành động |
|---|---|
| Champions | Giữ chân, cross-sell sản phẩm premium |
| Loyal | Up-sell, tăng hạn mức, ưu đãi loyalty |
| At Risk | Chiến dịch reactivation, ưu đãi đặc biệt |
| Hibernating | Win-back campaign, khuyến mãi mạnh |
| New | Onboarding tốt, cross-sell sớm |
🔄 Cross-sell Analysis
Xác định cơ hội Cross-sell
1-- 5. Số sản phẩm mỗi KH đang dùng2WITH customer_products AS (3 SELECT 4 c.customer_id,5 c.monthly_income,6 COUNT(DISTINCT l.product_id) AS num_products,7 COUNT(DISTINCT p.product_type) AS num_product_types,8 STRING_AGG(DISTINCT p.product_type, ', ') AS product_list9 FROM dim_customer c10 JOIN fact_loan_application l 11 ON c.customer_id = l.customer_id AND l.status = 'Approved'12 JOIN dim_product p ON l.product_id = p.product_id13 GROUP BY c.customer_id, c.monthly_income14)15SELECT 16 num_product_types,17 COUNT(*) AS customer_count,18 ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 1) AS pct,19 ROUND(AVG(monthly_income), 0) AS avg_income20FROM customer_products21GROUP BY num_product_types22ORDER BY num_product_types;Cross-sell Opportunity
1-- 6. KH có vay tiêu dùng nhưng chưa có thẻ tín dụng → cơ hội cross-sell2WITH customer_product_flags AS (3 SELECT 4 c.customer_id,5 c.monthly_income,6 c.age,7 c.city,8 MAX(CASE WHEN p.product_type = 'Personal' THEN 1 ELSE 0 END) AS has_personal,9 MAX(CASE WHEN p.product_type = 'Credit Card' THEN 1 ELSE 0 END) AS has_credit_card,10 MAX(CASE WHEN p.product_type = 'Mortgage' THEN 1 ELSE 0 END) AS has_mortgage,11 MAX(CASE WHEN p.product_type = 'Auto' THEN 1 ELSE 0 END) AS has_auto,12 MIN(l.default_flag) AS any_default13 FROM dim_customer c14 JOIN fact_loan_application l 15 ON c.customer_id = l.customer_id AND l.status = 'Approved'16 JOIN dim_product p ON l.product_id = p.product_id17 GROUP BY c.customer_id, c.monthly_income, c.age, c.city18)19SELECT 20 'Personal → Credit Card' AS cross_sell_opportunity,21 COUNT(*) AS eligible_customers,22 ROUND(AVG(monthly_income), 0) AS avg_income,23 ROUND(AVG(age), 0) AS avg_age24FROM customer_product_flags25WHERE has_personal = 1 26 AND has_credit_card = 0 27 AND any_default = 028 AND monthly_income >= 15000000;Checkpoint
Customer Segmentation trong ngân hàng: Mass (80%, self-service) → Affluent (15%, gói sản phẩm) → Priority (5%, RM chuyên biệt). RFM trên transaction data phân loại: Champions, Loyal, At Risk, Hibernating. Cross-sell tăng wallet share — KH có 1 sản phẩm dễ mua thêm sản phẩm 2, 3. Target: KH good credit + income đủ + chưa có sản phẩm X.
📋 Tổng kết
Kiến thức đã học
| Chủ đề | Nội dung chính |
|---|---|
| Tier Segmentation | Mass / Affluent / Priority theo AUM + Income |
| RFM Analysis | Recency, Frequency, Monetary trên transaction data |
| Customer Scoring | Phân loại Champions, Loyal, At Risk, Hibernating |
| Cross-sell | Tăng số sản phẩm/KH, target KH eligible |
| Churn Prediction | Nhận diện KH có nguy cơ rời bỏ |
Key Takeaways
- ✅ Mass (80%) cần self-service, Priority (5%) cần RM chuyên biệt
- ✅ RFM trên banking data cho actionable customer segments
- ✅ Cross-sell ratio đo wallet share — target tăng từ 1.8 lên 2.5+
- ✅ Churn risk phát hiện sớm qua inactive days + giảm giao dịch
Câu hỏi tự kiểm tra
- 3 tier khách hàng trong ngân hàng khác nhau thế nào?
- RFM áp dụng cho banking data như thế nào?
- Cross-sell ratio 1.8 có nghĩa gì?
- Làm sao phát hiện khách hàng có nguy cơ churn?
Bài tiếp theo: Transaction Analysis →
🎉 Tuyệt vời! Bạn đã thành thạo Customer Segmentation trong ngân hàng!
Nhớ: Tier + RFM + Cross-sell = chiến lược khách hàng toàn diện. 20% khách hàng Priority tạo 80% lợi nhuận!
