Week 2. 리텐션 분석

so.log·2022년 12월 12일
0

🎉 온라인 쇼핑몰에 입사하신 것을 축하합니다 🎉

가구, 사무용품, 전자기기를 판매하는 온라인 쇼핑몰에 입사했습니다. 어느날 대표님이 여러분 자리로 슥 다가와서 말을 겁니다.

“지난달 결제자 수가 100명이네요. 다음달에는 300명까지 늘려봅시다.”

다음달 결제자를 3배 늘리라고 하시네요. 가능한 목표일까요? 어떻게 하면 달성할 수 있을까요?

지금 유료 광고를 하고 있는데, 한 달에 마케팅 예산으로 10만원을 쓰고 그로 인해 매달 10명의 신규 사용자가 우리 쇼핑몰에서 결제한다고 칩시다. 마케팅 예산을 30배로 늘리면요? 별다른 일이 없다면 매달 300명의 신규 사용자가 우리 쇼핑몰에서 결제를 할겁니다. 그러면 월 결제자 300명 달성이죠!

이렇게 마케팅 예산을 30배로 늘려서 월 결제자를 300명 달성한 날, 대표님이 다시 여러분을 찾아왔습니다.

“월 결제자 300명을 달성했네요! 그런데 이 중에 신규 결제자가 290명이고 재결제한 사람은 10명 밖에 안되더라고요. 신규 결제는 잘 일어나는데 왜 기존 결제자들이 재결제를 하지 않는 걸까요? 월 결제자를 300명 이상으로 유지하고, 그 중 재결제자의 비율을 높여봅시다.”

새로운 과제가 떨어졌네요. 재결제자의 비율은 어떻게 높일 수 있을까요?

AARRR

잠깐, 재결제자에 대해 이야기하기 전에 AARRR에 대해서 먼저 이야기해볼게요.

AARRR은 Dave McClure 라는 벤처투자자가 만든 분석 프레임워크입니다. 성공적인 사업을 구축하는 데 필요한 다섯 가지 요소(Acquisition, Activation, Retention, Revenue, Referral)의 약어로 흔히 AARRR 또는 해적지표(Pirate Metrics)라고 불러요.

이미지 출처: https://dwarves.foundation/playbook/aarrr-framework-zmjhde6izw/

어떤 서비스를 만드는 사람이든 사용자가 빨리 늘고, 매출이 많이 나오기를 바랄텐데요. 그러면 가장 쉽게 할 수 있는 액션이 뭘까요? 아까 우리가 얘기한 것처럼 광고를 늘리는 겁니다. 단순 가입과 트래픽은 돈을 주면 늘릴 수 있습니다. 하지만 그렇게 광고를 보고 들어온 사람들이 결국 우리 서비스에 만족하지 않는다면 금방 이탈할거에요. 여러분도 광고를 보고 혹해서 앱을 설치했다가 금방 지워본적 있으시죠? 무턱대고 많은 신규 사용자들을 데려오기 전에 우리 서비스가 재방문할만한, 자주 사용하고 싶은 서비스가 되어야합니다.

“밑 빠진 독에 물 붓기” = “Retention 없는 Acquisition은 마케팅 예산 낭비”

기존 사용자들이 우리 서비스를 잘 사용하고 있는지, 지속적으로 사용하는지 관찰하는 Retention 지표들은 다른 어떤 단계의 지표들보다 가장 먼저 분석되어야 합니다. 그래서 어떤 사람들은 AARRR을 RARRA로 불러요. 가장 먼저 달성되어야 하는 지표 순서대로 Retention → Activation → Referral → Revenue → Acquisition 이렇게요.

코호트 분석(리텐션 차트의 기본)

“재결제자"를 늘려야한다는 미션을 받은 우리가 분석하고 개선해야하는 지표는 리텐션입니다. 리텐션 차트를 그려보기 전에 리텐션 차트의 기본이 되는 코호트에 대해서 먼저 이야기해볼게요. 예시로 가져온 온라인 쇼핑몰의 고객 수와 고객당 평균 구매액 데이터를 같이 읽어봅시다.

예시 데이터 출처: 린 분석 p60

위 데이터를 보면 전체 고객이 매달 1,000명씩 늘고 있고, 고객 당 평균 구매액이 1월 이후로 좀 작아졌다가 점점 회복하고 있다는 정보 정도를 얻을 수 있습니다. 그러면 이 사업은 잘 되고 있는걸까요? 1월에는 인당 평균 구매액이 $5 였는데, 지금은 $4.5 니까 잘 못하고 있는건가요?

전체 고객 안에는 신규 고객과 기존 고객이 섞여 있기 때문에 상황이 어떻게 변하고 있는지 구체적으로 알기 어렵습니다. 고객들을 가입 시기별로 나누어 데이터를 다시 보겠습니다.

이 데이터를 보고, 어떤 것을 알아낼 수 있을까요? “우리 서비스 잘 되고 있는 건가요?” 라는 질문을 받는다면 여러분들은 어떻게 답변하시겠어요?

우선, 가입 시기별로 나누어 보니 아까는 보이지 않던 정보를 알아낼 수 있네요.

  • 가입 1개월 후 고객 당 평균 구매액이 증가하고 있다
  • 시간이 지날수록 고객 당 평균 구매액은 감소하고 있다
  • 나중에 가입한 고객일수록 평균 구매액 감소폭이 줄어들고 있다

“가입 1개월 후 고객 당 평균 구매액이 증가하고 있고, 나중에 가입한 고객일수록 평균 구매액 감소폭이 줄어들고 있기 때문에 잘 되고 있다고 보이네요. 다만, 시간이 지날수록 고객 당 평균 구매액이 감소하고 있어서 기존 고객이 재구매를 많이 할 수 있도록 리타겟 마케팅을 해보면 좋을 것 같습니다.”

이렇게 고객을 전체 고객으로 보지 않고 사용자 그룹으로 나누어서 보는 것, 일반적으로 가입 시기 별로 나누어서 보는 것을 코호트 분석이라고 합니다. 위에 차트의 삼각형 모양 어디에서 많이 보셨죠? 사전 과제 글 중에서 리텐션 (5) 리텐션 차트, 리텐션 커브에 수록되었던 데이터리안 블로그 리텐션 차트 모양이 코호트 차트와 같습니다.


1. 이렇게 동질 집단별로 사용자를 나누어 분석하는 것을 Cohort 분석이라고 하고
2. 이를 리텐션 분석에 응용한 것이 리텐션 차트다.

Cohort 분석은 리텐션 차트 만드는데만 쓰는 개념이 아니라 퍼널 분석, 매출 분석, 이탈 분석 등 어떤 지표에든 적용할 수 있는 분석 프레임워크입니다. 그러니까 오늘 리텐션 차트 만드는 쿼리 형태에 익숙해지면 내가 보고 싶은 다른 데이터를 붙여서 뽑아볼 수 있을거에요.

클래식 리텐션

AARRR 중 리텐션 단계에서는 사용자들이 우리 서비스를 1회성이 아니라 지속적으로 사용하는지, 핵심가치를 꾸준히 경험하는지를 측정합니다. 측정 방법에 정해진 공식이 있는 것은 아니지만 몇 가지 자주 사용하는 방법들이 있습니다. 오늘은 그 중에서도 클래식 리텐션(Classic Retention)에 대해서 살펴보겠습니다. 클래식 리텐션은 N-Day Retention 이라고도 합니다.

지속적 사용의 기준은 서비스마다, 상황마다 달라질 수 있습니다. 사전과제로 읽어보셨던 아티클에서는 방문을 기준으로 계산했었죠. 우리는 오늘 재결제자의 비율을 늘리라는 미션을 받았기 때문에 “결제”를 기준으로 클래식 리텐션을 계산해서 현재 상황을 파악해보겠습니다.

SQL로 어떻게 쓸 수 있지?

👉 solvesql.com 플레이그라운드에서 US E-commerce Records 2020 데이터를 선택해주세요.
단계별로 따라해봅시다 🪜🚶🏻‍♀️

Step 1. records 테이블과 customer_stats 테이블을 연결

두 테이블을 customer_id 를 기준으로 연결하여 아래와 같은 데이터를 만들어주세요.

Step 1 쿼리

SELECT r.customer_id
      ,r.order_id
      ,r.order_date
      ,c.first_order_date
FROM records r INNER JOIN 
    customer_stats c ON r.customer_id = c. customer_id  

Step 2. 첫 주문일, 주문날짜 데이터를 ‘YYYY-MM-01’ 형태로 가공

date_format() 함수를 이용하여 order_date, first_order_date 컬럼을 ‘YYYY-MM-01’ 형태로 가공하고 각각 order_month, first_order_month로 출력해주세요.

SELECT r.customer_id
      ,r.order_id
      ,r.order_date
      ,c.first_order_date
      ,DATE_FORMAT(r.order_date,'%Y-%m-01') AS order_month
      ,DATE_FORMAT(c.first_order_date,'%Y-%m-01') AS fir_order_month
FROM records r INNER JOIN 
    customer_stats c ON r.customer_id = c. customer_id

Step 3. 위 데이터를 사용하여 각 월 별로 첫 구매한 고객이 몇 명인지 계산

SELECT first_order_month
      ,COUNT(distinct customer_id) month0
FROM records_preprocessed
GROUP BY first_order_month

Step 4. 첫 결제한 달의 다음 달에도 결제한 고객은 몇 명일까?

SELECT first_order_month
      ,COUNT(distinct customer_id) month0
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 1 month) = order_month THEN customer_id end) month1
FROM records_preprocessed
GROUP BY first_order_month

Step 5. 첫 결제한 달로부터 1~11개월 뒤에도 주문한 고객의 수

SELECT first_order_month
      ,COUNT(distinct customer_id) month0
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 1 month) = order_month THEN customer_id end) month1
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 2 month) = order_month THEN customer_id end) month2
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 3 month) = order_month THEN customer_id end) month3
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 4 month) = order_month THEN customer_id end) month4
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 5 month) = order_month THEN customer_id end) month5
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 6 month) = order_month THEN customer_id end) month6
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 7 month) = order_month THEN customer_id end) month7
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 8 month) = order_month THEN customer_id end) month8
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 9 month) = order_month THEN customer_id end) month9
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 10 month) = order_month THEN customer_id end) month10
      ,COUNT(distinct CASE WHEN DATE_ADD(first_order_month ,INTERVAL 11 month) = order_month THEN customer_id end) month11
FROM records_preprocessed
GROUP BY first_order_month

클래식 리텐션 데이터 해석

[구글 스프레드시트][**실전반 2주차 수업자료 (Retention)**](https://docs.google.com/spreadsheets/d/1D3Ac5GaVH2lyYuZ45d8sz-Ilx9D7lRUwnQuYngn_Qhc/edit?usp=sharing)

profile
우당탕탕! 끄적이는 개발공부 👋

0개의 댓글