Phân tích RFM là gì? Cách phân nhóm khách hàng

Featured Image 1200×628@2x

Công ty gửi cùng một mã giảm giá 20% cho toàn bộ 10.000 khách hàng. Khách VIP vốn sẵn sàng mua giá gốc nay được giảm không cần thiết, còn khách đã bỏ đi nửa năm thì chẳng mở email. Phân tích RFM giải quyết đúng vấn đề này: chỉ với ba con số từ lịch sử mua hàng, bạn chia khách thành từng nhóm và biết ai cần tri ân, ai cần giữ chân, ai cần đánh thức. Bài viết hướng dẫn từng bước với dữ liệu mẫu, kèm câu SQL và công thức Excel.

🗺 6 NHÓM KHÁCH HÀNG SAU KHI PHÂN TÍCH RFM

RFM là gì?

RFM là phương pháp phân nhóm khách hàng dựa trên hành vi mua hàng, gồm ba chỉ số:

R Recency

Khách mua gần đây đến mức nào?

📏 Số ngày từ lần mua gần nhất đến ngày phân tích

✓ Càng nhỏ càng tốt

F Frequency

Khách mua thường xuyên ra sao?

📏 Số đơn hàng trong kỳ (ví dụ 12 tháng)

✓ Càng lớn càng tốt

M Monetary

Khách chi bao nhiêu?

📏 Tổng tiền đã mua trong kỳ

✓ Càng lớn càng tốt

Điểm mạnh của RFM là đơn giản: chỉ cần bảng đơn hàng có ba cột mã khách, ngày mua và số tiền. Không cần khảo sát, không cần mô hình phức tạp, phù hợp với bán lẻ, thương mại điện tử, chuỗi nhà hàng hay trung tâm đào tạo.

Cách tính RFM từng bước

BƯỚC 1/3

Bước 1: Chuẩn bị dữ liệu và chọn mốc thời gian

Bạn cần bảng đơn hàng có ít nhất các cột MaDon, MaKH, NgayDat, DoanhThu. Chọn hai mốc: ngày phân tích (ví dụ 31/10/2026) và kỳ xem xét (ví dụ 12 tháng gần nhất). Loại đơn hủy, đơn trả hàng và đơn nội bộ trước khi tính, nếu không điểm sẽ bị sai.

BƯỚC 2/3

Bước 2: Tính R, F, M và chấm điểm bằng SQL

Câu SQL dưới đây (SQL Server) tính ba chỉ số cho từng khách rồi dùng NTILE(5) chia khách thành 5 phần bằng nhau để chấm điểm từ 1 đến 5. Điểm 5 luôn là tốt nhất: mua gần nhất, mua nhiều nhất, chi nhiều nhất.

🗄 rfm.sqlSQL Server
1DECLARE @NgayPhanTich date = '2026-10-31';
2
3WITH ChiSo AS (
4  SELECT MaKH,
5         DATEDIFF(day, MAX(NgayDat), @NgayPhanTich) AS Recency,
6         COUNT(DISTINCT MaDon)                      AS Frequency,
7         SUM(DoanhThu)                              AS Monetary
8  FROM DonHang
9  WHERE NgayDat >  DATEADD(month, -12, @NgayPhanTich)
10    AND NgayDat <= @NgayPhanTich
11  GROUP BY MaKH
12),
13Diem AS (
14  SELECT *,
15         NTILE(5) OVER (ORDER BY Recency DESC) AS R,  -- càng lâu chưa mua, điểm càng thấp
16         NTILE(5) OVER (ORDER BY Frequency)    AS F,
17         NTILE(5) OVER (ORDER BY Monetary)     AS M
18  FROM ChiSo
19)
20SELECT *, CONCAT(R, F, M) AS MaRFM
21FROM Diem;

BƯỚC 3/3

Bước 3: Cách làm tương tự trên Excel

Nếu dữ liệu nằm trong Excel, tạo bảng KhachHang với mỗi dòng một mã khách (cột A), ô H1 chứa ngày phân tích, bảng đơn hàng đặt tên DonHang với mỗi dòng một đơn:

KhachHang · công thức tại dòng 2
B Recency =$H$1-MAXIFS(DonHang[NgayDat],DonHang[MaKH],A2)
C Frequency =COUNTIFS(DonHang[MaKH],A2)
D Monetary =SUMIFS(DonHang[DoanhThu],DonHang[MaKH],A2)
E Điểm R =6-MAX(1,ROUNDUP(PERCENTRANK.INC(B$2:B$11,B2)*5,0))
F Điểm F =MAX(1,ROUNDUP(PERCENTRANK.INC(C$2:C$11,C2)*5,0))
G Điểm M =MAX(1,ROUNDUP(PERCENTRANK.INC(D$2:D$11,D2)*5,0))

Thay vùng dòng 2 đến 11 bằng toàn bộ danh sách khách của bạn. Với dữ liệu mẫu bên dưới, cách Excel và cách SQL cho cùng một kết quả.

Kết quả với 10 khách hàng mẫu

Dữ liệu minh họa, ngày phân tích 31/10/2026, chi tiêu tính bằng triệu đồng:

Mã KH Mua gần nhất Recency (ngày) Số đơn Chi tiêu R F M Mã RFM Nhóm
KH01 28/10/2026 3 18 42,5 5 5 5 555 👑 Khách VIP
KH02 20/10/2026 11 9 18,2 4 3 3 433 🌿 Cần nuôi dưỡng
KH03 15/06/2026 138 12 30,1 2 4 4 244 ⚠ Có nguy cơ rời bỏ
KH04 25/10/2026 6 3 4,8 4 2 2 422 🌱 Khách mới
KH05 02/03/2026 243 1 0,9 1 1 1 111 💤 Đã ngủ đông
KH06 30/09/2026 31 11 20,4 3 4 4 344 ★ Khách trung thành
KH07 30/10/2026 1 2 2,6 5 1 1 511 🌱 Khách mới
KH08 10/05/2026 174 15 35,0 1 5 5 155 ⚠ Có nguy cơ rời bỏ
KH09 12/08/2026 80 4 6,3 2 2 2 222 💤 Đã ngủ đông
KH10 05/10/2026 26 7 14,9 3 3 3 333 🌿 Cần nuôi dưỡng

Màu điểm: 12345 thấp → cao. Cột Nhóm áp dụng quy tắc ở phần tiếp theo. Kéo ngang bảng trên điện thoại.

Phân nhóm khách hàng từ điểm RFM

Với 3 điểm từ 1 đến 5, có tới 125 tổ hợp, quá nhiều để hành động. Cách thực tế là gom thành vài nhóm dễ hiểu. Bộ quy tắc dưới đây xét từ trên xuống, khách khớp quy tắc nào trước thì vào nhóm đó:

👑 Khách VIP

R ≥ 4, F ≥ 4, M ≥ 4

Mua gần, mua nhiều, chi nhiều

Khách mẫu: KH01

★ Khách trung thành

R ≥ 3, F ≥ 4

Mua đều đặn, vẫn còn quay lại

Khách mẫu: KH06

🌱 Khách mới

R ≥ 4, F ≤ 2

Vừa mua nhưng mới mua ít lần

Khách mẫu: KH04KH07

⚠ Có nguy cơ rời bỏ

R ≤ 2, F ≥ 3

Từng mua nhiều nhưng lâu rồi không quay lại

Khách mẫu: KH03KH08

💤 Đã ngủ đông

R ≤ 2, F ≤ 2

Mua ít và đã lâu không mua

Khách mẫu: KH05KH09

🌿 Cần nuôi dưỡng

Các trường hợp còn lại

Mức trung bình, có thể lên hoặc xuống

Khách mẫu: KH02KH10

Ngưỡng trong bảng là gợi ý để bắt đầu. Mỗi doanh nghiệp nên điều chỉnh theo chu kỳ mua hàng của mình: khách siêu thị có thể mua mỗi tuần, còn khách mua điện máy có khi cả năm mới quay lại.

Chăm sóc đúng người: hành động cho từng nhóm

👑 Khách VIP🎯 Giữ và tri ân

✔ Nên: Ưu đãi riêng, dùng thử sản phẩm mới sớm, chăm sóc 1-1

✕ Tránh: Gửi mã giảm giá đại trà làm giảm biên lợi nhuận

★ Khách trung thành🎯 Tăng giá trị đơn

✔ Nên: Chương trình tích điểm, gợi ý sản phẩm mua kèm

✕ Tránh: Xem nhẹ vì nghĩ họ “chắc chắn sẽ quay lại”

🌱 Khách mới🎯 Tạo lần mua thứ hai

✔ Nên: Email chào mừng, hướng dẫn sử dụng, ưu đãi cho đơn tiếp theo

✕ Tránh: Dồn dập quá nhiều tin nhắn quảng cáo

⚠ Có nguy cơ rời bỏ🎯 Kéo khách quay lại

✔ Nên: Gọi điện hỏi thăm, khảo sát lý do, ưu đãi cá nhân hóa theo lịch sử mua

✕ Tránh: Chờ khách tự quay lại

💤 Đã ngủ đông🎯 Đánh thức với chi phí thấp

✔ Nên: Một đợt email hoặc tin nhắn tự động, không phản hồi thì giảm tần suất liên hệ

✕ Tránh: Chi nhiều ngân sách quảng cáo cho nhóm này

🌿 Cần nuôi dưỡng🎯 Đưa lên nhóm trung thành

✔ Nên: Nội dung hữu ích, khuyến mãi theo mùa, nhắc mua lại theo chu kỳ

✕ Tránh: Bỏ quên vì không nổi bật

65,1

triệu đồng
đang có nguy cơ mất

Điểm mấu chốt: nhóm Có nguy cơ rời bỏ thường đáng ưu tiên nhất. Trong dữ liệu mẫu, KH03 và KH08 đã chi tổng cộng 65,1 triệu đồng, nhiều hơn cả nhóm khách mới và nhóm ngủ đông cộng lại (14,6 triệu đồng), nhưng đã 4–6 tháng chưa quay lại.

Lưu ý và sai lầm thường gặp

⚠ Chọn kỳ xem xét không hợp chu kỳ mua

với sản phẩm mua theo năm, kỳ 3 tháng sẽ xếp gần hết khách vào nhóm ngủ đông.

⚠ Quên loại đơn hủy và trả hàng

làm F và M cao hơn thực tế.

⚠ Một khách có nhiều mã

cùng số điện thoại nhưng hai mã khách sẽ bị tính thành hai người. Hãy làm sạch và gộp mã trước.

⚠ Chỉ tính một lần rồi để đó

khách di chuyển giữa các nhóm theo thời gian. Tính lại hằng tháng và theo dõi ai vừa rơi từ VIP xuống nhóm nguy cơ.

Làm RFM trong Power BI

Khi đã có câu SQL hoặc bảng Excel, bạn có thể đưa kết quả vào Power BI để cả đội theo dõi: một biểu đồ cột số khách và doanh thu theo từng nhóm, một bảng danh sách khách “Có nguy cơ rời bỏ” để đội chăm sóc gọi điện, và biểu đồ đường theo dõi số khách VIP qua từng tháng. Nếu chạy SQL trên máy chủ, hãy đặt lịch làm mới dữ liệu để nhóm khách luôn cập nhật. Nguyên tắc thiết kế xem thêm bài Dashboard không phải để đẹp.

📅 Muốn học phân tích khách hàng bài bản với SQL và Power BI? Xem lịch khai giảng tháng 10/2026 của MCNA để chọn lớp Data Analyst phù hợp.

Câu hỏi thường gặp

?

Cần bao nhiêu khách hàng thì mới làm RFM được?

Ví dụ trong bài chỉ có 10 khách để dễ theo dõi. Trên thực tế, RFM có ý nghĩa khi bạn có từ vài trăm khách trở lên, để mỗi mức điểm có đủ người và các nhóm không quá nhỏ để lên chiến dịch riêng.

?

Nên chấm điểm 1–5 hay 1–3?

Thang 1–5 chi tiết hơn và phổ biến nhất. Nếu ít khách hoặc cần báo cáo đơn giản, thang 1–3 (thấp, trung bình, cao) vẫn dùng tốt. Chỉ cần đổi NTILE(5) thành NTILE(3) và điều chỉnh quy tắc phân nhóm tương ứng.

?

Ba chỉ số R, F, M có quan trọng ngang nhau không?

Không nhất thiết. Với đa số doanh nghiệp, R là tín hiệu quan trọng nhất vì cho biết khách còn “sống” hay không. Vì vậy các quy tắc phân nhóm trong bài đều xét R trước. Ngành có giá trị đơn chênh lệch lớn có thể ưu tiên M hơn.

?

Bao lâu nên tính lại RFM một lần?

Phổ biến là mỗi tháng một lần. Bán lẻ có tần suất mua cao có thể tính hằng tuần. Quan trọng hơn tần suất là việc lưu lại kết quả mỗi kỳ để thấy khách đang chuyển từ nhóm nào sang nhóm nào.

?

RFM khác gì phân cụm bằng machine learning?

RFM dùng quy tắc rõ ràng do bạn đặt, dễ giải thích cho đội kinh doanh và làm được ngay trên Excel hay SQL. Phân cụm như K-Means tự tìm nhóm từ dữ liệu và có thể dùng thêm nhiều biến, nhưng khó giải thích hơn. Với người mới, hãy bắt đầu bằng RFM.

Kết luận

Phân tích RFM biến bảng đơn hàng thành danh sách hành động: ai là khách VIP cần tri ân, ai đang có nguy cơ rời bỏ cần gọi ngay, ai là khách mới cần một lý do để quay lại. Chỉ với một câu SQL hoặc vài công thức Excel, bạn đã có thể ngừng gửi cùng một ưu đãi cho tất cả và bắt đầu chăm sóc đúng người, đúng cách.

Nếu bạn muốn học bài bản cách xử lý, phân tích dữ liệu và tự động hóa với AI, các khóa học tại MCNA Technology School sẽ đồng hành cùng bạn. Đọc thêm: KPI là gì? Data Analyst xây dựng KPI như thế nào, Dashboard không phải để đẹp và Prompt cho Data Analyst.

👉 Xem lịch khai giảng tháng 10/2026: Power BI, SQL, Python, AI – MCNA

Thông tin tác giả

Võ Ngọc Vương – Data Analyst tại MCNA Technology School

MCNA Technology School – Đơn vị tiên phong đào tạo AI, Big Data, Business Intelligence tại Việt Nam. Chuyên sâu về Power BI, Python, SQL và Data Analytics — đối tác đào tạo của 300+ doanh nghiệp.

Đối tác đào tạo: Viettel Global, Masan Group, Techcombank, VPBank, Daikin.

→ Chỉ mục