콘텐츠로 이동

RFM 분석


왜 이 분석을?

문제: 모든 고객에게 같은 마케팅을 하면 효율이 떨어진다.

RFM은 고객을 세분화하여 타겟 마케팅을 가능하게 한다: - Recency: 얼마나 최근에 구매했는가 - Frequency: 얼마나 자주 구매하는가 - Monetary: 얼마나 많이 쓰는가

전체 고객 100만 명
    └── VIP (5%) → 전용 혜택, 프리미엄 서비스
    └── 이탈 위험 (15%) → 재구매 유도 캠페인
    └── 신규 유망 (10%) → 온보딩 강화
    └── 휴면 (30%) → 재활성화 or 포기
    └── 일반 (40%) → 기본 마케팅

어떤 가설?

가설 예시

가설 검증 방법 예상 액션
VIP가 이탈하면 매출 타격이 크다 VIP 이탈률 vs 매출 감소 상관관계 VIP 전담 CS, 이탈 징후 모니터링
최근 30일 미구매 고객은 이탈 가능성이 높다 R점수 1점 고객의 재구매율 추적 7일/14일/21일 리마인드 푸시
F점수가 높은 고객은 할인 없이도 재구매한다 F점수별 쿠폰 사용률 비교 고빈도 고객 쿠폰 제외 (마진 확보)
M점수가 낮아도 F점수가 높으면 가치가 있다 저M고F 고객의 LTV 계산 객단가 상승 캠페인 (번들, 업셀)

분석 방법

1. 점수 산정

import pandas as pd

# 기준일 설정
snapshot_date = pd.Timestamp('2024-01-01')

# 고객별 RFM 계산
rfm = df.groupby('customer_id').agg({
    'order_date': lambda x: (snapshot_date - x.max()).days,  # Recency
    'order_id': 'count',                                      # Frequency
    'amount': 'sum'                                           # Monetary
})
rfm.columns = ['recency', 'frequency', 'monetary']

# 5분위 점수 (5가 가장 좋음)
rfm['R'] = pd.qcut(rfm['recency'], 5, labels=[5,4,3,2,1])     # 낮을수록 좋음
rfm['F'] = pd.qcut(rfm['frequency'].rank(method='first'), 5, labels=[1,2,3,4,5])
rfm['M'] = pd.qcut(rfm['monetary'].rank(method='first'), 5, labels=[1,2,3,4,5])

rfm['RFM_Score'] = rfm['R'].astype(str) + rfm['F'].astype(str) + rfm['M'].astype(str)

2. 세그먼트 정의

세그먼트 RFM 조건 특징
Champions R=5, F=5, M=5 최근 구매, 자주, 많이
Loyal F>=4 자주 구매하는 단골
Potential Loyal R>=4, F=2-3 최근 활발, 빈도 상승 가능
New Customers R=5, F=1 최근 첫 구매
At Risk R=2-3, F>=3 과거 단골, 최근 뜸함
Hibernating R=1-2, F=1-2 오래 전 구매, 드묾
Lost R=1, F=1 거의 이탈
def segment(row):
    r, f, m = int(row['R']), int(row['F']), int(row['M'])

    if r >= 4 and f >= 4:
        return 'Champions'
    elif f >= 4:
        return 'Loyal'
    elif r >= 4 and f <= 2:
        return 'New Customers'
    elif r <= 2 and f >= 3:
        return 'At Risk'
    elif r <= 2 and f <= 2:
        return 'Lost'
    else:
        return 'Others'

rfm['segment'] = rfm.apply(segment, axis=1)

비즈니스 액션

세그먼트별 전략

세그먼트 목표 액션
Champions 유지 + 확산 VIP 혜택, 리뷰/추천 유도, 신상품 조기 접근
Loyal 객단가 상승 번들 제안, 프리미엄 라인 추천
Potential Loyal 빈도 상승 재구매 시점 푸시, 멤버십 가입 유도
New Customers 2회차 전환 첫 구매 후 7일 내 쿠폰, 온보딩 가이드
At Risk 재활성화 "보고 싶어요" 메시지, 한정 쿠폰
Lost ROI 판단 대규모 할인 or 포기 (비용 대비 효과 계산)

실제 적용 예시

문제: 재구매율이 전월 대비 5% 하락

분석:

세그먼트별 재구매율 변화 (MoM)
- Champions: -2% (정상 범위)
- At Risk: -15% (문제 구간)
- New Customers: -8% (온보딩 이슈)

가설: At Risk 고객 대상 리텐션 활동 부족

액션: 1. At Risk 고객 대상 "돌아와 주세요" 캠페인 (10% 쿠폰) 2. New Customers 대상 첫 구매 후 3일/7일 자동 푸시 설정 3. 2주 후 재구매율 변화 모니터링


주의사항

함정

  1. 점수만 보고 행동을 안 봄
  2. M점수가 높아도 반품률이 높으면 실제 가치는 낮다
  3. 해결: 순매출 기준으로 M 계산

  4. 모든 비즈니스에 같은 기준 적용

  5. 가구(저빈도) vs 식품(고빈도)는 F 기준이 달라야 함
  6. 해결: 산업/카테고리별 기준 조정

  7. 세그먼트 고정 관점

  8. 고객은 계속 이동한다 (Loyal → At Risk)
  9. 해결: 월별 세그먼트 변화 추적

보완 분석

한계 보완 방법
미래 예측 불가 LTV 분석과 결합
이탈 원인 모름 VoC 분석, 퍼널 분석
행동 맥락 부재 세션 분석, 클릭스트림