🔥 태블로 분석 프로젝트/🎯 앱스플라이어 유저 로그 분석

🎯 유저 로그 분석 - 미션 카테고리 별 리텐션/이탈 패턴 파악 대시보드

nyamin9 2023. 7. 23. 16:53

모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!! 

 

 

 


 

 

🎯 대시보드 이미지 

 

 

 

 

🎯 태블로 퍼블릭

https://public.tableau.com/app/profile/kang.mingu/viz/_user_log/RETENTION_DASHBOARD

 

비즈니스시나리오_user_log

비즈니스시나리오_user_log

public.tableau.com

 

 


 

🎯 1. 비즈니스 시나리오 및 문제 정의

 

제가 소속되어 있는 게임회사는 9월 1일을 기준으로 새로운 게임을 런칭했습니다. 본 게임은 하루에 세 가지 종류의 미션을 제공하고, 해당 미션을 완수하는 유저들에게 보상을 제공하는 미션 달성형 게임입니다. 런칭 후 2달 가량이 지난 현재, 회사의 경영진과 개발진은 데이터 분석 팀에게 각 미션 카테고리 별 신규 유저 획득과 유저의 이탈률을 파악해달라는 요청을 했습니다. 다음으로 출시될 미션은 우선 미국을 타깃으로 잡고 있기 때문에, 이에 대한 방향성을 잡기 위해 미국에서의 기존 미션 성과를 파악해 달라고 합니다. 이를 위해, 저희 팀에서는 다음 네 가지의 지표를 선정하여 분석을 진행할 예정입니다.

 

 

A. 리텐션율

카테고리 별로 첫 번째 방문 주차 기준 리텐션율을 파악합니다. 코호트 차트와 비슷한 의미이지만, 리텐션의 추세를 파악하고 각 주차에 일어난 이슈와 비교해 본다면 리텐션율에 영향을 주는 이유를 파악하는 데에 도움이 될 것입니다.

 

B. 신규 유입 유저 증감율

한 주를 기준으로, 카테고리 별 신규 유저의 유입 증감율을 파악합니다. 유입이 크게 일어났다면, 그 시기에 어떠한 마케팅 전략을 사용했는지 혹은 어떠한 이벤트를 진행했는지를 트래킹해 향후 리텐션 유지에 기여할 것입니다.

 

C. 코호트 차트

A 에서의 리텐션율과 각 시기에 활성화된 유저의 수까지 보다 자세히 파악할 수 있도록 코호트 분석을 진행합니다.

 

D. 유저 이탈 예측

미션 카테고리 별로 유저의 이탈률을 예측하고 이탈이 일어날 법한 날짜에 맞추어 복귀 이벤트 SMS를 전송하는 등의 전략을 사용할 수 있을 것입니다.

 

 


 

🎯 2. EDA

 

• 데이터 원본은 [유저 ID, 국가 코드, 국가명, 발생 이벤트명, 이벤트 발생 시간, 이벤트 정보] 에 대한 정보들입니다.

 

 

• 본 분석은 우선 미국을 타깃으로 한 분석이기 때문에 데이터에서 미국에 해당하는 행만을 필터링하고, [Event Value] 열에서 미션의 카테고리를 추출할 것입니다. 미국 데이터를 가져오기 위해 태블로 데이터 원본의 추출 기능에서 필터를 설정해 주었으며, 미션 카테고리 추출을 위해서는 아래의 계산된 필드를 정의하였습니다.

# 필드명 : SELECTED MISSION 

IF REGEXP_MATCH([Event Value], '(ly_mission)') == TRUE THEN 'DAILY'
ELSEIF REGEXP_MATCH([Event Value], '(ty_mission)') == TRUE THEN 'COMMUNITY'
ELSE 'SPECIAL'
END
 

 

• 이후 [User ID, SELECTED MISSION, Event Time] 필드에 대한 NULL값 존재 여부 파악을 위해서 ISNULL( ) 함수를 사용해 계산된 필드를 만들어 주었으며, 이를 필터링해 검사한 결과 NULL 값은 없었습니다.

 

• 분류된 카테고리는 [Daily, Community, Special] 의 세 가지 종류입니다. Daily Mission의 유저가 가장 많을 것은 어느 정도 당연시되었기 때문에, 나머지 두 카테고리 중에서 Daily Mission과 비슷한 활성화를 보여주는 미션이 존재한다면 해당 미션을 전환으로 생각해도 되지 않을까라는 가설을 바탕으로 분포를 확인했습니다. 다만 결과는 아래와 같았고, 이는 전환이라고 생각될 정도는 아니었기 때문에 원래 계획대로 리텐션과 이탈 패턴 파악에 집중한 분석을 진행하기로 결정했습니다.

 

 

 


 

🎯 3. 대시보드 기획

 

• 해당 대시보드를 통해 미션 카테고리 별 리텐션과 신규 유입 및 이탈 패턴을 파악하는 것이 가장 큰 목적입니다.

 

• 이는 주로 경영진과 마케팅팀, 개발진이 보게 될 내용이며, 주차별 리텐션을 기반으로 해당 주차에 진행했던 개발과정에서의 개선점을 정리할 수 있을 것입니다. 또한 이탈 예측을 통해 이탈을 막기 위한 마케팅 전략 역시 구축할 수 있을 것입니다.

 

• 이를 위해 앞서 기술한 4가지 지표와 인사이트 도출 계획을 정의했습니다.

 

[리텐션율, 신규 유입 유저 증감율, 코호트 차트, 유저 이탈 예측]

 

• 개괄 정보를 확인한 후 세분화와 예측을 진행하는 것이 가독성을 높일 수 있을 것이라 생각했기 때문에, 비율에 대한 두 시트를 좌측에 위치시키고 나머지 두 시트는 가운데, 우측에 위치했습니다. 대략적인 대시보드 뼈대는 아래와 같이 구상했습니다.

 

 

 

 

🎯 4. 시트 제작

 

• 각 라인은 붉은색이 Daily Mission, 분홍색이 Community Mission, 흰색이 Special Mission 입니다.

 

 


 

1) 주차별 리텐션율

 

 

• 사용한 계산된 필드

# 필드명 : FIRST EVENT PER USER

{FIXED [SELECTED MISSION], [User ID]: MIN([Event Time])}

 

-> 각 유저의 각 카테고리에 대한 첫 유입 시간을 파악하기 위해 위와 같이 작성했습니다.

 

# 필드명 : WEEKS FROM FIRST EVENT

DATEDIFF('week',[FIRST EVENT PER USER],[Event Time])

-> 유저가 방문한 시간과 첫 방문 시간의 차이를 주 단위로 나타내기 위해 위와 같이 작성했습니다.

 

# 필드명 : WEEKLY RETENTION %

COUNTD([User ID]) / ATTR({EXCLUDE [WEEKS FROM FIRST EVENT] : COUNTD([User ID])})

-> 특정 주차에 첫 방문한 고유 유저의 수를 분모에 두고, 해당 주차 이후 각 주차 별로 방문한 고유 유저의 수를 분자에 둠으로써 리텐션 비율을 구했습니다.

 

 


 

2) 신규 유입 유저 증감율

 

 

 

• 사용한 계산된 필드

# 필드명 : user rate test

((LOOKUP(COUNTD([User ID]), 0) - (LOOKUP(COUNTD([User ID]), -1))) 
/ (LOOKUP(COUNTD([User ID]), -1))) * 100
 

-> 각 주차의 이전 주차에 대한 신규 유입 유저 수의 증감률을 파악하기 위해 위와 같이 작성했습니다.

 

 


 

3) 코호트 차트

 

 

-> 사용한 계산된 필드는 [SELECTED MISSION, WEEKS FROM FIRST EVENT, FIRST EVENT PER USER, WEEKLY RETENTION %] 입니다. 해당 필드들은 상술하였기 때문에 따로 설명하지는 않는 점, 양해 부탁드립니다 :) 위 세 시트에 대해서는 SELECTED MISSION 필드를 공통 필터로 적용했습니다.

 


 

4) 유저 이탈 예측

 

 

• 사용한 계산된 필드

# 필드명 : LAST EVENT PER USER

{FIXED [User ID]:MAX([Event Time])}

-> 각 유저의 각 카테고리에 대한 최종 유입 시간을 파악하기 위해 위와 같이 작성했습니다. 현재 날짜인 2019-10-26을 기준으로 이탈을 계산할 것이기 때문에, 최종 유입 시간을 구하는 것입니다.

 

# 필드명 : LAST_LOG_OVER_DATE

DATEDIFF('day',ATTR([LAST EVENT PER USER]), MAX({FIXED : MAX([Event Time])}))

-> 데이터의 마지막 날짜와 최종 유입 날짜의 차이를 일 기준으로 구합니다. 게임에 접속하지 않은 일수를 의미합니다.

 

# 필드명 : LOG_AVG (평균 접속 주기)

ROUND(
WINDOW_AVG(
DATEDIFF('day', 
LOOKUP(MIN([Event Time]), -1), 
LOOKUP(MIN([Event Time]), 0))
))

-> 각 유저의 방문 간 일자 간격을 계산하고, 이를 이동평균내서 반올림해 유저의 평균 접속 주기를 구합니다.

 

# 필드명 : RISK RATIO (이탈 위험 비율)

[LAST_LOG_OVER_DATE] / [LOG_AVG (평균 접속 주기)]

-> 게임에 접속하지 않은 일수를 평균 접속 주기로 나누어 이탈에 대한 위험 비율을 계산합니다.

 

# 필드명 : CHURN (이탈 여부)

IF [LAST_LOG_OVER_DATE] > 7 THEN 1 ELSE 0 END

 

-> 각 유저의 접속하지 않은 일수가 8일 이상이라면 이탈(1)로, 7일 이하라면 유지(0)로 레이블을 만들어줍니다.

 

 

 

• 이렇게 만들어준 함수를 바탕으로 테이블을 만들었고, 그 결과를 일부만 보면 아래와 같습니다.

 

 

(제가 원하는 대로 이탈 예측을 하려면 로지스틱 회귀를 해야 했습니다. 하지만 태블로에는 아직 로지스틱 회귀 옵션이 없어서, 태블로를 R server와 연동해 R의 스크립트를 그대로 사용하려 했습니다. 이렇게 하면 위에서 잡은 이탈 기준 7일을 다양하게 바꾸면서 이탈을 시뮬레이션 할 수 있을 테니까요!! 하지만 왜인지 서버와의 연동이 계속 실패해서, 어쩔 수 없이 만든 테이블을 추출해서 직접 R Studio로 회귀를 돌린 후에, 회귀 결과를 다시 .csv 파일로 만들어 태블로로 가져왔습니다,,, 그래서 결국 이탈 예측도 7일 기준으로만 수행할 수 밖에 없었습니닷,,, 사용한 R 코드입니다. 물론 변환은 하셔야겠지만, 혹시 나중에 필요하신 분들은 참고하셔도 좋을 것 같아요!!)

 

 

 


 

🎯 5. 인사이트 및 액션 도출

 

• 첫번째 리텐션율 시트를 보면, Daily Mission의 리텐션은 굉장히 높지만 그에 반해 Special Mission의 리텐션은 낮은 축에 속합니다. 일반적으로 리텐션율이 20% 가량을 유지하면 굉장히 좋은 서비스일 가능성이 높기 때문에 큰 문제가 있어 보이지는 않지만, 이제 런칭한지 2달 가량 된 게임이기 때문에 보다 낮아질 가능성이 커 보입니다. 그럼에도 고무적인 것은 두 번째 차트인 신규 유입 유저 증감율 시트에서 Special Mission이 좋은 성적을 올리고 있다는 점입니다. 다만 원래 유저 수가 타 카테고리에 비해 적었기 때문에 단순히 수치로만 파악하는 것은 금물이니, 해당 미션의 유입을 이끌 수 있는 방법이 필요한 것은 확실해 보입니다. 따라서 해당 미션에 대한 유입을 보완하기 위해 이벤트를 기획하거나, 배너를 통해 유입을 만드는 것도 나쁘지 않을 것입니다. 특히 40주차에는 세 미션에 대한 유입이 전부 대폭 성장했기에, 새로운 미션을 기획하기보다는 당시 사용한 이벤트를 다음 주차에 비슷한 방식으로 진행하여 우선적으로 유저 유입을 만들고, 리텐션을 관리하면서 새로운 서비스를 만드는 것을 추천합니다.

 

 

• 코호트 차트를 보면 공통적으로 40주차에 해당하는 시기에 유저의 유입이 급증했습니다. 이는 특정 시점에 모든 유저 코호트의 리텐션을 강화 / 약화할 이벤트가 있는 경우에 해당하기 때문에, 이 당시 진행했던 이벤트 혹은 서비스 기획을 제대로 파악하고 재구성할 필요가 있어보입니다. 특히 40주차 이후 Special Mission의 신규 유저 유입이 증가한 반면 나머지 두 미션에 대해서는 오히려 줄어들었기 때문에, 다음으로 진행할 행사에서는 타 카테고리에 초점을 맞춰도 좋을 것이라 생각합니다.

 

 

• 이탈 기준일을 7일로 잡은 경우, 유저의 이탈률 예측은 다음과 같이 해석합니다.

Special Mission의 경우, 유저의 평균 접속 주기보다 2.06배 긴 시간 접속이 없다면 유저의 이탈 확률은 0.6098 입니다.

 

이때 2.06은 위험 비율을, 이탈 가능성이 1이라는 것은 완전한 이탈을 의미합니다. 이러한 수치를 기반으로, 각 미션별 이탈 가능성을 미리 추적하면서 특정 임계치를 넘은 유저에게 푸시 메시지를 쏘는 등의 마케팅이 도움이 될 수도 있을 것입니다. 다만 이렇게 예측을 기반으로 실행에 옮기기 위해서는 보다 많은 실험이 선행되어야 할 것이기 때문에, 다양한 이탈 기준일과 임계치를 바탕으로 한 시뮬레이션이 필요합니다. 7일 기준의 현재 이탈 곡선은 어느 정도는 우측으로 치우쳤다고 볼 수는 있으나 모든 미션의 경우 위험 비율이 5이상이면 유저가 이탈할 가능성이 100%라고 예측하고 있습니다. 따라서, 위험비율이 5에 가까운 유저들은 따로 클러스터링해서 타겟 마케팅을 진행하는 것을 추천합니다. 이탈 예방을 목적으로 관리를 해줌으로써, 보다 높은 리텐션 유지에 기여할 수 있을 것입니다.

 

 


 

 🎯6. 대시보드 완성본 

 

 

• 전체 미션 카테고리

.

 

• 필터 적용 -> 단일 미션 카테고리

• 이탈 곡선의 분홍색 버튼 클릭 시, 각 유저들의 접속 일자에 관련된 정보와 위험 비율 및 이탈 여부를 정리한 테이블로 이동합니다. 해당 테이블을 기반으로 이탈 관리를 진행하면, 리텐션 유지 및 개선에 크게 기여할 수 있을 것입니다!!

 

 

▼버튼 클릭 시 이동 테이블

 

 

• 또한 해당 대시보드를 보는 대상의 시각에 맞춰서, 이번 시나리오는 좀 더 설명적인 측면에 주안점을 뒀습니다. 마우스 커서를 올리면 문어체에 가깝게 세부 설명이 나오도록 설정했습니다.

 

 

 


 

🎯 7. 셀프 리뷰

 

• 이탈 예측 시트와 나머지 시트의 데이터 원본이 달라서 제가 원한 대로 필터 적용이 되지 않은 점이 아쉽습니다. 매개변수도 적용해보고, 이것저것 해봤는데 끝까지 안되서 어쩔 수 없이 이탈 예측 시트의 필터는 대시보드에 따로 생성해야 했습니다. 해당 부분은 태블로에서 어떻게 구현할 수 있을지 궁금합니다!!

 

• 아이콘을 가지고 각 카테고리에 대한 필터를 만들었는데, 아이콘으로 만든 필터는 오직 단일 목록만 가능한 건지 궁금합니다. 좀 더 예쁜 UI/UX를 가진 대시보드를 원했는데, 이 친구 때문에 너무 아쉽습니다ㅠ