듀오링고가 사용자의 성장에 다시금 불을 지핀 방법 - Part 1
듀오링고의 350% 성장의 뒷 이야기, 리더보드, 연속 학습, 알림, 그리고 혁신적인 그로스 모델
원문: Meaningful metrics: How data sharpened the focus of product teams
듀오링고의 DAU 가 4배 성장할 수 있도록 도움을 준 Growth Model 에 대해 살펴보시죠!
많은 회사들은 유료 마케팅 (paid marketing) 을 통해 성장합니다. 하지만 저희 듀오링고의 전략은 조금 달랐습니다! 2023년 초까지 저희 사용자들의 80%는 자연적으로 (organically) 유입되었습니다. 소셜 미디어에서 저희를 팔로우하던 분들일 수도 있고, 친구들로부터 소개를 받았을 수도 있을 겁니다. 그리고 저희는 최고의 제품을 만들어서, 무료로 제공함으로써 이러한 자연적 성장을 이끌어 냈습니다. 저희의 희망사항은 학습자들이 듀오링고를 매우 즐겁게 사용해서 유료 기능들에도 기꺼이 비용을 지불하는 것이었고, 실제로 그렇게 되었습니다! 저희는 월간 활성 사용자 (MAU) 의 7% (계속 늘어나고 있구요!) 가 Super Duolingo 를 결제하고 있다는 것을 발견했습니다.
다시 말하자면, 저희의 사업은 학습자들이 저희 제품을 사랑해서 가족과 친구들에게 알리고, 이들이 언젠가는 앱을 다운받고 유료 결제를 함으로써 성장할 수 있었습니다. 저희는 즉각적인 매출을 위해 마케팅에 비용을 쓰는 대신 보다 장기적인 게임을 한 것이죠.
멋지지 않나요? 하지만 다양한 라이프사이클 안에서 DAU 의 건강한 생태계를 유지하는 것은 매우 섬세해야 했습니다. 학습자가 많아질수록 그들의 요규도 다양해지기 때문입니다. 이렇게 확장되고 늘어나는 학습자들을 만족시키면서 조직적인 목표를 유지하기 위해서 저희는 중요하고 움직일 수 있는 지표 (movable metrics that matter) 를 중심으로 팀을 구성했고, 이 지표들을 최적화하기 위해 수백번의 실험을 했습니다.
하지만 중요한 지표는 어떻게 결정할 수 있을까요? 그리고 새로운 지표를 받아 들여야 한다고 조직을 설득하는 방법은요? 그리고 설정해놓은 지표가 더이상 변화하지 않는다면 뭘 해야 할까요? 저희 데이터사이언스팀은 2019년 대비 4배의 DAU 성장을 이룰 수 있도록 도움을 준 성장 프레임워크를 개발했습니다. 이제 함께 저희가 성장 프레임워크 (the Growth Model) 까지 걸어간 길과, 저희의 사업에 이 프레임워크가 끼친 구체적인 영향, 그리고 다음 단계의 성장을 만들어 내기 위해 이 성장 프로엠워크를 어떻게 발전시킬 것인지에 대해 살펴보시죠.
2018년, 지난 몇 년 동안 급격한 성장세를 보여주던 저희의 DAU 지표가 정체되었습니다. DAU 의 성장을 담당하던 팀은 유의한 성과를 내는 실험을 만들어내지 못하고 있었습니다. 그래서 저희는 접근법을 다시 생각해보았습니다: DAU 를 간접적으로 올릴 수 있는 지표를 최적화하는 것으로 목표를 바꿔볼 수 있을까? 다시 말하자면, 거대한 DAU 를 더 작고, 더 의미있고 (그리고 바라건대 최적화는 더 쉬운) 것들로 나눌 수 있을지 생각해 보는 것이었습니다.
그로스 모델 (the Growth Model) 은 데이터를 활용하여 저희의 성장 전략에 활기를 불어넣기 위해 개발한 일련의 지표들이었습니다. 마코프 모델을 이용하여 DAU 와 같은 최상위 지표 (topline metrics) 를 저희의 사업에 여전히 의미가 있는 보다 작은 지표로 나누었습니다. 이를 위해 저희는 (과거와 현재의) 모든 듀오링고 학습자를 매일 활동 상태로 분류하였고, 각 상태별 전환률을 추적했습니다. 이 전환 확률들은 유지율 (NURR 또는 신규 사용자 유지율 New User Retention Rate) 과 “비활성” 비율 (월간 활성 사용자 손실률), 그리고 “활성” 비율 (재활성률) 로 살펴보았습니다.
위의 모델은 사용자를 7개의 상호 배타적인 사용자 상태로 나눕니다.
그림에서의 화살표가 나타내듯이, 저희는 다른 상태들로 이동하는 사용자의 비율을 추적합니다 (비록 몇몇 화살표를 다른 것들보다 주의깊게 보긴 하지만요).
예시를 들어볼게요. 1일차에 많은 신규 사용자들이 듀오링고에 처음 들어왔다고 해봅시다. 이들 중 일부는 다음날에도 공부를 하러 돌아올 겁니다. 1일차의 신규 학습자 중 2일차에도 돌아온 사용자의 비율은 NURR 입니다. 이러한 2일차에 전환된 학습자들은 이제 또다른 “활성 (active)” 상태 (Current User, 활성 사용자) 를 가지게 됩니다.
여러분은 아마도 “기존 사용자가 전화기를 바꾸거나, 모바일이 아닌 다른 기기로 접속했을 때 ‘신규 사용자’ 로 잘못 판단하는 경우는 없는지?” 궁금하실 겁니다. 다행스럽게도, 엔지니어링팀에서 다양한 계정에서의 사용자 행동을 해결해주는 “aliasing” 이라는 세련된 기법을 개발해주었습니다. 데이터 과학자들은 “aliasing” 프로세스를 거친 데이터를 다룹니다.
그렇다면 이틀차에 돌아오지 않은 신규 사용자들에게는 어떤 일이 생길까요? 이들은 “비활성” 상태 (위험 주간 활성 사용자; At Risk WAU) 로 전환되게 됩니다. 현재는 활동하는 상태가 아니기 때문에 DAU 로 집계 되지 않습니다. 하지만, 여전히 지난 7일 중 하루는 활동을 했기 때문에 해당 상태의 이름이 의미하는 것처럼 주간 활성 사용자로 집계 됩니다. 비활성 학습자들은 비활성 상태 첫 7일 동안은 위험 주간 활성 사용자 상태로 분류됩니다.
7일 동안 비활성 상태이던 학습자는 위험 월간 활성 사용자 (At Risk MAU) 상태로 최대 22일 동안 유지될 수 있습니다. 학습자가 30일 동안 비활성 상태에 있으면, 해당 사용자는 휴면 사용자 (Dormant User) 상태에 빠지게 되고, 다시 활동을 하기 전까지 유지됩니다.
각 “비활성” 상태 (At Risk WAU, At Risk MAU, 휴면) 에서 이동 가능한 다른 상태는 두 개가 있고, 해당 상태들로 이동 가능한 경로는 최소 두 개가 있습니다. 휴면 상태에서 학습자는 비활성 상태를 유지하면서 매일 휴면 사용자로 남아 있거나, 다시 활동을 시작하여 부활 상태로 전환할 수 있습니다. 마찬가지로, At Risk MAU tkㅇ태의 학습자는 비활성 상태로 있거나, 앱을 열어서 재활성 (Reactivated) 상태로 전환할 수 있습니다 (보다 자세한 계산은 부록을 보세요).
그로스 모델을 만들고 과거 데이터를 학습한 뒤 저희는 성장 시뮬레이션을 실행하기 시작했습니다. 이 시뮬레이션의 목표는 최적화가 되었을 때 DAU 를 증가시킬 것 같은 새로운 지표를 찾는 것이었습니다. 저희는 체계적으로 모델의 레버를 하나씩 당기면서 DAU 로 가는 영향이 어느 정도일지 살펴보았습니다. 아래 표는 일정 시간 동안 각 상태에서의 전환율이 월별로 2% 증가했을 때의 결과입니다.
그 결과는 매우 명확했습니다: 활성 사용자 유지율 (CURR) 을 매달 2% 증가시키는 것이 DAU 에 가장 큰 영향을 끼친다. 저희는 팀을 꾸려서 다음과 같은 A/B 테스트를 진행하였습니다. 1) 우리가 CURR 을 변화시킬 수 있는지, 2) CURR 을 움직이면 실제로 DAU 가 움직이는지 (잊지 마세요: 상관관계는 인과관계가 아닙니다!). 그리고 이 실험은 성공적이었습니다! 이제 움직일 수 있는 지표를 최적화하는데 집중하는 팀과 함께 DAU 의 성장이 다시 시작되었고, 저희는 지속적인 연간 성장을 확인할 수 있었습니다.
이 초기 그로스 모델은 단지 시작일 뿐이었습니다! 이 프레임워크는 저희가 제품의 성장에 대해 생각하는데에 핵심이 되었습니다. 저희는 그로스 모델을 다음과 같은 곳에 사용했습니다.
2018년 저희의 DAU 성장이 정체되어 있었을 때, 그로스 모델 덕분에 성장에 박차를 가할 수 있는 새로운 방법을 찾을 수 있었습니다. 2023년이 되어서도 DAU 는 강력하고 지속적으로 성장하고 있습니다. CURR 은 이 새로운 단계의 성장을 여는 열쇠였습니다.
CURR 이 조금씩 커짐에 따라 저희는 스스로에게 두 가지 질문을 하기 시작했습니다. 첫 번째는 CURR 의 한계는 어디일까 였습니다. 100% 가 아니라는 것은 확실히 알고 있습니다. 사용자들은 가끔씩 수업을 마치는 걸 깜빡하기도 할 수도 있고, 기술적인 어려움이나, 단지 쉬고 싶을 수도 있습니다 (이런 이유로 저희는 Streak Freeze 라는 기능을 만들기도 했고, 듀오가 학습자에게 알림을 주는 다양한 밈을 만들어 내기도 했죠!). 그리고 아직까지도 저희는 CURR 의 한계에 다다르지 못했다는 것도 알고 있습니다 (CURR 이 계속 성장하고 있거든요!). 하지만 저희는 점점 그 한계점에 이르는 동안 보다 적극적으로 조심하고 싶습니다.
주의 깊은 독자라면 그로스 모델이 집계된 수준에서 계산 되었다는 것을 눈치 챘을겁니다. 이러한 연유로 저희는 두 번째 질문에 이르게 되었습니다. 다양한 학습자들을 단순한 집계값으로 축소했을 때 우리가 놓치는 것은 무엇일까? 집계값은 편리하고 확장 가능합니다만, 지난 몇 년간 활성 사용자 (Current Users) 가 급격하게 성장하는 바람에 아주 많아졌습니다 (DAU 중 90%가 이 상태에 속합니다!).
이게 왜 문제가 될까요? 음, 저희는 이렇게 집계한 지표는 각 상태에서 독특하고 다양한 학습자를 볼 수는 없다는 것을 발견했습니다. 이 말인 즉슨, CURR 은 활성 사용자 (Current Users) 의 행동을 측정하는데 있어서 점점 더 부정확해지고 있다는 것이며, (2018년에 DAU 에서 겪었던 문제처럼) 점점 더 움직이기 어려워지는 지표가 될 위험에 빠지게될 것이라는 점이었습니다. 뿐만 아니라, 주식시장에 상장된 회사로써 저희에게 더욱 중요한 일인 합리적인 목표를 세우거나 정확한 예측이 더 어려워진다는 것이었습니다.
이러한 질문들을 품고, 저희는 “탑다운” 방식인 현재의 그로스 모델을 보완할 수 있는 (어쩌면 언젠가는 대체할 수도 있는) “바텀업” 방식의 사용자 세그멘테이션 기법을 찾아보기 시작했습니다. 데이터에서 예상치 못했던 발견을 할 수 있는 비지도학습 으로 고개를 돌렸고, 조직 또한 확증 편향을 강화할 수 있는 분석적인 프레임워크로부터 멀리하도록 하였습니다. 그로스 모델의 “탑다운” 특성은 사업에서 무엇이 중요한지에 대한 저희의 선입견을 많이 형성하지만, 새로운 접근법의 “바텀업” 특성은 “가장 많이 선택한 길” 너머의 새로운 인사이트를 열어줍니다.
저희는 이 새로운 아이디어를 적용해서 성장의 새로운 장을 여는 것이 매우 기대됩니다!
그로스 모델의 기반을 만드는데 협력해준 매우 중요한 팀원들에게 특별한 감사를 보냅니다: 우리의 전 최고 제품 첵임자이자 그로스 모델의 최초 아이디어를 제공해 준 Jorge Mazal, 그리고 이 아이디어를 현실화할 수 있도록 저와 협업해준 듀오링고의 엔지니어링 디렉터 Vanessa Jameson
우리는 주어진 날짜에 각 단계에 도달하는 고유 사용자 수를 전일자의 전환 확률을 이용하여 쉽게 계산할 수 있습니다. 이 값들을 구체화하기 위해 어떤 계산을 해야하는지 살펴보겠습니다.
우선 저희의 가장 중요한 KPI 인 DAU 부터 살펴보면, 이는 주어진 일자 $t$ 에 “활성” 상태인 학습자를 중복 없이 세면 됩니다.
$DAU_t = ReactivatedUser_t + NewUser_t + ResurrectedUser_t + CurrentUser_t$
보다 높은 수준에서 집계된 값인 WAU 와 MAU 도 비슷하게 계산할 수 있지만, 일부 “비활성” 상태도 포함됩니다:
$WAU_t = ReactivatedUser_t + NewUser_t + ResurrectedUser_t + CurrentUser_t + AtRiskWAU_t$
$MAU_t = ReactivatedUser_t + NewUser_t + ResurrectedUser_t + CurrentUser_t + AtRiskWAU_t + AtRiskMAU_t$
“활성 상태”들은 아래와 같이 계산됩니다
$ReactivatedUser_t = ReactivationRate_t * AtRiskMAU_{t-1}$
$ResurrectedUser_t = ResurrectionRate_t * DormantUsers_{t-1}$
$CurrentUsert = NewUser_{t-1} * NURR_t + ReactivatedUser_{t-1} * RURR_t + ResurrectedUser_{t-1} * SURR_t + CurrentUser_{t-1} * CURR_t + AtRiskWAU_{t-1} * iWAURR_t$
신규 사용자 (New User) 는 어떨까요? 학습자의 최초 상태는 측정을 할 수 없으며, 이는 확장하려는 모델에서 고려하고 있는 부분입니다. 나머지도 살펴보시죠!
“비활성 상태” 는 아래와 같이 계산할 수 있습니다.
$DormantUser_t = DormantUser_{t-1} * DormantRR_t + AtRiskMAU_{t-1} * MAULossRate_t$
$AtRiskMAU_t = AtRiskMAU_{t-1} * ARMAURR_t + AtRiskWAU_{t-1} * WAULossRate_t$
$AtRiskWAU_t = AtRiskWAU_{t-1} * ARWAURR_t + CurrentUser_{t-1} * (1-CURR_t) + ReactivatedUser_{t-1} * (1-RURR_t) + NewUser_{t-1} * (1-NURR_t) + ResurrectedUser_{t-1} * (1-SURR_t)$
듀오링고의 350% 성장의 뒷 이야기, 리더보드, 연속 학습, 알림, 그리고 혁신적인 그로스 모델
원문: Meaningful metrics: How data sharpened the focus of product teams
원문: Sequential Testing at Booking.com
가장 좋은 방법은 당연히 영어 밖에 사용하지 못하는 환경에 강제로 처해지는 것이겠지만 그것이 어려우니…
고민의 흔적을 보여주세요
을 찾습니다.
원문: Charts & Accessibility
모수, 큰 수의 법칙, 그리고 중심극한정리에 대하여
그리고 여러분들도 (아마도) 하지 않아야 하는 이유
회사 서비스의 추천 시스템을 개선하기 위해 팀 내에서 (아직까진 두 명이긴 하지만) 지난 두 달 동안 스터디를 진행했습니다. 얼마 전 두 번째 스터디가 끝났고 이에 대한 회고를 해보려고 합니다.
원문: Dark Side of Data: Privacy by Emre Rencberoglu
원문: RStudio Projects and Working Directories: A Beginner’s Guide by Martin Chan
원문: TidyTuesday GitHub Repository
원문: How programming languages got their names
원문: How to Make Meetings Less Terrible 팟캐스트: How to Make Meetings Less Terrible (Ep. 389)
생키 다이어그램 (Sankey Diagram) 은 흐름(Flow) 다이어그램의 한 종류로써 그 화살표의 너비로 흐름의 양을 비율적으로 보여준다.
2년 전 일본어로 책을 내긴 했지만 대부분의 독자들이 이 책을 읽을 수는 없을 것 같았다.
자기회귀 모형이란 무엇인가?
회귀분석을 실행하기 위해 필요한 가정과 조건들에 대해 알아보자.
통계적 검정과 회귀분석에서 자주 사용되는 정규성 가정과 정규성 검정에 대해 알아보자.
여러 통계 검정과 모형에서 사용되는 독립성 가정에 대해 알아보자.
시계열 모형 중 ARMA 모형에대해 알아보자.
시각화에서 주의할 점인 넓이를 표시하는 원칙에 대해 알아보자.
평균 양쪽의 z-값들 사이의 넓이를 구하는 방법에 대해 알아보자.
분산분석의 개념과 방법에 대해 알아보자.
분산분석(ANOVA; ANalysis Of VAriance) 와 회귀분석의 개념을 섞은 공분산분석(ANCOVA; ANalysis of COVAriance)에 대해 알아보자. 이 글을 이해하기 위해서는 아래의 글을 먼저 읽는 것이 좋다.
Akaike’s Information Criterion 의 정의와 이를 구하는 방법에 대해 알아보자.
수정된 R제곱과 그 용도에 대해서 알아보자.
통계 용어 중 정확도(Accuracy)와 정밀도(Precision) 에 대해서 알아보자.
절대 오차와 평균 절대 오차에 대해서 알아보자.
가설 검정이란 무엇이며, 가설 검정의 다양한 방법에 대해 알아보자.
회귀분석이란 무엇이며, 회귀분석 과정에서 사용하는 용어와 다양한 방법에 대해 알아보자.
이 글은 MathJax 를 GitHub Pages Jekyll blog 에 추가하는 방법을 다룬다. 이탤릭체로 된 부분은 본문에는 없고 제가 따라하면서 고치거나 추가한 부분이니 참고하세요.
모집단과 표본집단을 이용하는 경우 통계학에서 말하는 10% 조건이 무엇인지에 대해 알아보자.
여러분의 GitHub 블로그에 Jupyter notebook 을 바꿔서 올릴 수 있도록 도와줄 글입니다. 직접 바꾸는 방법은 1회성 글들을 위해서 추가했고, 변환 과정과 파일 이동, 그리고 여러분의 블로그에 올리는 것까지 한 번에 할 수 있는 자동화 bash 를 만드는 자세한 방법...
68 95 99.7의 법칙이란 무엇인가?
단위근 검정 방법 중 하나인 Augmented Dickey Fuller 검정에 대해 알아보자.
이 자료는 데이터 과학과 관련된 특정 주제에 대한 연재물이며, 다룰 주제는 다음과 같다. 회귀분석, 군집화, 신경망, 딥러닝, 의사결정나무, 앙상블, 상관관계, 파이썬, R, 텐서플로우, SVM, 데이터 축소, 피쳐 선택, 실험 계획법, 교차검증, 모델 피팅 등. 이 글을 계속 받...