[개인] RFM·코호트·이탈 분석을 통한 상위 고객 구매 유지율 하락 문제 정의 및 가설 검증 - 데이터 처리 및 분석②
3. 코호트분석
고객의 첫 구매 월(Cohort)을 기준으로 이후 유지율(Retention)과 매출 추이를 분석했으며, 동일 코호트 내에서도 RFM 세그먼트별 유지 패턴의 차이를 확인할 수 있도록 설계함
cohort_stat (대시보드 사용)
전체 고객을 기준으로 코호트별 유지 지표를 산출
- Cohort별 최초 고객 수
- 월차(Cohort Age)별 유지 고객 수
- 유지율(Retention Rate)
- 유지 고객 매출액
- 1인당 유지 매출(Revenue per Active User)
- 평균 구매 기간
| cohort_date | cohort_age | first_user | active_users | retention_rate | period_revenue | revenue_per_user |
|---|---|---|---|---|---|---|
| 2019-10-01 | 0 | 345250 | 345250 | 1.0000 | 228396975.68 | 661.54 |
| 2019-10-01 | 1 | 345250 | 90823 | 0.2631 | 91814671.51 | 265.94 |
| 2019-10-01 | 2 | 345250 | 75950 | 0.2199 | 83479261.84 | 241.79 |
| 2019-10-01 | 3 | 345250 | 47207 | 0.1367 | 50662256.69 | 146.74 |
| 2019-10-01 | 4 | 345250 | 44014 | 0.1274 | 60435245.93 | 175.05 |
cohort_rfm_stat (대시보드 사용)
고객을 RFM 세그먼트 단위로 분리하여 코호트 내 유지율의 차이를 확인
| rfm_segment | cohort_date | order_date | cohort_age | active_number | cnt_retention |
|---|---|---|---|---|---|
| VIP | 2019-10-01 | 2019-10-01 | 0 | 15137 | 1.0000 |
| VIP | 2019-10-01 | 2019-11-01 | 1 | 8148 | 0.5383 |
| VIP | 2019-10-01 | 2019-12-01 | 2 | 6063 | 0.4005 |
| VIP | 2019-10-01 | 2020-01-01 | 3 | 3802 | 0.2511 |
| VIP | 2019-10-01 | 2020-02-01 | 4 | 2934 | 0.1938 |
4. 이탈고객 분석
이탈 고객 분석은 기존 RFM 기반의 세그먼트가 아닌 Recency 중심의 단순하고 직관적인 이탈 분류 기준을 사용 이를 통해 이탈 고객 규모, 행동 패턴, 매출 손실 리스크를 명확히 파악 가능
monthly_churn_stats
Recency를 기반으로 고객을 다음 4개 그룹으로 분류
-
- 신규 고객
- 기준연월에 처음 구매한 사용자
-
- 활성 고객
- 최근 60일 이내의 구매자
-
- 이탈 위험 고객
- 61 ~ 90일동안 미구매자
-
- 이탈 고객
- 91일 이상 미구매자
| snapshot_date | segment | user_cnt | LTV |
|---|---|---|---|
| 2019-10-31 | 신규 고객 | 345250 | 228396975.68 |
| 2019-11-30 | 신규 고객 | 350019 | 182841551.60 |
| 2019-11-30 | 이탈 위험 고객 | 4828 | 0.0 |
| 2019-11-30 | 활성 고객 | 340422 | 91814671.51 |
churn_user_ltv_stat
2020년 4월을 기준으로 이탈 고객의 과거 가치와 앞으로의 손실을 계산
- 4월 이탈 고객 수
- 이탈 고객의 과거 총 LTV
- 활성 고객 수
- 최근 3개월 이탈률 (2·3·4월)
- 4월 ARPU
- 5월 예상 손실액
예상 손실액 = 활성고객수 × 가중 이탈률(3개월) × ARPU
| churn_total_cnt | churn_ago_total_ltv | active_cnt | two_month | three_month | four_month | arpu | lose_ltv |
|---|---|---|---|---|---|---|---|
| 952076 | 688292524.94 | 521289 | 0.1828 | 0.0914 | 0.1041 | 118.23 | 7774410.20 |
churn_funnel (대시보드에 사용)
세그먼트별 조회/장바구니/구매 전환 지표를 산출
| segment | event_type | total_count |
|---|---|---|
| 신규 고객 | view | 12615540 |
| 신규 고객 | purchase | 737955 |
| 신규 고객 | cart | 681831 |
| 활성 고객 | cart | 627103 |
| 이탈 위험 고객 | cart | 1637 |
churn_interval (대시보드에 사용)
각 세그먼트가 최근 3일 / 7일 / 14일 / 전체(all day) 동안 발생시킨 행동 수를 분석
| segment | event_type | interval | event_cnt |
|---|---|---|---|
| 이탈 위험 고객 | view | all day | 8510436 |
| 활성 고객 | cart | all day | 5851518 |
| 신규 고객 | cart | 3 day | 7932370 |
churn_movings (대시보드에 사용)
월별 세그먼트 이동(Transition)을 기반으로 이동인원수를 산출
| snapshot_date | pre_segment | curr_segment | cnt |
|---|---|---|---|
| 2019-10-31 | 신규 고객 | 345250 | |
| 2019-11-30 | 신규 고객 | 활성 고객 | 340422 |
| 2019-12-31 | 활성 고객 | 이탈 위험 고객 | 210289 |
churn_category (대시보드에 사용)
이탈 고객이 어떤 카테고리를 많이 구매했는지 산출
| segment | category_id | total_count |
|---|---|---|
| 이탈 고객 | 2232732093077520756 | 238596 |
| 이탈 고객 | 2053013555631882655 | 195000 |