리텐션이란 ?
retention
- AAARRR 이라는 스타트업 그로스해킹 지표중 첫번째 R을 맡고 있다.
- 리텐션이 왜 중요하냐면 플랫폼의 특성상 사용자의 이동이 빈번한 만큼 고객 충성도를 높이고 한 고객이 다른 고객에게 이런 경험을 공유하는 것이 무엇보다 중요한 성장지표다.사용자 경험이 반복되어야 다시 들어오고 다시 들어오는데 이렇게 계속 방문해줘야 서비스도 살아난다.
- 무슨말인지 이해하기 힘들수도 있을것 같아서 간단한 소개 자료를 들고왔다.
- 토스 PO 세션 두번째 [유저가 떠나지 않는 개념] 동영상에서 리텐션의 중요성을 이야기 하고 있다
- AARRR 중에서도 리텐션 먼저 뜯어고쳐야 -> 즉 리텐션 곡선중 평평해지는 곳을 찾아야, 어플 유입이 유의미해진다는 뜻이다.
여러가지의 리텐션 차트중 파이썬으로 리텐션 차트를 그려보자
1. 필요한 데이터
먼저 고객아이디 컬럼과 방문일자 컬럼이 필요하다
- cust_seq , reg_dttm 이라고 가정한다.
월별 리텐션 계산을 위해서 주문한 날짜를 년 월 까지 끊어준다.
df["OrderPeriod"] = df["reg_dttm"].dt.strftime("%Y-%m")
df.head()```
유저의 첫번째 주문을 토대로 유저별 코호트 그룹을 설정한다.
df.set_index("cust_seq", inplace=True)
FirstOrder = df.groupby(df.index)["reg_dttm"].min()
FirstOrder = FirstOrder.dt.strftime("%Y-%m")
df["FirstOrder"] = FirstOrder
df.reset_index(inplace=True)
grouped = df.groupby(["FirstOrder", "OrderPeriod"])
cohorts = grouped["cust_seq"].nunique()
cohorts = cohorts.reset_index()
cohorts.head()
이름 바꿔주기
cohorts.rename({"cust_seq": "TotalUsers"}, axis=1, inplace=True)
cohorts.head()
기간별로 레이블 할당하기
each_period = cohorts["FirstOrder"].value_counts().sort_index()
cohortperiod = []
for x in each_period:
for y in range(x):
cohortperiod.append(y)
FirstOrder(동일한 경험)와 CohortPeriod(동일한 기간)으로 인덱스로
cohorts["CohortPeriod"] = cohortperiod
cohorts.set_index(["FirstOrder", "CohortPeriod"], inplace=True)
cohorts = cohorts["TotalUsers"].unstack(1)
cohorts.head()
- unstack()을 하면 왼쪽방향으로 wide하게 재 구조화 가능하다.
숫자로보면 얼마나 변했는지 모르니까 %로 (백분율)로 만들어주기
user_retention = cohorts.divide(cohorts[0], axis=0)
user_retention
마지막 색칠하기
plt.figure(figsize=(12, 8))
plt.title("Cohort Analysis - 리텐션분석", fontsize=20)
sns.heatmap(user_retention, annot=True, fmt=".0%")
plt.show()
- 전반적으로 줄었다가 다시 상승하는 경향을 보인다.
- 만약 우리가 물건을 파는 이커머스라면 이것은 긍정적인 지표이지만,
- 우리는 정보를 제공하는 서비스운영한다면 긍정적인 신호가 아니다.
- 만약 이게 미이탈 고객에 대한 자료라면 미 이탈고객이 매일 들어와서 미 이탈고객이 아니라 한참 안들어오다가 들어왔다는 뜻
- 2021년 2월 고객은 한참 안들어오다가 다시 들어옴 (22년 4월 즈음에 85% 다시 재방문)
- 22년 1월과 2월달에는 다음달까지 재방문률이 굉장히 높다.