일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 맞춤 이벤트
- Python
- bigquery
- Ecommerce
- 후기
- 데이터 분석
- segmentation
- It
- 맞춤 자바스크립트
- 크로스셀링
- tableau
- Ga
- SQL
- Google Analytics
- oracle
- Funnel
- sql 개발자
- tablueau
- DISTINCT
- 그로스해킹
- SQLD
- 이벤트 매개변수
- Kaggle
- API
- 통계
- 용어 정리
- 상관계수
- git
- pandas
- 캐글
- Today
- Total
녕녀기의 실험일지
[ 그로스해킹 ] 인프런 강의_excel로 구현된 retention + revenue 계산 및 시각화를 Python으로 구현하기 본문
[ 그로스해킹 ] 인프런 강의_excel로 구현된 retention + revenue 계산 및 시각화를 Python으로 구현하기
녕녀기 2023. 10. 13. 11:52(본문으로)
(목차로)
안녕하세요. 녀기입니다.
얼마 전 빅분기 필기가 끝났습니다~~🫡
(모두 쏴리 질러~~~~!!!!!)
굉장히 다행히도
한번에 붙어서 다행이네요ㅠㅠ
(여러분들은 모두 합격하셨는지요?)
큰 산을 하나 넘었기에
또 새로운 산을 하나 넘어야 합니다.
(약간 동산 정도죠.)
얼마 전에 '인프런'에서 강의 하나를 질렀습니다.
그것은 바로!!
그로스해킹 - 데이터와 실험을 통해 성장하는 서비스를 만드는 방법 - 인프런 | 강의
데이터를 기반으로 정의한 핵심지표를 바탕으로, 실험을 통해 배움을 얻고, 이를 빠르게 반복하면서 서비스를 성장시키는 것. 그로스해킹의 기본을 다루는 101 강의입니다., 🌱 데이터와 실험을
www.inflearn.com
이것입니다.
데이터 분석가로서 그로스해킹의 개념을 장착하고자 강의를 들었습죠.
사실 강사님의 책을 한 번 읽었지만, 실제로 어떻게 구현되는지는 몰랐기에
강의를 질러
excel로 retention과 revenue를 계산하고 시각화하는 법을 배웠습니다.
실습이 Python이나 R이 아니어서, 한번 정도는 Python으로 해 보는 것이 낫지 않겠나~~
하는 의미로 해 봤습니다.
전체 코드는 제 Github에 올려놨구요.
궁금하신 분들은 링크 따라 들어가 보시면 되겠죠?
블로그에서는 간단하게 흐름만 보려고 합니다.
(엑셀 자료를 업로드 하거나 포스팅하는 일 없이 제가 짠 파일만 올라올 예정입니다.)
서론이 길었으니 들어가 보시죠!!
목차
연습용으로 사용한 데이터는 아래와 같이 생겼습니다.
컬럼을 하나씩 얘기해 보자면
- user_id : 회원가입한 유저의 id
- sign_up : 회원가입한 날짜
- last_login : 마지막으로 로그인한 날짜
입니다.
'user_id'가 1인 회원분은 2019년 6월 3일부로 접속하지 않았습니다.
만약 현재까지 이어진다면, 이탈했다고 봐도 무방하겠죠?
retention
'retention'은 신규 유저가 우리 서비스에 만족하여, 우리 고객으로 지속하는지에 대한 개념입니다.
2019년 1월에 회원가입을 하고 3월에 마지막 접속이었다면,
이 고객은 적어도 2~3개월 간은 저희 고객으로 유지되고 있었다고 가정해도 될 것입니다.
이렇게 1월에 회원가입한 유저가 2월에는 어느 정도 유지가 되고, 3월에는 어느 정도 유지가 되는지 확인할 수 있습니다.
또한 2월에 가입한 유저가 3월에는 어느 정도 유지가 되고, 4월에는 어느 정도 유지가 되는지도 볼 수 있겠죠?
일단 위와 같이 회원 가입 날짜와 마지막 활동 날짜의 연, 월만 추출해 줍니다.
data1["last_login"].dt.strftime("%Y-%m")
그리고 pivot_table로 만들어 줍니다.
fig 3와 같이
행은 가입한 유저의 날짜,
열은 특정 날짜를 마지막으로 활동한 유저의 합을 표시합시다.
data1["last_login_month2"] = data1["last_login_month"]
pivot_table = pd.pivot_table(data=data1, values='last_login_month2', index=["sign_up_month"],
columns=['last_login_month'], aggfunc="count")
행에 있는 값을 모두 더하면 해당 날짜에 가입한 유저의 총 수가 되겠죠?
fig 4와 같이 '합계' 열을 추가합니다.
retention은 남아서 활동하고 있는 유저들에게 관심을 가지므로,
잔존하고 있는 유저를 월별로 확인해 보겠습니다.
예를 들어, 2019년 1월에 가입한 유저가 총 428명이고 1월을 마지막으로 활동한 유저가 109명이라면,
2월에 남아서 활동하고 있는 유저는 (428 - 109 = 319) (명) 입니다.
2월을 마지막으로 활동한 유저가 21명이라면, 3월에 남아서 활동하고 있는 유저는 (319 - 21 = 298) (명) 입니다.
이와 같이 계산을 하면 fig 5와 같이 나옵니다.
각 데이터를 전체 유저수로 나눠 retention을 비율로 표현하면
fig 6와 같이,
히트맵으로 시각화 해 보겠습니다(fig 7).
시간이 동일하게 흘렀다면, retention이 상승세를 타고 있는 것을 확인해 볼 수 있습니다.
하지만 fig 8을 봤을 때는 아직 retention이 안정적인지는 모르겠습니다.
revenue
이번에는 revenue에 대해 확인해 보겠습니다.
revenue야 뭐 그냥 월별 매출 확인하면 되는 것이 아니냐? 라고 생각할 수도 있지만,
데이터는 cohort를 나눠 보고 세세하게 분석할 수록 인사이트를 쉽게 발견할 수 있습니다.
세세하게 나눠보기 전에 일단 데이터 구조를 봐볼까요?
fig 9을 보면 어떤 유저가 어떤 품목을 언제 결제했는지 알 수 있습니다.
저 데이터를 유저의 총 결제 수와 총 결제 금액으로 변환하겠습니다.
# 유저별 결제 횟수 파악
count_user_id = data2.groupby("user_id")["payment"].count()
# 유저별 결제 금액 합계 파악
sum_user_id = data2.groupby("user_id")["payment"].sum()
# 결제 횟수와 결제 총 금액을 join
sales_per_user = pd.merge(left=count_user_id, right=sum_user_id, how="inner", on="user_id")
그리고 그 유저의 회원가입일도 넣어볼게요.
'retention'에서 만든 데이터 프레임을 JOIN 합시다.
sales_per_user = pd.merge(left=sales_per_user, right=data1[["user_id", "sign_up_month"]],
how="inner", on="user_id")
컬럼명까지 바꾸면 fig 10처럼 됩니다.
이제 저 데이터 프레임을 회원가입 날짜로 groupby 한 후
회원가입 날짜별 user_id의 총 갯수를 확인합니다.
그리고 'retention'의 특정 연,월별 총 가입자수와 잔존 회원수를 JOIN 합니다.
잔존 회원수 데이터는 fig 5의 '2019-12' 컬럼을 가져오면 되겠죠?(fig 11).
여기서 '활동회원' / '가입자' = '잔존율(retention)'이 되구요.
'결제자수' / '활동회원' = '결제비율'이 됩니다.
컬럼을 추가 할게요.
fig 10의 매출을 groupby해서 날짜별 총 매출을 만든 뒤
fig 11 데이터프레임에 JOIN 합니다.
그 후
'매출' / '결제자수' = 'ARPPU(Average Revenue Per Paying User)' 를 계산해서 컬럼을 추가합시다(fig 12).
비율을 %로 보고 싶은데 원본을 고치고 싶지 않다면
Pandas의 'style'을 사용합니다(fig 13).
(단, style을 적용한 데이터 프레임은 데이터 타입이 다르므로,
수정이나 계산, 시각화 등에 사용할 수 없습니다.)
display_devide_revenue = devide_revenue.style.format({"잔존율": '{:.1%}', "결제비율": '{:.1%}'})
잔존율과 결제비율, ARPPU를 막대 그래프로 시각화하면(fig 14)
위와 같이 표현할 수 있습니다.
12월의 ARPPU에서,
9, 10월에 회원가입한 유저의 ARPPU가 상위 1,2위를 차지하고 있습니다.
(저 데이터가 강사님이 임의로 만든 데이터이지만)
이유를 생각해 봤을 때,
크리스마스나 연말, 블랙 프라이데이 이벤트 등에 구매할 아이템을
미리 정하고 있던 고객이 아닐까?
하는 가정을 해 봅니다!!
강의 과정은 그 이후에 조금 더 있는데,
생각을 좀 더 해 본 다음에 해 볼게요~
(실력 문제인가)
그럼 다음 포스팅에서 뵐게요~~
다들 건강하시구요~💉
그럼 뿅
'-- Data -- > - 데이터 분석 -' 카테고리의 다른 글
[ 그로스해킹 ] 인프런 강의_excel로 구현된 retention + revenue 계산 및 시각화를 Python으로 구현하기 2탄 (0) | 2023.10.20 |
---|---|
[ 실생활에서 고찰 ] 테스트 - 이항 분포와의 관계 (0) | 2023.10.18 |
[ Data ] 퍼널 분석(Funnel Analysis)이란? (0) | 2023.07.03 |
[ 도서 ] 후기 : '데이터 스토리' (0) | 2023.05.08 |
[ 통계 ] 큰 수의 법칙, 중심 극한 정리 (0) | 2023.04.18 |