본문 바로가기

마케팅

Revenue 쪼개보기 in R

반응형

이번 글은 앞서 작성했던

https://dangdo.tistory.com/57 에서 사용한 데이터 + 추가 매출정보를 이용해 설명해보고자 합니다.

 

코호트 분석 입문(Cohort analysis in R)

코호트분석은 특정기간 특정집단의 행동패턴을 관찰하고 분석하기 위해 주로 사용됩니다. 비즈니스 환경에서는 주로 고객들의 리텐션 지표를 알아보기 위해 사용되는데요. R에서 코호트 분석

dangdo.tistory.com

 

위에 글을 먼저 읽고 오시면 아래에서 설명할 내용을 조금 더 이해하고 쉬우시리라 생각됩니다.

앞선 내용을 요약해보면, 우리는 3개의 컬럼으로 이루어진 데이터를 통해 코호트 분석을 해보았습니다.

해당 데이터는 특정기간(2019년 가입자)에 가입한 유저들의 가입일, 마지막 로그인 기간을 담고 있습니다.

각 컬럼은 user_id(PK), 첫 가입일, 마지막 로그인 일입니다.

Revenue를 쪼개보기 위해 다음 표와 같이 추가적인 데이터를 사용하고자 합니다.

이 데이터 역시 앞선 강의에서 제공한 엑셀데이터를 이용했습니다.

payment_id item buy_date user_id
1 아이템A 2019-MM-DD 50
2 아이템B 2019-MM-DD 1211
3 아이템E 2019-MM-DD 327

df_1

저장된 데이터(df_1)는 위와 같은 형태를 취하고 있습니다.

결제번호, 아이템이름, 구매일자, 아이템을 구매한 유저의 ID값입니다.

payment %>%
  group_by(user_id) %>%
  summarise(total = sum(payment),
            n = n())

위와 같은 코드를 통해 user_id별 구매비용과 구매횟수를 알 수 있습니다.

결과는 아래와 같습니다.

# A tibble: 1,506 x 3
   user_id total     n
     <dbl> <dbl> <int>
 1      12  3000     1
 2      14 20000     1
 3      70 20000     1
 4      72 20000     1
 5      85 20000     1
 6      86  3000     1
 7     113  6000     2
 8     159 40000     2
 9     161 20000     1
10     168  3000     1
# … with 1,496 more rows

 

 

앞선 글에서 우리는 유저의 아이디, 가입일, 마지막 로그인 일을 알고 있기 때문에 USER_ID를 PK로 하여 MERGE하여

정보를 더 활용할 수 있습니다.

엑셀에서는 vlookup으로, R과 SQL에서는 join을 활용할 수 있습니다.

df_1<- left_join(df_1, user_info %>%
            select(user_id, sign_up), by = 'user_id')

 

 

user info 데이터의 user_id와 sign_up 열을 가져와 user_id기준으로 left join을 하였습니다.

df_1$sign_up <- month(df_1$sign_up)

df_2 <- dcast(df_1, sign_up ~ ., value.var = c("user_id"), length, margins=TRUE)
names(df_2)<- c("sign_up", "payment_number")
df_3 <- dcast(df_1, sign_up~., value.var = c("total"), sum, margins = TRUE)
names(df_3)<- c("sign_up", "sales")
df_4 <- full_join(df_2, df_3, by = "sign_up")
df_4$register_num <- sign_up2$`(all)`
df_4$active_num <- sign_up2$`12`
df_4$retention_ratio <- df_4$active_num/df_4$register_num
df_4$payment_ratio <- df_4$payment_number/df_4$active_num
df_4$ARPPU <- round(df_4$sales/df_4$payment_number)

 

코드에 대한 설명보다는 데이터를 어떻게 활용하고 보여줄 것인지에 대해 집중하겠습니다.

 

 

 

df_4 %>%
  group_by(sign_up) %>%
  ggplot(aes(x= sign_up, y= retention_ratio))+geom_col(fill="#2471A3")+coord_flip()+
  geom_text(aes( y= round(retention_ratio,2)+0.05, label = round(retention_ratio,2)), 
            vjust= 0.08, size = 4)+xlab("가입월")+ylab("잔존율")

위의 그림은 2019년 회원들의 월별 가입월을 기준으로 하여 현재의 잔존율을 나타내었습니다.

잔존율은 활성회원 수/해당 월 가입자 수로 구하여 최근일수록 그 잔존율이 높은 것을 확인할 수 있습니다.

 

 

 

 

 

 


 

df_4 %>%
  group_by(sign_up) %>%
  ggplot(aes(x=sign_up, y= payment_ratio))+geom_col(fill="#2471A3")+coord_flip()+
  geom_text(aes( y= round(payment_ratio,2)+0.03, label = round(payment_ratio,2)), 
            vjust= 0.08, size = 4)+xlab("가입월")+ylab("결제비율")+ggtitle("2019년 월별 가입자의 결제비율")

위 그림은 2019년 가입월별 결제비율을 막대그래프로 시각화한 것 입니다.

결제비율은 해당 월 가입자 중 결제자 수/활성회원 수로 구하였습니다.

위 그림에서는 1월 가입자의 잔존율이 가장 낮지만 1월 달 가입자의 결제비율이 가장 높은 것을 보여줍니다.

따라서 1월 가입자는 활성회원 중에서 유료서비스를 이용해 결제하는 회원의 비율이 높다는 특성을 보인다고 유추할 수 있습니다.

 

 


df_4 %>%
  group_by(sign_up) %>%
  ggplot(aes(x=sign_up, y= ARPPU))+geom_col(fill="#2471A3")+coord_flip()+
  geom_text(aes( y= round(ARPPU,2)+750, label = round(ARPPU,2)), 
            vjust= 0.08, size = 4)+xlab("가입월")+ylab("ARPPU") + ggtitle("2019년 월별 가입자의 ARPPU")

 

위 그래프는 2019년 월별 가입자의 ARPPU를 보여줍니다.

 

9월가입자들의 평균 결제액이 가장 높다는 것을 보여줍니다. 특정 회원의 금액만 큰 것인지, 회원 전체적으로 구매금액

 

이 많은 것인지는 데이터의 분포를 더 봐야 알 수 있을 것 같습니다.

 

이번 글에서는 R을 이용해 Revenue의 주요지표를 쪼개어 분석해보았습니다.

 

이용자의 가입월, 결제금액, 결제일 정보를 다양하게 조합하여 주요 KPI지표를 만들어 볼 수 있었습니다.

 

한 번 R을 이용해 코드를 작성해두면, 향후에 엑셀로 매번 작업할 필요없이 위와 같이 자동화 시킬 수 있으니,

 

활용해보는 것도 좋을 것 같습니다.

 

반응형

'마케팅' 카테고리의 다른 글

코호트 분석 입문(Cohort analysis in R)  (0) 2021.02.05
[AARRR] Activation  (0) 2021.01.13
[AARRR] Acquisition  (0) 2021.01.12
[AARRR] AARRR 개요  (0) 2021.01.11
[AARRR] Referal 지표  (0) 2021.01.04