article thumbnail image
Published 2022. 9. 30. 15:22

RFM: 고객군을 세분화 방법 중 하나

보통 CRM 마케팅을 할 때 많이 사용한다.

고객 세분화를 몇 단계로 나눌 것인지, 어떤 기준으로 나눌 것인지는 정해진 것이 없으며 상황에 맞게 기준을 세우면 된다.

예를 들어 최근의 범주를 어떻게 잡을 것인지도 논의 대상이 될 수 있다. (1일, 1주, 1년 등)

 

Recency: 얼마나 최근에 구매했는지

Frequency: 얼마나 자주 구매했는지

Monetary: 얼마나 많은 금액을 구매했는지

 

CASE와 IF

CASE는 조건을 여러개 넣을 수 있지만

IF는 조건을 하나만 넣을 수 있다. if중첩은 x

WHERE 절은??

 

1) recency

SELECT last_order_date
     ,CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS Recency, last_order_date
FROM customer_stats

 

2) frequency

SELECT cnt_orders
      , IF(cnt_orders >= 3, 1, 0) AS Frequency
FROM customer_stats

 

3) monetary

 

문제

Q. customer_stats 테이블의 last_order_date 컬럼을 이용하여 각 고객의 Recency 점수를 계산해봅시다. Recency 점수가 1점인 사용자, 0점인 사용자는 각각 몇 명인가요? 조건 계산에는 CASE를 사용해주세요.

 

SELECT CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS Recency, count(*)
FROM customer_stats
GROUP BY Recency

 

문제

Q. customer_stats 테이블의 last_order_date, cnt_orders 컬럼을 이용하여 각 고객의 Recency, Frequency 점수를 계산해봅시다. 아래 표를 채워넣어주세요. 조건 계산에는 IF를 사용해주세요.

SELECT CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS Recency
            ,if(cnt_orders < "3", 0, 1) AS Frequency
            , count(*)
FROM customer_stats
GROUP BY Recency, Frequency
ORDER BY Recency DESC, Frequency DESC

 

 

solvesql - RFM 분석 2단계. 고객 분류하기

SELECT CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS recency
       , CASE WHEN cnt_orders < 3 THEN 0 else 1 end AS frequency
       , CASE WHEN sum_sales < 500 THEN 0 else 1 end AS monetary
       , count(customer_id) AS customers
FROM customer_stats
GROUP BY recency, frequency, monetary

테이블 피봇

행으로 나열(가로로 쌓였있던 데이터)되어 있던 데이터를

열 방향(세로에 컬럼을 지정해서 보여줌)으로 변환해서 좀 더 데이터를 한 눈에 보고 싶을 때 사용하는 기능


SELECT order_id, CASE WHEN (category = "Furniture") THEN order_id else null End AS furniture_order_id
FROM records

 

 


SELECT region AS Region
      ,count(distinct CASE WHEN category = 'Furniture' THEN order_id END) as Furniture
      ,count(distinct CASE WHEN category = 'Office Supplies' THEN order_id END) as "Office Supplies"
      ,count(distinct CASE WHEN category = 'Technology' THEN order_id END) as Technology
FROM records
GROUP BY region

ORDER BY region

 

복사했습니다!