---
title: "Phân loại khách hàng theo RFM - RFM Segmentation"
description: "Vì sao phải cần phân loại khách hàng? Bởi vì bạn không thể đối xử với họ giống như nhau, sử dụng cùng một loại nội dung, cùng một kênh truyền thông và cùng độ ưu tiên"
canonical: "https://200lab.io/blog/phan-loai-khach-hang-rfm-segmentation"
published: "2021-07-10T05:31:27Z"
updated: "2026-08-21T07:17:49Z"
authors: ["Hướng nội"]
tags: ["Data"]
reading_minutes: 9
access: "public"
---

> In marketing, market segmentation is the process of dividing a broad consumer or business market, normally consisting of existing and potential customers, into sub-groups of consumers (known as segments) based on some type of shared characteristics – [Wikipedia](<https://en.wikipedia.org/wiki/Market_segmentation>)

Vì sao phải cần phân loại khách hàng ? Bởi vì bạn không thể đối xử với họ giống như nhau, sử dụng cùng một loại nội dung, cùng một kênh truyền thông và cùng độ ưu tiên. Họ sẽ dần tìm kiếm một dịch vụ khác có thể hiểu họ tốt hơn, ai cũng có nhu cầu được đối xử một cách đặt biệt.

Ví dụ rõ nhất ở đây là xã hội ngày càng phát triển, bạn và ba mẹ cùng sống trong một ngôi nhà. Cách đây 20 năm điện thoại và internet không phổ biến như bây giờ nên đa số mọi người cập nhật tin tức qua báo và xem TV, còn bạn thì chắc chắn là sử dụng điện thoại và máy tính cá nhân rồi, hay bạn còn được gọi là [Gen Z](<https://en.wikipedia.org/wiki/Generation_Z>) (thế hệ được sinh trong khoảng 1995-2012) còn ba mẹ của bạn là [Millennials](<https://en.wikipedia.org/wiki/Millennials>).

Bạn cập nhật tin tức từ nhiều nguồn khác nhau như mạng xã hội (Facebook, Instagram), báo điện tử, ... Rõ ràng việc quảng cáo cho 2 thế hệ khác nhau cũng yêu cầu phải phân loại và lựa chọn kênh truyền thông thích hợp, cụ thể ở đây là dựa vào độ tuổi. Hay đơn giản nhất là dựa trên mức chi tiêu, cửa hàng thường phân làm 3 loại khách hàng là Normal, VIP, VVIP

![Customer Satisfaction](https://assets.200lab.io/images/2024/12/05/pngfind-com-satisfied-customer-png-5088930-838414c486bd5922fd23.webp)

Ngoài yếu tố về độ tuổi như đã nói ở trên thì còn rất nhiều các yếu tố khác ảnh hưởng đến việc phân loại: Mức thu nhập, số lượng con cái, mức chi tiêu hằng tháng, số lượng đơn hàng đã mua, vùng miền, thiết bị sử dụng (Android hay iOS), ...

Mỗi khách hàng có hành vi và đặc điểm (attribute) khác nhau nhưng nhìn chung vẫn có mối liên hệ mục đích của chúng ta là tìm ra các mối liên hệ đó và nhóm họ lại.

## Phân loại khách hàng theo RFM - RFM Segmention

![RFM Segmention](https://assets.200lab.io/images/2024/12/05/rfm-metrics-0a022c833d3c07912b5f.webp)

**RFM** là viết tắt của:

- **R**ecency: Được hiểu là từ lúc mua hàng lần cuối cùng đến hiện tại là bao nhiêu ngày, các bạn cũng biết là khách hàng càng mua hàng gần đây thì càng dễ gắn kết với thương hiệu hơn so với những người lâu rồi không quay lại mua.

**R (days) = now - last\_purchase\_date**

- **F**requency: Là tần suất mua hàng, đơn giản là bạn chỉ cần cộng số đơn hàng lại

**F  = total number of orders**

- **M**onetary: Là tổng số tiền khách hàng đã bỏ ra để mua hàng (tổng giá trị các đơn hàng của khách hàng)

**M = total money spent**

Như mình cũng có nói ở trên có rất nhiều yếu tố ảnh hưởng đến việc phân loại, mô hình **RFM** này sử dụng 3 yếu tố chính là **Recency** - **Frequency** - **Monetary** để phân nhóm khách hàng, số lượng nhóm khách hàng sẽ tuỳ thuộc vào định nghĩa của bạn

Ở mức đơn giản nhất chúng ta sẽ chia thành 3 nhóm dưới đây:

- Nhóm khách hàng có giá trị thấp (**Low value**): bao gồm các khách hàng đã lâu rồi chưa quay lại mua, số lượng đơn hàng ít và tổng giá trị đơn hàng thấp
- Nhóm khách hàng có giá trị trung bình (**Mid Value**): là nhóm khách hàng có 3 chỉ số RFM trung bình, không cao cũng không thấp
- Nhóm khách hàng có giá trị cao (**High Value**): là nhóm khách hàng có mua hàng gần đây, số lượng đơn hàng nhiều và có tộng giá trị cao

Thông thường sẽ ít công ty chia thành 3 nhóm như trên, họ sẽ chia nhiều nhóm hơn và mỗi nhóm mang ý nghĩa rất đặt biệt. Nhưng để cho phần code và giải thích đơn giản, dễ hiểu thì mình tạm thời chia thành 3 nhóm, sau phần code chúng ta sẽ cùng tìm hiểu thật sự các công ty sử dụng RFM như thế nào nhé.

Code các bạn có thể tham khảo và thực hành ở [đây](<https://github.com/joaolcorreia/RFM-analysis>) nhé, cám ơn bạn tác giả [joaolcorreia](<https://github.com/joaolcorreia>), để hiểu được đoạn code bên dưới bạn chỉ cần tìm hiểu khái niệm Percentitle là gì ? Nó khác biệt gì so với **Mean** và **Average** ?

Bước cuối cùng là phân thành 3 nhóm thì bạn tác giả không đề cập đến ở đây, có lẽ bạn ấy muốn mình sẽ tự do phân nhóm theo ý thích. Bạn nhớ rằng nhóm RFM (RFM class như ở trên) thì khác so với nhóm khách hàng thật sự muốn chia, cụ thể là 3 nhóm: **Low**, **Mid** và **High Value**

Dưới đây là hình giải thích cách tính giá trị **RFM Class**, nhờ vào **Percentile** bạn có thể chia dữ liệu R-F-M thành 4 phần đều nhau (tứ phân vị) được đánh Label từ **1** đến **4**. Label càng nhỏ thì giá trị càng tốt (Label=1 là tốt nhất), điểm cần lưu ý ở đây là **Recency**, giá trị của nó càng cao thì càng không tốt, chứng tỏ khách hàng đã lâu không quay lại mua

![RFM Class Explaination](https://assets.200lab.io/images/2024/12/05/rfm-class-1-409908c2d1a4de2d5488.webp)

Kế tiếp là phân nhóm từ **RFM Class**, rõ ràng bạn có thể thấy là nhóm có giá trị cao nhất sẽ là **111**, họ vừa chi nhiều tiền nhất, có số lượng đơn hàng nhiều nhất và mới mua hàng gần đây, nhóm ít có đóng góp nhất sẽ là **444**

```
def segment(value):
	if value =='111':
    	return 'High'
    elif value == '444':
    	return 'Low'
    else:
    	return 'Mid'

rfmSegmentation['Class']=rfmSegmentation['RFMClass'].apply(segment)
```

## Ứng dụng RFM vào Business như thế nào ?

Thông thường thì **RFM** được sử dụng để giải quyết những bài toán cụ thể, tức là khi bạn có vấn đề về Business: cải thiện mối quan hệ với khách hàng, gửi các email ưu đãi đến tập khách hàng đặt biệt,... Tức là trước khi bạn bắt tay vào code thì bạn phải biết trước mình định làm gì và phục vụ cho ai. Điều này sẽ ảnh hưởng trực tiếp đến việc chia nhóm của bạn nên mình khuyên là các bạn nên làm rõ nhu cầu của mình trước khi bắt tay vào làm nhé.

Giả sử bạn đang là nhân viên của đội Marketing, bạn mong muốn có thể hiểu rõ khách hàng của mình hơn, bạn muốn cải thiện số lượng khách hàng vào website. Cụ thể là gửi email hoặc thông báo trên ứng dụng cho tập khách hàng đã lâu không quay lại (gửi cho tất cả hay là một nhóm khách hàng cụ thể thôi ?). Hoặc bạn đang có trong tay 100 mã giảm giá (voucher). Bạn muốn gửi nó đến nhóm khách hàng thích hợp, thì RFM có thể hỗ trợ bạn.

![](https://assets.200lab.io/images/2024/12/05/email-push-aadf97b02fe8fd4dbed4.webp)

Bây giờ chúng ta quay lại ví dụ ở phía trên, có lẽ bạn đang tự hỏi hình như có điều gì không đúng trong cách chia nhóm. Đối với những khách hàng thuộc nhóm **211 **họ đã lâu không quay lại nhưng lại mua rất nhiều đơn hàng, giá trị lại rất cao. Sẽ không hợp lí nếu xếp họ ở nhóm **Mid Value**.

Bạn sẽ đặt ra giả thiết có thể họ đã không hài lòng với sản phẩm trong đơn hàng cuối cùng, gửi yêu cầu giải quyết do hàng có hư hỏng, đợi rất lâu nhưng lại không có phản hồi từ phía công ty hoặc là họ đã chuyển chỗ ở sang nơi khác,... Đây là tập khách hàng tiềm năng vì đã gắn bó với thương hiệu chúng ta rất lâu hay còn gọi là khách hàng trung thành (**Loyal Customers**).

Thật ra cũng không loại trừ khả năng chúng ta không có nhiều ưu đãi cho họ bằng các đối thủ cạnh tranh mới ra trên thị trường. **RFM** sẽ ít nhất giúp bạn phát hiện ra nhóm khách hàng này và việc chăm sóc họ như thế nào thì còn tuỳ thuộc vào bạn đấy

Bạn có thể tham khảo gợi ý phân nhóm dưới đây của [Putler](<https://www.putler.com/rfm-analysis>)

Customer Segment
Activity
Actionable Tip

Champions
Bought recently, buy often and spend the most!
Reward them. Can be early adopters for new products. Will promote your brand.

Loyal Customers
Spend good money with us often. Responsive to promotions.
Upsell higher value products. Ask for reviews. Engage them.

Potential Loyalist
Recent customers, but spent a good amount and bought more than once.
Offer membership / loyalty program, recommend other products.

Recent Customers
Bought most recently, but not often.
Provide on-boarding support, give them early success, start building relationship.

Promising
Recent shoppers, but haven’t spent much.
Create brand awareness, offer free trials

Customers Needing Attention
Above average recency, frequency and monetary values. May not have bought very recently though.
Make limited time offers, Recommend based on past purchases. Reactivate them.

About To Sleep
Below average recency, frequency and monetary values. Will lose them if not reactivated.
Share valuable resources, recommend popular products / renewals at discount, reconnect with them.

At Risk
Spent big money and purchased often. But long time ago. Need to bring them back!
Send personalized emails to reconnect, offer renewals, provide helpful resources.

Can’t Lose Them
Made biggest purchases, and often. But haven’t returned for a long time.
Win them back via renewals or newer products, don’t lose them to competition, talk to them.

Hibernating
Last purchase was long back, low spenders and low number of orders.
Offer other relevant products and special discounts. Recreate brand value.

Lost
Lowest recency, frequency and monetary scores.
Revive interest with reach out campaign, ignore otherwise.

Chúc bạn ứng dụng thành công **RFM** vào công việc !

Bạn có thể nhấn vào[link](<https://zalo.me/g/ofnepz110?fbclid=IwAR3Jkq4g--18-FfbJvPx80lpAsnyuAW_dloBKOmnGSUEaoGmHq46ggexELs>)này để tham gia vào nhóm và nhận thêm nhiều tài liệu hữu ích khác về** Data** nhé!

## Đọc thêm

- [Airflow là gì? Nền tảng Orchestration - Điều phối Workflow chuyên nghiệp](https://200lab.io/blog/airflow-la-gi.md): Apache Airflow là nền tảng mã nguồn mở được viết bằng Python để tạo, lập lịch và giám sát các workflow phức tạp
- [DBT là gì? Tìm hiểu Công cụ Transform trong Data Engineering](https://200lab.io/blog/dbt-la-gi.md): DBT (Data Build Tool) là một công cụ mã nguồn mở giúp Data Engineers và Data Analysts thực hiện bước Transform trong quy trình ELT
- [DuckDB là gì? Khám phá siêu vũ khí Phân tích dữ liệu](https://200lab.io/blog/duckdb-la-gi.md): DuckDB là một cơ sở dữ liệu phân tích dạng nhúng (embedded database) được thiết kế tối ưu để xử lý các workload phân tích
- [Customer Lifetime Value (LTV): Demo Phân tích LTV cho Doanh nghiệp E-commerce](https://200lab.io/blog/customer-lifetime-value-la-gi.md): Customer Lifetime Value là tổng giá trị kinh tế mà một khách hàng mang lại cho doanh nghiệp trong suốt thời gian họ là khách hàng
- [MLOps là gì? Những Kỹ năng cần thiết cho vị trí MLOps](https://200lab.io/blog/mlops-la-gi.md): MLOps là tập hợp các phương pháp và quy trình nhằm chuẩn hóa và tự động hóa việc triển khai các hệ thống machine learning
- [Mọi bài viết chủ đề Data](https://200lab.io/blog/tags/data.md)

Toàn bộ nội dung: https://200lab.io/llms.txt
