リテンションコホート — 分母を間違えるとすべて間違う
한국어 원문으로 표시합니다.
한 줄 요약
리텐션은 "가입한 사람들 가운데 N주 뒤에도 쓰는 사람의 비율" 이다. 같은 주에 가입한 사람들을 한 묶음(코호트)으로 두고, 분모는 언제나 그 코호트의 가입자 수, 아직 오지 않은 주는 0 이 아니라 빈칸으로 둔다. 이 두 가지만 지켜도 창업 초기에 가장 흔한 착시 세 가지가 사라진다.
왜 이게 필요했나
월간 활성 사용자는 매달 늘고 있었다. 그런데 새 가입자가 그보다 빨리 늘고 있었다 — 바가지에 구멍이 났는데 물을 더 빨리 붓고 있었던 것이다. 전체 활성 수는 들어오는 물과 새는 물을 한 숫자에 섞는다. 제품이 사람을 붙잡고 있는지는 같은 시기에 들어온 사람들이 시간이 지나며 얼마나 남는지를 따로 봐야 보인다. 그것이 코호트다.
광고비를 늘릴지, 기능을 더 만들지, 멈추고 다시 생각할지는 대개 이 곡선 하나로 정한다. 곡선이 어느 지점에서 평평해지면(더 떨어지지 않으면) 붙잡힌 사람들이 있다는 뜻이고, 끝까지 0 을 향해 내려가면 아직 제품이 누군가의 습관이 되지 못했다는 뜻이다. 그래서 계산이 틀리면 결정이 통째로 틀린다.
어떻게 동작하나
코호트와 주차. 이 실습에서 코호트는 가입 시각의 서울 기준 주(월요일 시작)다. N주차 유지는 "가입 주를 0주차로 쳐서 N번째 주에 session_start 가 있었다" 이다. 표로 그리면 행이 코호트, 열이 N 인 삼각형이 된다 — 늦게 가입한 코호트일수록 오른쪽 칸이 비어 있다.
함정 1 — 분모. N주차 유지율의 분모를 "0주차에 활동한 사람" 으로 잡으면, 가입만 하고 한 번도 안 온 사람이 조용히 빠져 유지율이 올라간다. 가입 퍼널의 문제(첫 경험 실패)를 리텐션 표에서 지워 버리는 셈이다. 분모는 가입자 수다. 첫 경험을 따로 보고 싶다면 그것은 활성화율이라는 다른 지표로 적는다.
함정 2 — 관측되지 않은 칸. 11주차에 가입한 코호트의 6주차는 아직 오지 않았다. 그 칸을 0 으로 채워 여러 코호트를 평균하면, 최근 코호트가 많을수록 곡선이 가짜로 꺾인다. 여러 코호트를 합쳐 N주차 유지율을 낼 때는 N주차까지 관측이 끝난 코호트만 모으고, 사람 수로 가중한다(코호트 비율의 단순 평균은 20명 코호트와 200명 코호트를 같은 무게로 친다). 생존 분석에서 이런 칸을 '중도 절단(censoring)' 이라 부른다.
함정 3 — 생존자 편향. "지금도 쓰는 사람들에게 물어보니 4주차에도 대부분 쓰고 있었다" 는 당연하다. 지금 남아 있는 사람만 골라 과거를 보면 떠난 사람은 표본에 없다. 코호트는 가입 시점에 명단을 고정하고 그 명단을 끝까지 따라간다. 명단을 나중 정보(지금 활성인가, 유료인가)로 다시 고르면 안 된다.
두 가지 유지. 'N주차에 왔는가(bounded)' 와 'N주차나 그 뒤에 한 번이라도 왔는가(unbounded)' 는 다른 질문이다. 매주 쓰는 도구라면 앞의 것, 가끔 쓰는 도구(세금 신고, 여행 예약)라면 뒤의 것이 제품의 성격에 맞는다. 둘 중 무엇을 쓰는지 적어 두지 않으면 두 사람이 같은 표를 보고 다른 숫자를 말한다.
곡선이 평평해지는 곳. 이 실습은 "전 주 대비 유지율 하락이 2%p 미만이 되는 첫 N" 을 평평해지는 지점으로 정의한다. 기준값 2%p 는 이 실습의 예시 규칙이다. 제품과 표본 크기에 맞게 정하되, 정했다면 바꾸지 않는다.
어떤 활동을 셀 것인가. 이 실습은 '그 주에 session_start 가 있었다' 를 활동으로 본다. 지표 모듈에서 본 것처럼 활동의 정의를 핵심 행동(share_doc)으로 바꾸면 코호트 곡선 전체가 아래로 내려가고, 곡선이 평평해지는 지점도 달라진다. 어느 정의가 옳다기보다, 곡선을 비교할 때는 같은 정의끼리만 비교해야 한다. 정의를 바꾼 달에 곡선이 좋아졌다면 제품이 아니라 정의가 바뀐 것이다.
현장에서 만나는 모습
- 성장 회의에서 "리텐션이 지난달보다 좋아졌다" 가 나왔는데, 알고 보니 분모를 0주차 활성으로 바꾼 달이었다.
- 대시보드의 코호트 평균이 최근 두 달 계속 떨어진다. 사실은 신규 코호트의 빈 칸을 0 으로 채우고 있었다.
- 채널별로 코호트를 나눠 보니 전체 유지율은 괜찮은데 광고로 들어온 코호트만 4주차에 거의 0 이다. 광고비를 늘리면 전체 곡선이 나빠질 일만 남았다. 획득 경로에 따라 들어오는 사람 자체가 다르다는 것은 퍼널 모듈에서 다시 본다.
틀렸을 때 알아채는 법
- 유지율 표의 0주차 열이 전부 1.0 이라면 분모를 0주차 활동자로 잡았다는 신호다. 가입자 수를 분모로 두면 0주차도 1 보다 작을 수 있다.
- 최근 코호트의 오른쪽 칸에 0 이 줄지어 있다면 관측 전 칸을 0 으로 채운 것이 아닌지 본다. 그 칸은 비어 있어야 한다.
- 합친 곡선이 어느 코호트의 곡선과도 닮지 않았다면 가중치(사람 수)를 확인한다.
- 명단을 고른 조건에 '지금' 의 정보(현재 활성, 현재 유료)가 들어 있다면 생존자 편향이다.
다음 실습에서 할 것
'모아노트' 의 12개 주간 코호트로 유지율 삼각형을 만들고, 세 함정(분모·빈칸·생존자)을 일부러 저질러 본 숫자와 올바른 숫자를 나란히 적는다. 그다음 관측이 끝난 코호트만 모은 가중 유지율, bounded 와 unbounded 의 차이, 가입 경로별 4주차 유지율을 계산해 한 장의 보고서로 묶는다. 채점기는 여러분의 함수를 변형 재료에도 다시 돌린다.