15.1. 해적 지표15.1.1. Acquisition(획득) 단계15.1.2. Activation(활성화) 단계15.1.3. Retention(리텐션) 단계15.1.4. Revenue(수익) 단계15.1.5. Referral(추천) 단계15.2. Retention15.2.1. Retention 개요15.2.2. Retention 측정 기준 설정15.2.3. N-Day Retention (Classic Retention)15.2.4. Rolling Retention (Unbounded Retention)15.2.5. Bracket Retention (Range Retention)15.3. Funnel Analysis15.3.1. Funnel 이란15.3.2. Conversion Rate 향상
15.1. 해적 지표
"해적 지표(AARRR 모델)"은 2007년 데이브 맥클루어(Dave McClure)가 개발한 분석 프레임워크로, 사용자의 여정을 단계적으로 분석하는 도구입니다. 사용자가 서비스에 유입되는 순간부터 해당 서비스를 추천하는 단계까지 다섯가지 단계로 나누어 분석하며, 서비스의 성공과 개선점을 파악하는 데 사용됩니다. AARRR 모델을 사용하면, 어느 단계에서 사용자가 이탈하거나 복귀하는지 이해하고, 재방문율과 사용자의 충성도를 향상시키는 마케팅 전략을 수립할 수 있습니다.

- Acquisition(획득): 사용자를 서비스로 유인하는 단계로, 트래픽을 늘리고 사용자를 유입시키는 데 중점을 둡니다.
- Activation(활성화): 사용자가 서비스를 활성화하고 첫 번째 상호 작용을 하는 단계로, 가입 또는 로그인을 통해 핵심 기능을 시작하는 것을 의미합니다.
- Retention(리텐션): 사용자가 서비스를 지속적으로 이용하고 돌아오는 단계로, 이탈을 최소화하고 충성 고객을 확보하는 것이 목표입니다.
- Revenue(수익): 사용자로부터 수익을 창출하는 단계로, 유료 구독, 광고 수익 등을 통해 수익을 올립니다.
- Referral(추천): 만족한 고객이 다른 사용자를 서비스로 유인하는 단계로, 워드오브마우스와 추천 프로그램을 활용하여 새로운 사용자를 확보합니다.
AARRR 모델은 비즈니스를 성공적으로 확장하고 개선하기 위한 가이드로 널리 받아들여지며, 단계별 지표를 사용하여 어떠한 조치를 취해야 하는지 파악하는 데 도움을 줍니다. 이 모델은 서비스의 성장을 측정하고 단계마다 필요한 개선을 식별하는 데 중요한 도구로 활용됩니다.
15.1.1. Acquisition(획득) 단계
AARRR의 첫 번째 단계 Acquisition 단계입니다. 이 단계에서 주요 목표는 방문자가 제품을 발견하고 고객으로 전환되는 것입니다. 단순하게 방문자 수을 보는 것이 아니라, 방문자를 고객으로 전환시키는 전략을 통해서 제품 또는 서비스를 이용하도록 유도하는 노력이 필요한 단계입니다.
다음으로, Google Merchandise Store 데이터셋을 활용하여 Acquisition 단계에서 어떤 정보를 확인해야 하는지 간단하게 살펴보겠습니다.
- 일별 총 방문건수, 방문자 수, 고유 방문자 수
하루에 얼마나 많은 방문자가 유입이 되고 방문 횟수는 얼마나 되는지 알아보겠습니다. 정확한 유입을 파악하기 위해서 총 방문자의 수와 고유 방문자를 함께 조회하겠습니다.
SELECT date , COUNT(visitId) AS total_session_count , COUNT(fullVisitorId) AS total_visitors , COUNT(DISTINCT fullVisitorId) AS total_unique_visitors FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date ORDER BY date;



하루평균 방문 건수는 약 2500번이고 고유 방문자 수는 약 2300명입니다.
- 채널별 접속경로
다음으로는 방문자들이 어떻게 서비스에 접근했는지를 자세히 살펴보겠습니다. 방문자들이 웹사이트에 접속하는 데 어떤 매체와 소스를 사용했는지 파악하는 것은 중요합니다. “trafficSource.medium”컬럼과 “trafficSource.source”컬럼별 유입된 방문자를 유입량이 많은 순으로 정렬하여 조회하겠습니다.
SELECT trafficSource.medium , trafficSource.source , COUNT(DISTINCT fullVisitorId) AS total_visitors FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY channelGrouping, trafficSource.medium, trafficSource.source ORDER BY COUNT(DISTINCT fullVisitorId) DESC;

트래픽 용어 설명
- organic - 자연검색(organic)
- cpc - 유료검색(광고검색)
- direct - 사용자가 직접 타이핑 (직접 유입, dirict, not set, none)
- referral - 소셜, 블로그, 기타 웹사이트(social 제외)
- cpm - google marketing platform campaign(display)
- display - 배너 광고(display, cpm)
- affiliate - 제휴 광고 사이트(affiliate)
- email - 이메일 유입 등(email)
- social - facebook, insta, youtube등
직접적으로 웹 사이트에 접속하는 방문자가 제일 많은 것으로 보이고, 다음으로 소셜이나 블로그를 통하여 유튜브에 접속하여 웹사이트로 유입되는 방문자가 다음으로 높은 것을 알 수 있습니다. 이를 통하여 효과적인 마케팅 전략을 수립할 수 있습니다.
15.1.2. Activation(활성화) 단계
AARRR의 두번째 단계 활성화 단계입니다. 이 단계에서 주요 목표는 고객을 제품 또는 서비스를 실제로 활성화하고 사용하게 만드는 것입니다. 활성화 단계를 통해 많은 고객이 유입시켰더라도, 그들이 제품을 구매하거나 서비스를 이용하지 않는다면 그 가치는 미비할 것입니다. 따라서, 활성화 단계에서는 고객을 활성화하고 제품 및 서비스를 이용하도록 장려하는 전략을 구축하는 것이 중요합니다.
활성화 단계에서 고객이 서비스를 처음 접한 후에 이탈할 수 있으며, 이는 부족한 활성화 노력 또는 부정적인 사용자 경험과 관련이 있습니다. 이탈을 최소화하고 긍정적인 행동을 유도하기 위해 사용자 경험을 개선하고 활성화 전략을 최적화해야 합니다. 활성화 상태를 평가하기 위해 다음과 같은 지표들을 활용합니다.
- Bounce Rate (이탈률): 사용자가 첫 페이지에서 서비스를 종료한 비율로, 이것은 사용자의 부정적인 경험을 나타내는 지표입니다.
- 페이지 뷰 (PV): 유저들이 둘러본 페이지 수를 나타내며, 높은 PV는 다양한 페이지를 방문하고 활동하는 것을 나타냅니다.
- 체류 시간 (Duration): 고객이 서비스를 방문하고 나가기까지 머무른 시간으로, 긴 체류 시간은 더 많은 상호작용을 의미하며, 이것은 서비스의 가치 전달에 도움이 됩니다.
또한, OKR (Object Key Results), KPI (Key Performance Indicators), Funnel Model 등을 사용하여 활성화 상태와 사용자의 행동을 평가하고 모니터링합니다.
"아하 모먼트"는 제품의 핵심 가치를 고객이 처음으로 느끼는 순간을 나타냅니다. 이를 정의하는 과정에는 주관적인 판단이 개입할 수 있으나, 회사는 명확한 활성화 단계의 목표에 집중하고 해당 순간을 파악하여 사용자 경험을 개선해야 합니다.
15.1.3. Retention(리텐션) 단계
해적 지표(AARRR)의 3단계 리텐션(Retention)은 고객 유지를 의미합니다. 이는 서비스나 제품을 계속해서 이용하는 것을 의미하며, 주로 구독 서비스에서는 정기 결제, 쇼핑몰에서는 제품 재구매 등이 리텐션의 기준이 될 수 있습니다. 높은 리텐션은 기업의 장기적 성장에 중요하기에 해적 지표(AARRR)에서 가장 중요한 단계입니다.
- 활성 사용자수 및 고착도 (MAU, WAU, DAU, Stickiness)
MAU, WAU, DAU와 같은 지표는 디지털 서비스의 성장과 사용자의 참여도를 평가하는 데 중요한 지표입니다. 데이터 분석가는 이러한 지표를 바탕으로 다양한 관점에서 서비스의 성과를 평가하고 전략을 개발할 수 있습니다.
예를 들어, 다음과 같이 활용할 수 있습니다.
- 서비스의 성장률 평가 : MAU나 DAU의 절댓값이 증가하거나 감소하는지 관찰하여 성장하고 있는지 평가합니다.
- 사용자의 생명 주기 및 이탈률 분석 : DAU, WAU, MAU간의 관계를 분석합니다. DAU는 증가하지만 MAU가 감소한다면, 고객이 서비스를 단기간 사용한 뒤 이탈하는 경향이 있을 수 있습니다.
- 마케팅 효과 분석 : 특정 마케팅을 진행한 후 DAU, WAU, MAU의 변화를 관찰하여 마케팅 효과를 평가할 수 있습니다.
- 리텐션 (Retention)
리텐션은 서비스를 한 번 경험해 본 고객이 계속 서비스를 방문하도록 만드는 것입니다.
이미 기존 고객과 브랜드 간에 신뢰가 형성되어 있어, 기존 고객을 유지하는 비용이 새로운 고객을 확보하는 비용보다 저렴합니다. 따라서 서비스와 비즈니스 목표에 따라 리텐션 지표를 설정하여 관찰하고, 리텐션 수치가 낮은 특정 사용자에게 적절한 제품을 마케팅하는 등 고객의 재방문을 유도하기 위한 전략이 필요합니다.
리텐션을 측정하는 방법은 다음과 같습니다.
- N-Day Retention : 고객의 서비스 첫 방문 N일 후 재방문한 활성 유저의 비율
- Rolling Retention : 일정 기간 동안 고객이 서비스를 유지하는 비율
- Bracket Retention : N-Day Retention을 확장시킨 방법으로, 지정한 기간의 리텐션 측정
리텐션을 측정하는 각 방법에 대한 자세한 설명과 예시는 “15.3. Retention”에서 다루겠습니다.
15.1.4. Revenue(수익) 단계
Revenue 단계는 쇼핑몰의 제품 판매, 넷플릭스의 고객 구독, 그리고 페이스북의 광고주가 광고 지면을 구매하는 등 다양한 활동과 관련이 있습니다. 이 단계에서 목표를 달성하기 위해서 적절한 타겟, 적절한 시기, 그리고 적절한 메세지를 고려해야합니다. 마케팅 활동을 계획할 때, 얼마의 비용을 들이고 사용자들로부터 얼마나의 수익을 기대할 수 있는지 파악해야 합니다. 즉, 구매, 활성화, 및 기타 노력에 사용된 비용이 실제로 수익성 향상에 기여하는지 여부를 판단하는 것이 중요합니다.
다양한 지표를 통해 어떤 사용자가 실제로 해당 브랜드와 관련이 있으며 매출에 어떻게 기여하는지 파악할 수 있습니다. 이러한 지표는 다음과 같이 포함됩니다:
- 어디서 유입된 사용자들이 제품을 구매하는 전환율이 가장 높은가?
- 어떻게 사용자들이 서비스를 최초로 이용하기 쉽게 만들 수 있을까?
- 한 번 이상 서비스를 이용한 사용자들은 어떻게 재방문하는가?
- 최소한의 매출액과 손익분기점은 어떻게 되는가?
- 매출이 고객 유치 비용을 초과하는지는 어떻게 판단할 수 있을까?
마케팅에서 신규 사용자를 확보하는 것보다 기존 고객이 제품을 반복적으로 구매하도록 유도하는 데 드는 비용이 효율적입니다. 따라서, "수익" 단계에서 핵심적인 것은 CLV(Customer Lifetime Value, 고객평생가치)를 높이고, CAC(Customer Acquisition Cost, 고객확보비용)을 줄이는 것입니다. CLV는 고객이 당신의 제품을 이용하는 동안 회사에 얼마나 많은 수익을 생성하는지를 측정하며, CAC는 마케팅, 세일즈 활동 및 기타 활동을 통해 고객을 확보하는 데 소요되는 비용을 나타냅니다. 제품의 수익성을 향상시키기 위해 CAC를 낮추고 CLV를 높이는 것이 필요합니다.
15.1.5. Referral(추천) 단계
Referral 단계는 새로운 고객을 확보하기 위한 전략 중 하나로 간주됩니다. 이것은 반드시 추천인 등록을 통한 서비스 가입을 의미하는 것은 아니며, SNS나 커뮤니티 활동을 유도하기 위한 바이럴 요소를 도입하는 것도 Referral의 한 방법입니다. 바이럴과 관련된 주요 지표에는 “사용자 언급 댓글 수”와 “SNS 공유 횟수” 등이 있습니다. 사용자가 서비스에 얼마나 만족하고 있는지를 파악하고, 사용자들에게 자발적인 참여를 유도하는 방법을 모색해야 합니다. 이를 위해 친구를 서비스에 추천하는 사용자에게 상품이나 혜택을 지급하는 방식이 효과적일 수 있습니다.
추천은 새로운 고객을 확보하는 가장 진정성 있는 방법 중 하나이며, 비용 효율적인 전략으로 여겨집니다. 추천을 추적하기 어려운 측면이 있지만, 추천 프로모션 코드를 이메일에 포함하는 방식, 추천 콘테스트, 사용자들이 쉽게 제품을 공유할 수 있도록 하는 다양한 마케팅 캠페인을 통해 추천 현황을 추적할 수 있습니다.
- 사용자가 자발적으로 바이럴 효과 및 공유를 일으키고 있는가?
- 측정 지표: 사용자 언급 댓글 수, 공유 수, 레퍼럴 트래픽
- 사용자 언급 댓글 수: 사용자가 게시물에 달린 댓글에서 다른 사용자를 언급하는 횟수를 나타냅니다. 이것은 고객 간의 상호 작용과 소셜 미디어 상에서 제품이 어떻게 이야기되고 있는지를 파악하는 데 도움이 됩니다.
- 공유 수: 게시물이 소셜 미디어에서 공유된 횟수를 나타냅니다. 이것은 제품 또는 브랜드의 더 많은 가시성을 확보하고 새로운 고객을 유치하는 데 도움이 됩니다.
- 레퍼럴 트래픽: 이것은 웹 애널리틱스 서비스를 통해 확인할 수 있는 지표로, 다양한 채널을 통해 웹사이트로 유입된 트래픽을 나타냅니다. 레퍼럴 트래픽을 통해 어떤 출처가 웹사이트 트래픽에 가장 큰 기여를 하는지를 확인할 수 있으며, 트래픽의 출처를 세분화하여 파악할 수 있습니다.
고객 충성도가 높은 그룹을 대상으로 SNS 리뷰 공유 이벤트를 주최하여 홍보 및 고객 의견 수집을 동시에 추진할 수 있습니다. 이를 통해 바이럴 효과 또한 얻을 수 있습니다. 이러한 추천 지표를 활용하여 고객 간의 상호 작용과 제품 또는 브랜드의 소셜 미디어 상에서의 가시성을 개선하고, 새로운 고객을 유치하는데 기여할 수 있습니다.
15.2. Retention
15.2.1. Retention 개요
Retention은 ‘고객을 유지한다’는 의미로 고객이 계속해서 제품이나 서비스를 이용하고 있는지 측정하는 지표입니다. 아무리 고객을 많이 유입(Acquisition)시키더라도 고객이 제품이나 서비스를 이용하기 위해 재방문하지 않는다면 지속적으로 성장하기 어렵습니다. 기업이 지속적으로 성장하기 위해서는 유저의 재방문(Retention)을 높이고 이탈을 최소화하는 것이 가장 중요합니다.
따라서, 고객이 자사의 제품이나 서비스를 지속적으로 사용하는지 관찰하는 Retention 지표들을 가장 먼저 분석해야 합니다. AARRR 모델은 가장 먼저 달성되어야 하는 지표 순서대로 RARRA(Retention → Activation → Referral → Revenue → Acquisition)으로 불리기도 합니다.
- Cohort(코호트) 분석
전체 데이터에는 기존 고객과 신규 고객을 포함한 모든 정보가 혼합되어 있기 때문에 인사이트를 얻기 어렵습니다.
“14.3. 코호트 분석”의 예시 3 리텐션 차트의 일부를 다시 살펴보겠습니다. 전체 데이터에 대해 2016년 10월 1일부터 7일까지 리텐션 지표를 측정하면, 아래 표와 같습니다.
2016-10-01 | 2016-10-02 | 2016-10-03 | 2016-10-04 | 2016-10-05 | 2016-10-06 |
1513 | 1622 | 2317 | 4050 | 3514 | 2816 |
2016년 10월 1일과 2일의 방문자 수가 낮고, 10월 4일과 5일의 방문자 수가 높은 것을 볼 수 있지만, 고객의 재방문을 유도하기 위한 어떠한 전략을 세우기에는 정보가 부족합니다. 하지만 전체 데이터를 고객이 10월 중 처음 방문한 시기를 기준으로 나누어 보면, 아래의 표와 같습니다.
cohort_date /
active_users | day 1 | day 2 | day 3 | day 4 | day 5 | day 6 | day 7 |
2016-10-01 | 1513 | 49 | 23 | 15 | 15 | 10 | 13 |
2016-10-02 | 1573 | 41 | 27 | 23 | 10 | 13 | ㅤ |
2016-10-03 | 2253 | 99 | 56 | 33 | 34 | ㅤ | ㅤ |
2016-10-04 | 3909 | 122 | 55 | 40 | ㅤ | ㅤ | ㅤ |
2016-10-05 | 3298 | 95 | 56 | ㅤ | ㅤ | ㅤ | ㅤ |
2016-10-06 | 2613 | 66 | ㅤ | ㅤ | ㅤ | ㅤ | ㅤ |
2016-10-07 | 2462 | ㅤ | ㅤ | ㅤ | ㅤ | ㅤ | ㅤ |
전체 데이터에서는 2016년 10월 1일부터 4일까지 활성 유저가 증가하는 것으로 보이지만, 설정한 코호트 단위로 보면 첫 방문 다음 날(”day 2”) 활성 고객 수가 급격하게 감소하는 현상을 확인 할 수 있습니다. 이렇게 어떠한 기준을 통해 고객을 분류한 그룹에 대해 리텐션 지표를 측정하면, 자사의 서비스에 대해 더 자세한 분석 결과를 도출할 수 있습니다.
그렇기 때문에 앞서 “14.3. 코호트 분석”에서 설명했듯이, 코호트(Cohort) 분석을 통해 고객을 어떠한 기준을 통해 그룹으로 나누어 고객의 재방문(Retention)을 분석해야 합니다. 코호트는 도메인이나 비즈니스 목표에 따라 다양하게(예를 들어 성별, 나이, 지역 등 인구통계학적 특성 혹은 프로덕트에서 보이는 행동적 특성 등) 정의할 수 있습니다. 앞으로 작성할 예시에서는 고객이 처음 Google Merchandise Store에 방문한 연도와 월을 기준으로 코호트를 설정하고 리텐션을 측정하겠습니다.
15.2.2. Retention 측정 기준 설정
- Retention 측정 기준
Retention(리텐션)은 기업 및 서비스에 따라 다양한 방식으로 고객의 재방문을 정의하고 측정하는 지표입니다.
예를 들어, 넷플릭스와 같은 서비스에서는 구독 연장, 온라인 몰에서는 제품 구매, SNS 서비스에서는 방문을 기준으로 리텐션을 측정할 수 있습니다. 하지만 같은 서비스더라도 리텐션을 측정하는 기준이 다를 수 있습니다. 어떤 서비스는 단순히 고객이 방문한 것을 서비스를 이용한 것이라고 판단할 수 있지만, 다른 서비스는 특정 기능을 사용해야 서비스를 이용한 것이라고 판단할 수 있습니다.
따라서 도메인과 비즈니스 목표에 맞게 기준을 설정하여 리텐션을 측정하고 관리해야 합니다.
- Retention 측정 주기
리텐션을 측정하는 주기를 설정하기 위해 고객이 자사의 서비스를 이용하는 주기를 파악해야 합니다. 서비스 이용 주기를 파악하기 위해서는 가장 먼저 서비스를 이해해야 합니다.
예를 들어, 메신저나 SNS와 같은 서비스는 고객이 서비스를 이용하는 주기가 매우 짧습니다. 하지만 온라인 몰과 같은 특정 용도로 사용하는 서비스의 경우 고객의 서비스 이용 주기가 상대적으로 길 것입니다. 만약 서비스 이용 주기를 너무 짧게 설정하여 리텐션을 측정하면, 고객의 재방문을 유도하기 위한 마케팅 예산의 낭비로 이어질 수 있습니다.
따라서 서비스에 대한 이해를 바탕으로 서비스 이용 주기를 파악하여 리텐션 지표를 측정해야 합니다. 또한, 지속적으로 고객이 자사의 서비스를 이용하는 주기를 관찰하고, 리텐션 측정 기준을 관리해야 합니다.
15.2.3. N-Day Retention (Classic Retention)
N-Day Retention은 고객이 서비스를 처음 이용한 시점을 기준으로 N 일/주/월 후 재방문한 활성 유저의 비율을 측정는 지표입니다. 예를 들어 일별로 리텐션을 측정한다면, 고객이 서비스를 처음 이용한 시점을 기준으로 N 일 후 재방문한 활성 유저의 비율을 측정합니다. Classic Retention이라고도 불리며, 가장 간단하고 널리 사용되는 측정 방법입니다.
N-Day Retention은 SNS, 메신저, 게임 등 반복적으로 사용하는 서비스에 적합합니다.
Google Merchandise Store 데이터셋을 사용하여 N-Day Retention 지표에 대해 실습해 보겠습니다. 2016년 8월부터 2017년 7월까지 1년간 고객이 처음 서비스를 방문한 이후, 지속적으로 방문했는지 리텐션을 측정합니다.
먼저, 고객이 서비스를 방문한 날짜인 date 컬럼에서 년월 데이터(”visit_m”)를 추출하고, 각 고객이 Google Merchandise Store에 처음 방문한 시기(”first_m”)를 조회합니다.
SELECT fullVisitorId AS visitor_id , DATE_TRUNC(PARSE_DATE('%Y%m%d', date), MONTH) AS visit_m , DATE_TRUNC(PARSE_DATE('%Y%m%d', MIN(date) OVER(PARTITION BY fullVisitorId)), MONTH) AS first_m FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170731';

위 쿼리를 통해 추출한 데이터를 이용하여 고객이 처음 서비스에 방문한 시기(년월)로 코호트를 설정하고, 월 단위로 N-Day Retention을 측정합니다. 리텐션을 보여주는 일반적인 방법으로, 아래 예시 이미지와 같이 수치와 비율을 혼합하여 리텐션 차트를 생성합니다.
WITH user_data AS ( SELECT fullVisitorId AS visitor_id , DATE_TRUNC(PARSE_DATE('%Y%m%d', date), MONTH) AS visit_m , DATE_TRUNC(PARSE_DATE('%Y%m%d', MIN(date) OVER(PARTITION BY fullVisitorId)), MONTH) AS first_m FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170731' ), user_retention AS ( SELECT first_m , COUNT(DISTINCT visitor_id) AS month0 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 1 MONTH) = visit_m THEN visitor_id END) AS month1 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 2 MONTH) = visit_m THEN visitor_id END) AS month2 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 3 MONTH) = visit_m THEN visitor_id END) AS month3 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 4 MONTH) = visit_m THEN visitor_id END) AS month4 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 5 MONTH) = visit_m THEN visitor_id END) AS month5 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 6 MONTH) = visit_m THEN visitor_id END) AS month6 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 7 MONTH) = visit_m THEN visitor_id END) AS month7 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 8 MONTH) = visit_m THEN visitor_id END) AS month8 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 9 MONTH) = visit_m THEN visitor_id END) AS month9 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 10 MONTH) = visit_m THEN visitor_id END) AS month10 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 11 MONTH) = visit_m THEN visitor_id END) AS month11 FROM user_data GROUP BY first_m ORDER BY first_m ) SELECT first_m AS cohort , month0 AS users , CAST(ROUND(month1 / month0 * 100, 2) AS STRING) || '%' AS month1 , CAST(ROUND(month2 / month0 * 100, 2) AS STRING) || '%' AS month2 , CAST(ROUND(month3 / month0 * 100, 2) AS STRING) || '%' AS month3 , CAST(ROUND(month4 / month0 * 100, 2) AS STRING) || '%' AS month4 , CAST(ROUND(month5 / month0 * 100, 2) AS STRING) || '%' AS month5 , CAST(ROUND(month6 / month0 * 100, 2) AS STRING) || '%' AS month6 , CAST(ROUND(month7 / month0 * 100, 2) AS STRING) || '%' AS month7 , CAST(ROUND(month8 / month0 * 100, 2) AS STRING) || '%' AS month8 , CAST(ROUND(month9 / month0 * 100, 2) AS STRING) || '%' AS month9 , CAST(ROUND(month10 / month0 * 100, 2) AS STRING) || '%' AS month10 , CAST(ROUND(month11 / month0 * 100, 2) AS STRING) || '%' AS month11 FROM user_retention ORDER BY first_m;

리텐션 결과를 보면, 코호트 전체적으로 고객이 처음 서비스를 방문한 다음 달(”month1”) 리텐션이 크게 감소한 것을 알 수 있습니다. 또한 2016년 11월 코호트를 보면, 처음 서비스를 방문한 고객의 수가 다른 시기에 비해 눈에 띄게 높은 반면, 다음 달(”month1”) 리텐션이 더 가파르게 감소했습니다. 따라서 고객을 코호트 그룹으로 나누어 리텐션을 측정하고, 2016-11 코호트와 같이 눈에 띄는 코호트의 특징을 분석하여 리텐션을 개선하기 위한 마케팅 전략을 제안할 수 있습니다.
- N-Day Retention의 한계
N-Day Retention 방법으로 리텐션을 측정하면, 놓치는 정보가 있을 수 있습니다.
예를 들어, 2023년 1월 1일 처음 서비스를 방문한 5명의 고객이 각각 처음 방문한 이후 아래 표와 같이 재방문했다고 가정합니다.

고객의 방문을 기준으로 N-Day Retention을 계산하면 아래와 같이 표현할 수 있습니다.

하지만 서비스의 특징에 따라서 고객2가 1월 4일(day 3)에 방문했기 때문에 1월 2일(day 1)과 1월 3일(day 2)에 서비스를 이탈했다고 판단하지 않을 수 있습니다. 이와 같이 위의 표를 수정하면 아래와 같습니다.


N-Day Retention 방법으로 측정한 리텐션과 차이가 발생하는 것을 확인할 수 있습니다. 이러한 리텐션 측정 방법을 Rolling Retention이라고 합니다.
15.2.4. Rolling Retention (Unbounded Retention)
Rolling Retention은 고객이 마지막으로 서비스를 방문하기 전에 서비스를 방문하지 않았더라도 방문으로 간주하는 방법으로, '고객이 이탈하지 않있는지'에 초점을 맞추기 때문에 Unbounded Retention이라고도 부릅니다. N-Day Retention의 한계를 극복하기 위해 Rolling Retention방법을 사용하기도 합니다.
N-Day Retention을 실습했던 Google Merchandise Store 데이터셋을 사용하여 Rolling Retention 지표에 대해 실습해 보겠습니다. Rolling Retention은 N-Day Retention과 달리, 고객이 Google Merchandise Store에 처음 방문한 시기(”first_m”)와 마지막으로 방문한 시기(”last_m”)를 조회힙니다.
SELECT fullVisitorId AS visitor_id , DATE_TRUNC(PARSE_DATE('%Y%m%d', MIN(date) OVER(PARTITION BY fullVisitorId)), MONTH) AS first_m , DATE_TRUNC(PARSE_DATE('%Y%m%d', MAX(date) OVER(PARTITION BY fullVisitorId)), MONTH) AS last_m FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170731';

N-Day Retention을 측정했던 것과 동일하게, 고객이 처음 서비스에 방문한 시기(년월)로 코호트를 설정하여 월 단위로 Rolling Retention을 측정합니다.
WITH user_data AS ( SELECT fullVisitorId AS visitor_id , DATE_TRUNC(PARSE_DATE('%Y%m%d', MIN(date) OVER(PARTITION BY fullVisitorId)), MONTH) AS first_m , DATE_TRUNC(PARSE_DATE('%Y%m%d', MAX(date) OVER(PARTITION BY fullVisitorId)), MONTH) AS last_m FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170731' ), user_retention AS ( SELECT first_m , COUNT(DISTINCT visitor_id) AS month0 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 1 MONTH) <= last_m THEN visitor_id END) AS month1 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 2 MONTH) <= last_m THEN visitor_id END) AS month2 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 3 MONTH) <= last_m THEN visitor_id END) AS month3 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 4 MONTH) <= last_m THEN visitor_id END) AS month4 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 5 MONTH) <= last_m THEN visitor_id END) AS month5 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 6 MONTH) <= last_m THEN visitor_id END) AS month6 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 7 MONTH) <= last_m THEN visitor_id END) AS month7 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 8 MONTH) <= last_m THEN visitor_id END) AS month8 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 9 MONTH) <= last_m THEN visitor_id END) AS month9 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 10 MONTH) <= last_m THEN visitor_id END) AS month10 , COUNT(DISTINCT CASE WHEN DATE_ADD(first_m, INTERVAL 11 MONTH) = last_m THEN visitor_id END) AS month11 FROM user_data GROUP BY first_m ORDER BY first_m ) SELECT first_m AS cohort , month0 AS users , CAST(ROUND(month1 / month0 * 100, 2) AS STRING) || '%' AS month1 , CAST(ROUND(month2 / month0 * 100, 2) AS STRING) || '%' AS month2 , CAST(ROUND(month3 / month0 * 100, 2) AS STRING) || '%' AS month3 , CAST(ROUND(month4 / month0 * 100, 2) AS STRING) || '%' AS month4 , CAST(ROUND(month5 / month0 * 100, 2) AS STRING) || '%' AS month5 , CAST(ROUND(month6 / month0 * 100, 2) AS STRING) || '%' AS month6 , CAST(ROUND(month7 / month0 * 100, 2) AS STRING) || '%' AS month7 , CAST(ROUND(month8 / month0 * 100, 2) AS STRING) || '%' AS month8 , CAST(ROUND(month9 / month0 * 100, 2) AS STRING) || '%' AS month9 , CAST(ROUND(month10 / month0 * 100, 2) AS STRING) || '%' AS month10 , CAST(ROUND(month11 / month0 * 100, 2) AS STRING) || '%' AS month11 FROM user_retention ORDER BY first_m;


Rolling Retention 리텐션을 계산한 결과를 N-Day Retention과 비교해 보면, 상대적으로 Rolling Retention 으로 측정한 리텐션 값이 높은 것을 확인할 수 있습니다. 이렇게 같은 데이터를 사용하더라도 어떤 방법으로 리텐션을 측정하는지에 따라 결과가 달라질 수 있습니다.
Rolling Retention은 부동산이나 보험 등 고객이 서비스를 방문하는 빈도가 낮은 서비스에서 주로 활용됩니다. 서비스를 주기적으로 방문하기보다 운전 중 차량의 결함이 생겨서 출장 서비스를 요청하는 것과 같이 고객의 필요가 생기는 시점에 서비스를 방문하는 경우 N-Day Retention보다 Rolling Retention이 적절합니다.
따라서 상황이나 비즈니스 목표에 따라 적절한 리텐션 측정 방법을 사용하여 리텐션 지표를 지속적으로 측정하고 관리해야 합니다.
- Rolling Retention의 한계
- Rolling Retention은 리텐션이 개선되고 있는지 지표를 해석하기 어렵습니다.
Rolling Retention은 N-Day Retention과는 달리, 고객이 서비스를 이용하지 않은 기간이 있더라도 이후에 서비스를 이용했다면 이용하지 않았던 기간을 이용한 것으로 간주하기 때문입니다. 따라서, 리텐션을 측정하는 시기에 따라 이전 기간의 리텐션 지표가 변동될 수 있으며, 이로 인해 최근 코호트일수록 리텐션 지표가 낮고 이전 코호트일수록 리텐션이 높습니다.
- 코호트 간 측정된 리텐션 값을 단순 비교하기 어렵습니다.
예를 들어, 최근 처음 서비스를 이용한 코호트 A와 1년 전 처음 서비스를 이용한 코호트 B를 비교한다고 가정하겠습니다. 앞서 설명했듯이, Rolling Retention은 최근 코호트일수록 리텐션 지표가 낮고 이전 기간의 코호트는 리텐션이 높아지기 때문에 코호트 A와 B를 단순 비교하기 어렵습니다.
리텐션 지표는 측정하는 시기에 따라 지속적으로 변동되기 때문에 한 시점에서 두 코호트의 리텐션 지표를 단순 비교하면 잘못된 결론을 도출할 수 있습니다.
15.2.5. Bracket Retention (Range Retention)
Bracket Retention은 N-Day Retention을 유연하게 확장시킨 것으로, 특정 일/주/월 단위가 아닌 유연하게 설정한 구간을 기준으로 리텐션을 측정하는 방법입니다. 리텐션을 측정하는 범위를 지정하기 때문에 Range Retention이라고 부르기도 합니다.
Bracket Retention은 설정한 단위 기간 내 고객이 서비스를 방문한 횟수는 고려하지 않습니다.
예를들어, 2023년 1월 1일 처음 서비스를 방문한 5명의 고객이 아래 표와 같이 재방문했다고 가정합니다.
cohort_date /
active_user | day 0
(01-01) | day 1
(01-02) | day 2
(01-03) | day 3
(01-04) | day 4
(01-05) |
고객 1 | 방문 | 방문 | 방문 | 방문 | 방문 |
고객 2 | 방문 | ㅤ | ㅤ | 방문 | ㅤ |
고객 3 | 방문 | ㅤ | 방문 | 방문 | ㅤ |
고객 4 | 방문 | ㅤ | ㅤ | ㅤ | ㅤ |
고객 5 | 방문 | ㅤ | ㅤ | ㅤ | ㅤ |
구간을 2일로 설정하여 리텐션을 측정한 결과는 아래 표와 같습니다. day 1 ~ day 2 구간을 보면, 고객 1은 day 1과 day 2 모두 서비스를 방문했지만 방문 횟수는 고려되지 않을 것을 확인할 수 있습니다. 따라서 day 1 ~ day 2 구간은 전체 고객 5명 중, 고객 1과 고객 3이 재방문을 했기 때문에 리텐션율은 40%(2 / 5)입니다.
day 0 | day 1 ~ day 2 | day 3 ~ day 4 |
5 | 40% | 60% |
만약 고객이 Bracket Retention에서 정한 기간 범위 안에 서비스를 이용하면, 활성 유저로 분류됩니다. 따라서 이 리텐션 계산 방법은 노이즈에 강한 특징을 갖고 있습니다. 정해진 기간 내에 방문한 횟수가 많은 고객과 한 번 방문한 고객을 동일하게 활성 유저로 분류하기 때문입니다.
Bracket Retention은 관찰하고 싶은 고객의 서비스 이용 주기에 맞게 리텐션을 측정하는 방법입니다. 서비스 이용 주기가 길거나 주기적으로 이용하는 서비스에 적용하기에 적합합니다.
이처럼 리텐션을 측정하는 다양한 방법이 있으며, 같은 데이터 내에서도 리텐션을 측정하는 방법에 따라 값의 차이가 발생하는 것을 확인했습니다. 리텐션은 기업이 지속적으로 성장하기 위해 해적 지표(AARRR)에서 가장 중요하게 분석하고 관리해야 하는 지표입니다. 따라서 기업의 서비스 특성을 잘 이해하여 리텐션 측정 방법(N-Day, Rolling, Bracket)을 선정하고, 비즈니스 목표에 맞는 리텐션 측정 기준(방문 및 결제 등)과 측정 주기(일, 주, 월 등)을 설정하여 지속적으로 분석해야 합니다.
15.3. Funnel Analysis
15.3.1. Funnel 이란
퍼널 분석은 웹사이트나 앱에서 사용자들의 행동 패턴을 깊이 있게 이해하기 위한 분석 도구입니다. 이를 통해 사용자가 원하는 목적지에 원활하게 도달하는지, 그리고 각 단계에서 어떤 요인에 의해 이탈하는지를 파악하기 위함입니다. 서비스나 제품에 대한 인식에서 구매에 이르기까지 소비자의 경로를 단계별로 추적하며, 각 단계로 내려갈수록 참여하는 소비자 수가 줄어들기 때문에, 넓은 입구와 좁은 출구를 가진 깔때기의 형상에 비유됩니다. 이러한 형태 때문에 Funnel(깔대기) 분석이라 부르게 되었습니다.
웹 기반 쇼핑 플랫폼 회사를 생각해 보면, 사이트를 방문한 사용자가 구매를 완료하는 것이 최종 목표입니다. 구매를 위해 필요한 단계는 다음과 같습니다.
- 쇼핑몰 방문
- 제품 상세페이지 방문
- 장바구니에 상품 추가
- 결제

소비자들이 쇼핑 플랫폼 회사가 설계한 경로 내에서 다음 단계로 이동하는 것을 Conversion(전환)이라고 합니다. Funnel 분석은 사용자의 행동을 추적하여 비즈니스 및 사용자 경험에 중요한 인사이트를 제공합니다. 또한 Funnel의 시작 지점과 최종 목적지인 끝 지점은 비즈니스 목적에 따라 다양한 시나리오로 분석할 수 있습니다.
- 계정 생성 Funnel 예시:
- 웹사이트 방문
- 회원 가입 페이지 방문
- 회원 가입 양식 제출
- 이메일 확인 클릭
- 계정 생성 완료
- 모바일 앱 다운로드 Funnel 예시:
- 앱 스토어 검색
- 앱 상세 페이지 방문
- 앱 다운로드
- 앱 설치 및 실행
- 처음 로그인 혹은 회원 가입
- 뉴스레터 구독 Funnel 예시:
- 블로그 또는 기사 페이지 방문
- 뉴스레터 구독 팝업 또는 섹션 보기
- 이메일 주소 입력
- 구독 버튼 클릭
- 이메일 확인 및 구독 인증
- 온라인 광고 반응 Funnel 예시:
- 광고 클릭
- 랜딩 페이지 방문
- 제품 또는 서비스 정보 조회
- 장바구니에 추가
- 구매 완료
각 시나리오는 사용자의 행동 및 경로, 그리고 데이터의 유형과 소스에 따라 다양한 방식으로 구성될 수 있습니다. 비즈니스 개선을 위한 시나리오를 선택한 후에는 해당 경로에서 사용자가 중간에 떠나는 지점, 전환율이 낮은 단계, 개선의 여지가 있는 단계 등을 파악하는 것이 중요합니다. 이러한 인사이트는 제품 개선, 마케팅 전략, 사용자 경험 최적화 등에 큰 도움이 됩니다.
15.3.2. Conversion Rate 향상
앞서 보여드린 예시에서 Funnel을 구상하고 전환율을 계산하여, 온라인 쇼핑몰 방문에서 결제까지 이루어지는 전환율이 10%라고 가정해 보겠습니다.
유입 인원 | 전환율 | 결제 인원 |
150 | 10% | 15 |
300 | 10% | 30 |
500 | 10% | 50 |
1000 | 10% | 100 |
- 유입 트래픽 증대
고객의 유입을 증대시키는 것은 전환율 향상의 첫걸음입니다. 앱스토어나 웹사이트에 방문하는 사용자 수를 늘리면, 이후 단계로 진행하는 사용자 수도 증가할 가능성이 높습니다. 이를 위해, 다양한 마케팅 전략을 도입할 수 있습니다.
예를 들어, 타겟팅 광고를 활용하거나, 눈길을 끄는 콘텐츠와 디자인으로 사용자의 클릭을 유도할 수 있습니다:
- 검색 엔진 최적화 (SEO):
- 예시: 대형 패션 쇼핑몰이 제품 설명, 메타 태그, 이미지 알트 텍스트를 최적화하여 포털사이트 검색 결과에서 상위 랭킹에 위치시킵니다.
- 소셜 미디어 활용:
- 소셜 미디어를 활용하여 관련된 키워드나 특정 타겟층에 집중적으로 광고를 진행합니다.
- 이메일 마케팅:
- 기존 고객을 대상 할인 쿠폰을 이메일로 발송, 재방문을 유도합니다
물론, 유입된 사용자가 모두 목표 행동을 실행하는 것은 아니지만, 유입 수 자체의 증가는 전체 전환율 향상의 기반이 됩니다. 동일한 전환율 10%를 기준으로 할 때, 유입되는 고객 수를 키우면 그에 따라 결제를 완료하는 고객 수도 함께 증가할 것입니다. 예를 들어, 우리의 온라인 쇼핑몰 광고 전략을 통해 방문자 수를 2000명까지 끌어올렸다면, 이 중 최종적으로 결제를 진행하는 사용자는 약 200명이 될 수 있습니다.
- 전환율 향상 전략 도입
다수의 사용자가 웹사이트나 앱에 방문했더라도, 모든 사용자가 원하는 설계된 경로를 따르지는 않습니다. 따라서 각 단계별 전환율을 높이는 것 또한 중요합니다. 예를 들면, 현재 5%의 전환율을 30%로 끌어올린다면, 동일한 유입량에도 불구하고 목표를 달성하는 사용자 수가 크게 증가합니다. 이를 위해서는 사용자의 경험을 개선하거나, 특정 행동을 유도하는 콜 투 액션을 강화하는 등의 전략이 필요합니다. 사용자의 전환율을 높이기 위해선, 그들이 거쳐야 하는 단계의 간소화가 필요합니다. 많은 단계를 거쳐야 할수록 사용자의 이탈 확률이 높아집니다. 여러 이유로 중간에 과정을 포기할 수 있기 때문입니다. 따라서, 필수적이지 않은 단계는 제거하거나, 간소화하여 사용자가 원활하게 목표까지 도달할 수 있도록 최적화하는 것이 중요합니다.
예를 들어:
- 사용자 경험 개선:
- 페이지 로딩 시간 최소화: 웹페이지의 속도를 최적화하여 사용자가 웹사이트를 빠르게 탐색할 수 있게 합니다.
- 직관적인 내비게이션: 사용자가 원하는 정보나 기능을 쉽게 찾을 수 있도록 메뉴와 버튼 구성을 직관적으로 설계합니다.
- 신뢰성 강화:
- 투명한 정보 제공: 제품 정보, 배송비, 반품 정책 등을 명확하게 표시하여 사용자의 불확실성을 줄입니다.
- 고객 평가와 테스트: 실제 사용자의 리뷰나 전문가의 평가를 제공하여 제품이나 서비스의 품질을 확인할 수 있게 합니다.
- 장바구니 최적화:
- 간편한 체크아웃 프로세스: 복잡한 체크아웃 과정을 간소화하여 사용자가 쉽게 결제를 완료할 수 있도록 합니다.
- 다양한 결제 옵션 제공: 다양한 결제 방법을 제공하여 사용자의 선택의 폭을 넓힙니다.
퍼널을 개선하는 방법은 다양하며, 각 비즈니스의 특성과 목표에 따라 적절한 전략을 선정하여 적용해야 합니다.