당신의 CRM 캠페인은 안녕하신가요?(2편) RFM 점수화(Scoring) 및 유저 세분화(Segmentation)
RFM 데이터 프레임을 생성한 후 이제 이 값을 점수화(Scoring)하고, 이를 기반으로 유저를 행동 유형별로 분류해보겠습니다.
1. RFM Scoring
먼저 RFM 점수화(Scoring)가 왜 필요한지 설명해보겠습니다. RFM 분석은 단순히 숫자만 보는 것이 아니라, 각 유저가 전체 유저 중 어느 수준의 행동을 보였는지 상대적으로 평가하는 것이 핵심입니다.
예를 들어, Recency 가 3일 이라도 전체 평균보다 최근이면 높은 점수를 주고, 오래되었다면 낮은 점수를 부여합니다.
RFM 계산 방법
Recency, Frequency, Monatary 지표를 각각 1~5점의 범위로 나눈 뒤, 이를 조합하여 2자리 혹은 3자리의 최종 점수(RFM_SCORE
)를 만듭니다.
Recency : 최근일수록 점수가 높아야 함
rfm["recency_score"] = pd.qcut(rfm["recency"], 5, labels=[5, 4, 3, 2, 1])
- Recency는 값이 작을수록 좋은 것(최근 접점)이므로, qcut의 label 순서를 반대로 줍니다.
Frequency : 자주 구매할수록 점수가 높아야 함
rfm["frequency_score"] = pd.qcut(rfm["frequency"].rank(method='first'), 5, labels=[1, 2, 3, 4, 5])
- Frequency는 같은 수치가 많이 나올 수 있으므로 rank(method='first')를 사용해 중복 처리를 해주는 것이 좋습니다.
Monetary : 결재 금액이 클수록 점수가 높아야 함
rfm["monetary_score"] = pd.qcut(rfm["monetary"], 5, labels=[1, 2, 3, 4, 5])
RFM Score 만들기
우리는 이제 recency_score
, frequency_ score
, monetary_ score
를 기준으로 유저를 분류합니다. 세 가지 기준의 합이 아니라, 세 가지 기준 점수의 조합으로 RFM_SCORE 가 지정됩니다.
아래의 코드를 보면 점수의 합계가 아니라 조합을 계산하기 위해 데이터 타입을 str 로 변환합니다.
예를 들어, recency=5, frequency=4, monetary=3인 고객의 RFM_SCORE
는 543이라는 세 자리 코드로 지정됩니다.
rfm["RFM_SCORE"] = (
rfm["recency_score"].astype(str) +
rfm["frequency_score"].astype(str) +
rfm["monetary_score"].astype(str)
)
위 과정을 통해 유저의 RFM_SCORE
가 지정됩니다.
예를 들면 다음과 같습니다.
RFM_SCORE
= 555- 최근에 구매했고, 자주 구매하며, 금액도 많이 지출한 최우수 유저
RFM_SCORE
= 215- 한동안 구매하지 않았지만, 구매 금액이 높은 비정기 고가 유저
RFM_SCORE
= 111- 구매한지 오래 되었고, 구매 빈도도 낮으며 구매 금액도 낮은 이탈 유저
고객 세분화(Segmentation) 하기
이제 RFM_SCORE
조합값을 바탕으로 유저를 행동 유형별 세분화(Segmentation)를 예시로 수행해보겠습니다.
seg_map = {
r'555': 'champions', # 최근 방문했고 자주 방문하며 많이 지출한 최우수 고객
r'5[4-5][4-5]': 'loyal_customers', # 꾸준히 방문하고 일정 금액 이상 지출하는 충성 고객
r'5[1-3][1-3]': 'new_customers', # 최근에 처음 구매했지만 빈도와 금액은 아직 낮은 신규 고객
r'[3-4][3-5][3-5]': 'potential_loyalists', # 꽤 자주 방문하고 금액도 높은 잠재 충성 고객
r'[2-3][2-3][2-3]': 'need_attention', # 활동도, 지출도 보통 수준인 고객 – 관심 유도 필요
r'[1-2][4-5][4-5]': 'can\'t_lose', # 한때 큰 지출을 했던 고객 – 이탈 위험 상태
r'[1-2][3-4][1-3]': 'at_risk', # 자주 방문했지만 최근 활동/지출이 낮아진 고객
r'[1-2][1-2][1-2]': 'hibernating', # 오래되고 드물게 구매하며 지출도 낮은 비활성 고객
r'3[1-2][1-2]': 'about_to_sleep', # 예전에는 거래가 있었지만 점점 조용해지는 고객
r'4[1-2][1-2]': 'promising' # 최근 유입됐지만 아직 큰 지출이나 활동은 없는 유망 고객
}
rfm['segment'] = rfm['RFM_SCORE'].replace(seg_map, regex=True)
일반적으로 많이 사용되는 세분화(segmentation)를 기준으로 나눴지만, 각자의 비즈니스 환경에 맞게 그룹을 줄이거나, 더 늘려 유저를 분류하는 과정을 거쳐야 한다고 생각합니다.
지난 포스팅에 이어서 RFM 에 대한 개념과 분류하는 방법을 러프하게 소개해드렸습니다.
제가 소개해드린 내용은 RFM을 기반으로 한 유저 분류의 방법론에 대한 맛보기라고 볼 수 있습니다. CRM 전략에서 각 단계가 가지는 의미가 무엇인지 또 우리에게 맞는 방향은 무엇인지는 각 서비스의 특징에 따라 너무 다른 것 같습니다. 어떤 서비스는 구매가 아닌 다른 행동이 더 중요할 수 있고, 구매라고 할지라도 구매와 함께 구독이 비즈니스 모델일 수 있습니다. 이 경우 RFM을 측정하는 방식이나 고객을 분류하는 방법은 크게 달라질 것입니다.
RFM을 통해 유저를 나누고 맞춤 메시지를 전달하는 것만으로도, CRM 캠페인의 수준은 한 단계 올라갈 수 있습니다. 일괄 메시지에서 벗어나는 것이 핵심입니다.