본문 바로가기
프로덕트 분석

[Pandas] Cohort Analysis(2) : 고객 유지율 구하기

by ISLA! 2024. 1. 26.

#1에서 도출한 코호트로 고객 유지율(Retention Rate)부터 살펴보자.

 

Retention Rate Table(고객 유지율)

  • cohort_counts 테이블에서 0번째 인덱스는 해당 월에 유입된 고객 수를 뜻한다.
# 각 코호트의 초기 고객 수
cohort_size = cohort_counts.iloc[:, 0]
cohort_size

 

 

  • cohort_counts 테이블을 위에서 구한 cohort_size로 divide()하면 리텐션 비율이 구해진다.
  • 이때 axis = 0 으로 하여 모든 행에 대해서 월별 리텐션 비율을 구한다.
# 각 월별 고객의 유지율
retention = cohort_counts.divide(cohort_size, axis=0) #axis 열방향
retention.round(3) * 100 #백분율로

 

  • retention 테이블을 히트맵으로 표현하면 한눈에 파악이 잘 된다.
# 히트맵
plt.figure(figsize = (15, 8))
plt.title('Retention Rates')
sns.heatmap(data=retention, annot=True, fmt='.0%', vmin=0.0, vmax=0.5, cmap='BuPu_r')
plt.show()


코호트 별 평균 구매액 비교

  • 이제 코호트 별로 특성을 살펴보자. 각 코호트는 얼마나 지출했을지부터 본다.
  • 첫구매 기준 월 & 시간정보인 코호트 인덱스를 기준으로 group by한다.
grouping = df.groupby(['CohortMonth', 'CohortIndex'])
cohort_data = grouping['Quantity'].mean().reset_index()
cohort_data.head()

  • 위에서 도출된 데이터를 피봇해서 살펴보면 쉽게 파악할 수 있다.
avg_quantity = cohort_data.pivot(index='CohortMonth', columns='CohortIndex', values='Quantity')
avg_quantity.round(1)
avg_quantity.index = avg_quantity.index.date #인덱스를 날짜로(시간 정보를 무시)
avg_quantity

 

 

  • 동일하게 히트맵으로 시각화해서도 살펴본다.
  • 1번 인덱스를 기준으로 시간이 지나며 얼마나 지출하는지 파악할 수 있다.
plt.figure(figsize = (15, 8))
plt.title('Average Quantity for each cohort')
sns.heatmap(data=avg_quantity, annot=True, vmin=0.0, vmax=20, cmap='BuGn_r')
plt.show()

 

 

 

 

 

 

 

 

 

 

 

 

728x90