코호트 분석

Tae Yoon·2025년 2월 24일
0

코호트 분석

코호트

특정 기간 동안 공통된 특성이나 경험을 갖는 사용자 집단

코호트 분석

시간을 두고 비슷한 그룹을 비교하는 방법

ex) 최근 유입 고객의 가입전환율이 낮아짐 -> 광고채널별 유입고객 코호트 분석

AARRR

그로스 해킹

사업의 핵심지표를 찾고, 성장시키는 방법을 찾는 활동

AARRR(해적지표)

사용자 행동방식 5단계 지표
사용자 유치(Acquisition), 사용자 활성화(Activation), 사용자 유지(Retention), 추천(Referral), 매출(Revenue)

고객 관리에서 Retention은 아주 중요

리텐션

리텐션

'고객 유지율'로 서비스의 성공을 예측할 수 있는 가장 기본적인 핵심 지표

측정 방법
특정 기간 내에 이벤트를 발생시킨 유저의 비율을 계산
기간 내 1번 이상의 이벤트가 관측되면 한 번으로 카운트
Retention = 측정 Week 기간 내 서비스 이용 고객수/Week1서비스 이용 고객수

실습

첫 구매 특가 상품을 구매한 고객이 더 잘 될 것인가?

가설: 첫 구매 특가 상품 구매 고객은 리텐션이 더 높을 것
독립변수: 첫 구매 특가 상품 구매 여부(1: 구매/0: 미구매)
종속변수: 고객 유지율(리텐션)
측정인원: 첫 구매 특가 상품 구매자 1,000명/미구매자 1,000명
기간: 1월 한 달간 첫구매 고객(1월 week1 주문고객 기준으로 week4까지 리텐션 비교)

sql 코드

T1: 고객 별 첫 주문 이후 몇 주차에 주문을 했는지
T2: 고객 별 추가 주문이 몇 번째인지(seq) 번호 부여
최종적으로, 각 고객의 첫 주문 이후 n주차에 추가 주문했는지 집계

# 첫 주문 테이블
select *
from first_ord_table;

# 오더마스터 테이블
select *
from order_master_cohort omc ;

# 테이블 조인
select *
from first_ord_table fot
left join order_master_cohort omc on fot.mem_no = omc.mem_no; 

# 분석에 필요한 데이터 집계(첫 주문 후 n주차별 주문 여부 분석)
with 
T1 as (
	select distinct fot.mem_no,
			is_promotion,
			case when ord_dt = first_ord_dt then 0
				when ord_dt > first_ord_dt and date(ord_dt) <= date_add(date(first_ord_dt), interval 7 day) then 1
				when ord_dt > date_add(date(first_ord_dt), interval 7 day) and date(ord_dt) <= date_add(date(first_ord_dt), interval 14 day) then 2
				when ord_dt > date_add(date(first_ord_dt), interval 14 day) and date(ord_dt) <= date_add(date(first_ord_dt), interval 21 day) then 3	
				when ord_dt > date_add(date(first_ord_dt), interval 21 day) and date(ord_dt) <= date_add(date(first_ord_dt), interval 28 day) then 4
				else null end as week_number
	from first_ord_table fot 
	left join order_master_cohort omc on fot.mem_no = omc.mem_no 
)
# 각 고객별 첫 주문 이후 추가 주문 순서 부여
, T2 as (	
	select is_promotion, mem_no, week_number,
			row_number() over(partition by mem_no order by week_number) seq
	from T1
	where week_number is not null)
	
	select is_promotion,  -- 특가 상품 구매자/미구매자 코호트 
			case when week_number = 0 then '1.w-0'
				 when week_number = 1 and seq = 2 then '2.w-1'
				 when week_number = 2 and seq = 3 then '3.w-2'
				 when week_number = 3 and seq = 4 then '4.w-3'
				 when week_number = 4 and seq = 5 then '5.w-4' end as week_range,
			count(mem_no) as mem_cnt
	from T2
	group by 1,2
	order by 1,2;

파이썬 시각화

import plotly.express as px
import pandas as pd
import numpy as np
from matplotlib import rc
import matplotlib.pyplot as plt
plt.rc('font', family='NanumGothic')

cohort = pd.DataFrame({'is_promotion': ['0', '0', '0', '0', '0', '1', '1', '1', '1','1'],
                       'week_range': ['w-0', 'w-1', 'w-2', 'w-3', 'w-4', 'w-0', 'w-1', 'w-2', 'w-3', 'w-4'],
                       'mem_cnt': [1000, 239, 104, 59, 45, 1000, 440, 266, 198, 155]})
                       
cohort['retention'] = cohort.mem_cnt/1000
          
fig = px.line(data_frame=cohort, x='week_range', y='retention', color='is_promotion',
              title='코호트 분석')
fig.update_traces(selector=dict(name='0'), name='특가 상품 구매자')
fig.update_traces(selector=dict(name='1'), name='특가 상품 미구매자')
fig.show()

프로모션여부W-0W-1W-2W-3W-4
11,00044%27%20%16%
01,00024%10%6%5%

일반적인 코호트 분석 결과의 그래프는 점점 떨어지는 그래프
표로 표현할 때는 프로모션을 시작한 주에는 인원수를 작성하고 주차 별로 남은 인원의 비율 작성
특가 상품 구매 코호트가 1주가 지난 시점부터 높은 리텐션이 보인다
첫 구매 특가 상품 프로모션을 유지하는 방향으로 의사결정

0개의 댓글

관련 채용 정보