BI 7 — Phân tích nâng cao: Cohort, Retention, Funnel, RFM
Mở đầu: từ "đếm số" lên "hiểu hành vi"
Trong các bài trước, chúng ta đã biết cách lấy dữ liệu, làm sạch và dựng dashboard cơ bản. Nhưng một báo cáo chỉ nói "tháng này có 10.000 khách" thì chưa đủ để ra quyết định. Câu hỏi thật sự của lãnh đạo ngân hàng là: Những khách này có ở lại không? Họ mở app rồi bỏ ở bước nào? Ai là khách đáng giá nhất để chăm sóc?
Đó chính là địa hạt của phân tích nâng cao (advanced analytics). Bài này đi từ con số không (zero) đến mức bạn có thể tự dựng được các phân tích sau bằng SQL:
- Cohort analysis — nhóm khách theo thời điểm gia nhập để so sánh hành vi theo thời gian.
- Retention vs Churn — bao nhiêu khách ở lại, bao nhiêu rời đi.
- Funnel — khách rơi rụng ở bước nào trong một quy trình.
- RFM & Segmentation — phân khúc khách theo giá trị và hành vi.
- CLV — ước lượng giá trị một khách mang lại trong cả vòng đời.
Tất cả ví dụ SQL trong bài đều chạy được trên sandbox với ba bảng:
customers(id, full_name, city, created_at)accounts(id, customer_id, account_no, balance, currency)transactions(id, account_id, amount, kind['credit'|'debit'], created_at)
1. Cohort Analysis — nhóm theo thời điểm gia nhập
1.1 Cohort là gì?
Cohort (đoàn hệ) là một nhóm đối tượng có chung một sự kiện khởi đầu trong cùng một khoảng thời gian. Phổ biến nhất là cohort theo tháng đăng ký: tất cả khách mở tài khoản trong tháng 1/2026 là một cohort, tháng 2/2026 là cohort khác.
Ý tưởng cốt lõi: thay vì gộp tất cả khách lại thành một đống, ta chia theo tháng gia nhập rồi theo dõi từng nhóm qua thời gian. Nhờ đó ta trả lời được câu hỏi: "Khách mở tài khoản tháng 1 sau 3 tháng còn hoạt động bao nhiêu phần trăm? Có khá hơn cohort tháng 2 không?"
1.2 Đọc bảng cohort / retention curve
Một bảng cohort retention điển hình trông như sau. Mỗi hàng là một cohort (theo tháng gia nhập), mỗi cột là số tháng kể từ khi gia nhập (Month 0, Month 1, ...). Giá trị là tỷ lệ khách còn hoạt động.
| Cohort gia nhập | Số khách | M0 | M1 | M2 | M3 |
|---|---|---|---|---|---|
| 2026-01 | 1.000 | 100% | 68% | 55% | 49% |
| 2026-02 | 1.200 | 100% | 72% | 60% | 53% |
| 2026-03 | 900 | 100% | 70% | 58% | — |
Cách đọc:
- M0 luôn là 100% vì đó là tháng gia nhập (ai cũng còn "mới").
- Đường dốc xuống từ trái sang phải chính là retention curve. Dốc càng thoải càng tốt.
- So sánh hàng dọc: cohort 2026-02 giữ chân tốt hơn 2026-01 (72% so với 68% ở M1) — có thể nhờ một chương trình onboarding mới ra tháng 2.
- Ô có dấu "—" là dữ liệu chưa đủ thời gian để quan sát.
Đây là quy trình dựng cohort, mô tả bằng sơ đồ.
1.3 SQL: đếm khách theo tháng tạo (cohort đơn giản)
Bước đầu tiên và đơn giản nhất của cohort là đếm quy mô mỗi cohort theo tháng gia nhập:
▶ Chạy được trong SQL Builder
SELECT
date_trunc('month', created_at) AS cohort_month,
COUNT(id) AS new_customers
FROM customers
GROUP BY date_trunc('month', created_at)
ORDER BY cohort_month;
Hàm date_trunc('month', created_at) cắt một mốc thời gian về đầu tháng (ví dụ 2026-03-17 thành 2026-03-01), nhờ đó mọi khách trong cùng tháng gom vào một nhóm. Đây là "khung xương" của mọi phân tích cohort: trước khi đo retention, bạn phải biết mỗi cohort có bao nhiêu người.
2. Retention vs Churn — ai ở lại, ai rời đi
2.1 Định nghĩa
- Retention (giữ chân): tỷ lệ khách vẫn hoạt động sau một khoảng thời gian.
- Churn (rời bỏ): tỷ lệ khách ngừng hoạt động. Đây là mặt còn lại của cùng đồng xu.
Quan hệ cơ bản:
Retention rate + Churn rate = 100% (trong cùng một kỳ).
2.2 Công thức churn rate
Công thức phổ biến nhất cho một kỳ (ví dụ một tháng):
Churn rate = (Số khách rời đi trong kỳ) / (Số khách đầu kỳ) × 100%
Ví dụ: đầu tháng có 10.000 khách CASA đang hoạt động, cuối tháng 600 khách không còn giao dịch và rút hết số dư → churn rate = 600 / 10.000 = 6%/tháng.
Một chỉ số liên quan là revenue churn (mất doanh thu thay vì mất số lượng khách), thường quan trọng hơn vì mất 1 khách lớn đau hơn mất 10 khách nhỏ.
2.3 Vì sao churn quan trọng với ngân hàng
- Chi phí thu hút khách mới (CAC) cao hơn nhiều so với giữ chân khách cũ. Giữ khách rẻ hơn tìm khách.
- CASA (tiền gửi không kỳ hạn) là nguồn vốn giá rẻ. Khách rút CASA = ngân hàng phải huy động vốn đắt hơn để bù.
- Churn sớm cảnh báo trải nghiệm tệ: nếu cohort mới churn nhanh ở M1, có thể onboarding hoặc app đang có vấn đề.
- Cross-sell phụ thuộc retention: khách rời đi thì không thể bán thêm thẻ tín dụng, vay, bảo hiểm.
2.4 Định nghĩa "active" trong dữ liệu
Trong thực tế, "khách còn hoạt động" cần một định nghĩa rõ ràng. Một lựa chọn đơn giản: khách có ít nhất một giao dịch trong tháng đó. Câu SQL dưới đếm số tài khoản phát sinh giao dịch theo từng tháng — nền tảng để sau này ráp thành ma trận retention.
▶ Chạy được trong SQL Builder
SELECT
date_trunc('month', created_at) AS activity_month,
COUNT(DISTINCT account_id) AS active_accounts
FROM transactions
GROUP BY date_trunc('month', created_at)
ORDER BY activity_month;
3. Funnel — phân tích chuyển đổi từng bước
3.1 Funnel là gì?
Funnel (phễu) mô tả một chuỗi bước mà khách phải đi qua để đạt mục tiêu. Mỗi bước có một số người rơi rụng, nên hình dáng giống cái phễu: rộng ở trên, hẹp ở dưới. Phân tích funnel giúp tìm bước "rò rỉ" lớn nhất để tập trung tối ưu.
3.2 Ví dụ funnel onboarding ngân hàng số
Bảng tỷ lệ chuyển đổi tương ứng:
| Bước | Số người | % so với bước trước | % so với đầu phễu |
|---|---|---|---|
| Mở app | 10.000 | — | 100% |
| Hoàn tất eKYC | 6.500 | 65% | 65% |
| Mở tài khoản | 5.200 | 80% | 52% |
| Giao dịch đầu tiên | 3.100 | 60% | 31% |
Cách đọc: bước rớt mạnh nhất là Mở app → eKYC (mất 35%) và Mở tài khoản → giao dịch đầu (mất 40%). Đây là hai chỗ nên ưu tiên cải thiện: đơn giản hóa eKYC, và "kích" khách thực hiện giao dịch đầu tiên (ví dụ tặng thưởng giao dịch đầu).
3.3 Mẹo phân tích funnel
- Luôn báo cáo cả hai loại tỷ lệ: so với bước trước (để bắt rò rỉ cục bộ) và so với đầu phễu (để thấy hiệu quả tổng).
- Chia funnel theo segment (theo thành phố, theo kênh quảng cáo) để biết nhóm nào nghẽn.
- Funnel chuẩn cần dữ liệu sự kiện theo người (event log). Với schema sandbox, ta minh họa giai đoạn cuối "đã giao dịch" bằng cách đếm tài khoản có giao dịch.
4. RFM — phân khúc khách theo hành vi mua
4.1 RFM là gì?
RFM chấm điểm khách theo ba trục:
- Recency (R): gần đây nhất khách giao dịch khi nào? Càng gần càng tốt.
- Frequency (F): khách giao dịch bao nhiêu lần? Càng nhiều càng tốt.
- Monetary (M): khách mang lại bao nhiêu giá trị (tổng số dư / tổng giao dịch)? Càng cao càng tốt.
4.2 Cách chấm điểm
Cách phổ biến: với mỗi trục, chia khách thành 5 nhóm bằng nhau (quintile) và gán điểm 1–5. Khách điểm cao nhất là 5-5-5.
| Phân khúc | R | F | M | Đặc điểm | Hành động |
|---|---|---|---|---|---|
| Champions | 5 | 5 | 5 | Mới giao dịch, thường xuyên, giá trị cao | Ưu đãi VIP, cross-sell cao cấp |
| Loyal | 4 | 4 | 4 | Trung thành, đều đặn | Tri ân, gói thành viên |
| Potential Loyalist | 5 | 3 | 3 | Mới quay lại, tiềm năng | Khuyến khích tăng tần suất |
| At Risk | 2 | 4 | 4 | Từng giá trị cao, lâu chưa quay lại | Chiến dịch win-back |
| Hibernating | 1 | 1 | 2 | Lâu không hoạt động, giá trị thấp | Re-engage chi phí thấp |
Ví dụ chấm điểm cho 3 khách:
| Khách | Lần GD gần nhất | Số GD/quý | Tổng số dư | R | F | M | Điểm RFM |
|---|---|---|---|---|---|---|---|
| An | 3 ngày trước | 28 | 950 triệu | 5 | 5 | 5 | 555 → Champion |
| Bình | 90 ngày trước | 22 | 800 triệu | 2 | 4 | 4 | 244 → At Risk |
| Cường | 200 ngày trước | 2 | 5 triệu | 1 | 1 | 1 | 111 → Hibernating |
Diễn giải: An là khách "vàng", giữ bằng mọi giá. Bình từng giá trị cao nhưng lâu không giao dịch — nguy cơ churn, cần win-back ngay. Cường gần như đã rời, chỉ chăm sóc bằng chiến dịch rẻ tiền.
4.3 SQL: tần suất giao dịch theo tài khoản (trục F)
Trục Frequency có thể tính trực tiếp: đếm số giao dịch theo từng tài khoản.
▶ Chạy được trong SQL Builder
SELECT
account_id,
COUNT(id) AS tx_count
FROM transactions
GROUP BY account_id
ORDER BY tx_count DESC;
Đây chính là "F" trong RFM ở cấp tài khoản. Sau này bạn có thể ráp thêm R (từ MAX(created_at)) và M (từ tổng amount hoặc balance) để có bộ ba đầy đủ.
5. Segmentation — phân khúc khách hàng
5.1 Các trục phân khúc thường gặp
- Theo giá trị: số dư, doanh thu mang lại, CLV — phân nhóm VIP / phổ thông / cơ bản.
- Theo hành vi: tần suất giao dịch, sản phẩm đang dùng, kênh sử dụng (app, quầy).
- Theo nhân khẩu: độ tuổi, thành phố, nghề nghiệp.
RFM ở trên thực chất là một dạng phân khúc theo hành vi. Trong thực tế, ngân hàng thường kết hợp nhiều trục.
5.2 SQL: phân khúc khách theo tổng số dư
Đây là phân khúc theo giá trị kinh điển: JOIN khách với tài khoản, cộng số dư, rồi dùng CASE chia nhóm.
▶ Chạy được trong SQL Builder
-- Bước 1 (CTE): tính tổng số dư của từng khách hàng
-- Bước 2: phân nhóm theo tổng số dư rồi đếm số khách mỗi nhóm
WITH customer_balance AS (
SELECT customers.id, SUM(accounts.balance) AS total_balance
FROM customers
JOIN accounts ON accounts.customer_id = customers.id
GROUP BY customers.id
)
SELECT
CASE
WHEN total_balance >= 1000000000 THEN 'VIP'
WHEN total_balance >= 100000000 THEN 'Gold'
ELSE 'Standard'
END AS segment,
COUNT(*) AS num_customers,
SUM(total_balance) AS total_balance
FROM customer_balance
GROUP BY 1
ORDER BY total_balance DESC;
Lưu ý kỹ thuật: vì CASE dùng hàm tổng SUM(...), ta phải lặp lại cùng biểu thức ở cả SELECT và GROUP BY (không thể GROUP BY theo alias chứa hàm tổng). Kết quả cho biết mỗi phân khúc có bao nhiêu khách và đóng góp tổng số dư bao nhiêu — nền tảng để dồn nguồn lực chăm sóc đúng nhóm.
6. Customer Lifetime Value (CLV)
6.1 Khái niệm
CLV (giá trị vòng đời khách hàng) ước lượng tổng giá trị (lợi nhuận) một khách mang lại trong suốt thời gian gắn bó. Một công thức trực giác đơn giản:
CLV ≈ (Giá trị trung bình mỗi kỳ) × (Số kỳ khách ở lại)
Và "số kỳ ở lại" liên hệ trực tiếp với churn:
Tuổi thọ trung bình (kỳ) ≈ 1 / churn rate
Ví dụ: nếu một khách CASA mang lại biên lợi nhuận 200.000đ/tháng và churn rate là 5%/tháng → tuổi thọ trung bình ≈ 1 / 0,05 = 20 tháng → CLV ≈ 200.000 × 20 = 4 triệu đồng. Con số này cho biết bạn được phép chi tối đa bao nhiêu để thu hút/giữ một khách mà vẫn có lời.
6.2 Vì sao CLV gắn chặt với mọi thứ ở trên
CLV là "đích đến" mà cohort, retention, RFM và segmentation cùng phục vụ: giảm churn → tăng số kỳ ở lại → tăng CLV; phân khúc đúng → đầu tư vào nhóm CLV cao → tăng tổng giá trị danh mục.
7. Ứng dụng trong ngân hàng
- Giữ chân khách CASA: theo dõi cohort + churn của tài khoản thanh toán; cảnh báo sớm khi số dư bình quân của một cohort giảm dần — dấu hiệu chuẩn bị rút.
- Cross-sell / up-sell: dùng RFM tìm nhóm "Champions" và "Loyal" để mời thẻ tín dụng, vay tiêu dùng, bảo hiểm — họ tin tưởng và còn hoạt động nên tỷ lệ chốt cao.
- Win-back: nhóm "At Risk" (R thấp nhưng F, M từng cao) là ưu tiên hàng đầu cho chiến dịch giữ chân, vì cứu một khách giá trị cao đáng giá hơn nhiều thu hút khách mới.
- Tối ưu onboarding: dùng funnel để tìm bước rớt mạnh nhất (eKYC, giao dịch đầu) và đo lại sau mỗi lần cải tiến.
Tóm tắt
- Cohort analysis nhóm khách theo thời điểm gia nhập và theo dõi qua thời gian; M0 luôn 100%, retention curve càng thoải càng tốt.
- Retention + Churn = 100%; churn rate = số khách rời / số khách đầu kỳ. Với ngân hàng, giữ chân CASA rẻ hơn thu hút khách mới.
- Funnel chỉ ra bước rơi rụng lớn nhất trong một quy trình (vd onboarding: mở app → eKYC → mở tài khoản → giao dịch đầu).
- RFM chấm điểm khách theo Recency, Frequency, Monetary để phân khúc (Champions, At Risk, Hibernating...).
- Segmentation chia khách theo giá trị, hành vi, nhân khẩu; CLV ước lượng tổng giá trị vòng đời và gắn trực tiếp với churn.
- Các câu SQL nền tảng: đếm khách theo tháng tạo (cohort), đếm tài khoản hoạt động (retention), tần suất giao dịch (F), phân khúc theo tổng số dư (segmentation).
Tự kiểm tra
- Tại sao cột M0 trong bảng cohort retention luôn bằng 100%?
- Nếu đầu tháng có 8.000 khách và 400 khách rời đi, churn rate tháng đó là bao nhiêu? Retention rate là bao nhiêu?
- Trong funnel onboarding ví dụ, bước nào có tỷ lệ rớt cao nhất (so với bước trước), và bạn sẽ ưu tiên cải thiện điều gì?
- Một khách có R=2, F=4, M=4 thuộc nhóm nào và nên áp dụng hành động gì?
- Vì sao trong câu SQL phân khúc theo
SUM(accounts.balance), ta phải lặp lại cả khốiCASEởGROUP BYthay vì group theo alias? - Nếu churn rate là 4%/tháng và biên lợi nhuận 150.000đ/khách/tháng, ước lượng CLV xấp xỉ bằng bao nhiêu?
Đọc tiếp
Bài viết liên quan
Phân biệt ước lượng điểm và ước lượng khoảng, cách xây khoảng tin cậy (CI) bằng margin of error z*·SE / t*·SE, đánh đổi mức 90/95/99%, và cách DIỄN GIẢI ĐÚNG khoảng tin cậy (95% CI không phải xác suất tham số nằm trong khoảng). Có CI cho trung bình và cho tỷ lệ, ảnh hưởng của cỡ mẫu, cùng ví dụ ngân hàng về tỷ lệ nợ xấu và số dư trung bình.
Kimball dimensional modeling: bảng fact/dimension, star vs snowflake, grain, và Slowly Changing Dimension.
Khối OLAP, các thao tác drill-down/roll-up/slice & dice/pivot, OLAP vs OLTP và ROLAP/MOLAP/HOLAP.
Bản chất BI: biến dữ liệu thô thành quyết định; phân biệt báo cáo, phân tích, BI, Data Science; vai trò BI trong ngân hàng.