데이터 분석 용어
RFM 분석
soo15
2023. 6. 8. 18:59
1. RFM 분석이란
CRM(Customer Relationship Management)을 할 때 사용하는 기법 중 하나
- Recency - 거래의 최근성 : 고객이 얼마나 최근에 구입했는가?
- Frequency - 거래빈도 : 고객이 얼마나 빈번하게 우리 상품을 구입했나?
- Monetary - 거래규모 : 고객이 구입했던 총 금액은 어느 정도인가?
RFM은 가치있는 고객을 추출해내어 이를 기준으로 고객을 분류한다.
마케팅에서 가장 많이 사용되고 있는 분석방법 중 하나이다.
사용자들의 평소 구매 패턴을 기준으로 분류를 진행하기 때문에 각 사용자 그룹의 특성에 따라 차별화된 마케팅을 할 수 있다.
2. 간단한 실습
1) 데이터 셋
> (Kaggle) US E commerce Records 2020
records table
컬럼명 | 설명 | 컬럼명 | 설명 |
order_date | 주문 날짜 | region | 지역 |
order_id | 주문 ID | product_id | 상품 ID |
ship_mode | 배송 타입 | category | 카테고리 |
customer_id | 고객 ID | sub_category | 서브 카테고리 |
segment | 고객 타입 | product_name | 상품명 |
country | 국가 | sales | 매출 (number) |
city | 도시 | quantity | 수량 (integer) |
state | 주 | discount | 할인 (number) |
postal_code | 우편번호 (integer) | profit | 이익 (number) |
2) RFM 분석
2-1) RFM 분석 기준 정하기
rank | recency | freqency | monetary |
3 | 100일 이내 | 10회 이상 | 1000달러 이상 |
2 | 200일 이내 | 5회 이상 | 500달러 이상 |
1 | 200일 이후 | 5회 미만 | 500달러 미만 |
> RFM별 기준점을 설정 (고객을 분류)
2-2) RFM 분석 전 고객 그룹화
> 고객별로 마지막 구매일, 주문수, 매출액, RFM 구하기
SELECT *,
CASE
WHEN diff_date <= 100 THEN 3
WHEN diff_date <= 200 THEN 2
ELSE 1
END AS recency
,CASE
WHEN cnt_orders >= 10 THEN 3
WHEN cnt_orders >= 5 THEN 2
ELSE 1
END AS freqency
,CASE
WHEN sum_sales >= 1000 THEN 3
WHEN sum_sales >= 500 THEN 2
ELSE 1
END AS monetary
FROM
(SELECT customer_id
,MIN(order_date) AS first_order_date
,MAX(order_date) AS last_order_date
,DATEDIFF( '2020-12-31', MAX(order_date)) as diff_date
,COUNT(order_id) AS cnt_orders
,SUM(sales) AS sum_sales
FROM records
GROUP BY customer_id
ORDER BY customer_id) AS cutmer_state
출력결과
customer_id | first_order_date | last_order_date | diff_date | cnt_orders | sum_sales | recency | freqency | monetary |
AA-10315 | 2020-06-29 | 2020-06-29 | 185 | 2 | 374.48 | 2 | 1 | 1 |
AA-10375 | 2020-09-07 | 2020-12-11 | 20 | 5 | 206.732 3 | 3 | 2 | 1 |
: : |
: : |
: : |
: : |
: : |
: : |
: : |
: : |
: : |
ZD-21925 | 2020-06-11 | 2020-06-11 | 203 | 1 | 61.44 | 1 | 1 | 1 |
> diff_date는 현재 날짜를 2020-12-31이라 두었을 때
가장 최근 구매한 날짜로부터의 차이를 의미한다.
2-3) RFM별 고객수 구하기
SELECT
CASE
WHEN diff_date <= 100 THEN 3
WHEN diff_date <= 200 THEN 2
ELSE 1
END AS recency
,CASE
WHEN cnt_orders >= 10 THEN 3
WHEN cnt_orders >= 5 THEN 2
ELSE 1
END AS freqency
,CASE
WHEN sum_sales >= 1000 THEN 3
WHEN sum_sales >= 500 THEN 2
ELSE 1
END AS monetary
, COUNT(*) AS customer_count
FROM
(SELECT customer_id
,MIN(order_date) AS first_order_date
,MAX(order_date) AS last_order_date
,DATEDIFF( '2020-12-31', MAX(order_date)) as diff_date
,COUNT(order_id) AS cnt_orders
,SUM(sales) AS sum_sales
FROM records
GROUP BY customer_id) AS cutmer_state
GROUP BY recency, freqency, monetary
ORDER BY recency DESC, freqency DESC, monetary DESC
출력결과
> SQL을 통해 recency, freqency, monetary, cutomer_count를 구한 후
엑셀를 이용하여 r+f+m (recency+freqency+monetary)을 구하였다.
> 우량 고객 (R+F+M이 9, 8인 고객) : 159명
비우량 고객 (R+F+M이 3, 4인 고객) : 136명
> 우량 고객이 비우량 고객보다 많다.
2-4) F과 M의 피벗 테이블 (엑셀 이용)
> 고 수익성 고객군 : 237명 (monetary가 3이면서 frequency가 3, 2, 1인 고객)
> 저 수익성 고객군 : 305명(monetary가 1이면서 frequency가 3, 2, 1인 고객)
3) 대책
- vvip, vip (우량 고객) : r+f+m이 8, 9인 고객
,고 수익성 고객 (monetary가 3이면서 recency, freqency가 2,3인 고객)
> 많은 보상과 구매 후 맞춤형 메시지를 보내 고객과 유대를 지속 - 잠재적 vip : recency, freqency가 높고 monetary가 낮은 고객
> vip가 되도록 멤버쉽 제공하기 - 이탈한 vip : freqency, monetary가 높고 recency가 낮은 고객
> 이탈한 원인 찾아서 차별화된 혜택 제공 - 신규 고객 : recency가 높고 freqency, monetary가 낮은 고객
> 재구매시 활용할 수 있는 할인 쿠폰 제공 - 비우량 고객 : r+f+m이 3, 4인 고객
> 방문을 유도하는 이벤트 제공, 추천 프로그램 개발, 검색 엔진 최적화
4) RFM 분석을 하면서 느낀점
- RFM은 직관적이고 간단해서 왜 같은 그룹으로 묶였는지 설명하기가 좋다.
- 하지만 너무 간단한 방법이라 고객을 분류할 때 놓치는 부분이 많을거 같다.
1) 상품 특성에 따라 기준점을 다르게 잡아야 하지 않을까?
위의 2-1) RFM 분석 기준 정하기에서 상품의 특성에 따라 기준이 달라질 것 같다.
2) 연령과 성별도 영향을 미치지 않을까?
연령층과 성별도 파악하면 보다 구체적으로 맞춤 혜택을 제공할 수 있을거 같다. - R, F, M 중 더 중요한 요소에는 가중치를 주어 하는 방법도 있다.
RFM 점수 = a * Recency + b * Frequency + c * Monetary
(실무에서는 도메인 지식에 맞게 가중치를 준다고 한다.)