AARRR은 사용자의 전환 여정을 5단계로 나누어 각 단계의 성과를 측정하고, 데이터 기반의 성장 전략을 수립하는 데 대표적으로 활용되는 프레임워크이다.
사용자의 전환 여정을 5단계로 나누어 각각 정량적으로 분석할 수 있게 해준다.
Acquisition: 사용자가 유입되는 단계
Activation: 유입된 사용자가 제품을 사용하는 단계
Retention: 사용자가 계속해서 재방문하거나 사용하는 단계
Referral: 사용자가 다른 사용자를 초대하거나 공유하는 단계
Revenue: 사용자로부터 매출이 발생하는 단계
각 단계는 서로 독립적인 지표가 아니라 유기적으로 연결되어 있어 전체 여정을 이해하는 것이 중요하다.
예를 들어 Activation이 낮으면 Retention도 낮을 가능성이 크고, Retention이 낮으면 Revenue가 자연스럽게 떨어지게 된다. 따라서 하나의 지표만을 최적화하기보다는, 전반적인 흐름을 이해하고 균형 있게 관리하는 것이 필요하다.
AARRR의 각 단계별로 실제 프로덕트에 어떻게 적용할 수 있을지 고민해 보자.
Acquisition (유입) 단계에서는 사용자가 어떤 경로를 통해 처음 서비스를 접하는지를 분석한다.
💡 CAC (Customer Acquisition Cost)
CAC = 총 마케팅 비용 / 신규 유저 수
신규 고객 1명을 획득하기 위해 들어가는 비용을 의미한다. 온라인 광고, 프로모션, 인플루언서 마케팅, 오프라인 비용 등 다양한 요소가 포함될 수 있다.
실제 사용자 데이터가 없어도 분석 구조와 시각화 방법을 익히기 위해, 가상의 데이터를 생성한다.
또한, 데이터 생성 과정에서 유입 비율이나 전환율을 임의로 설정할 수 있기 때문에, 시나리오 실험도 가능하다.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
np.random.seed(42)
num_users = 200
channels = ['SEO', 'Paid Ads', 'Social Media', 'Email', 'Referral']
data = {
'user_id': range(1, num_users + 1),
'acquisition_channel': np.random.choice(channels, size=num_users, p=[0.3, 0.25, 0.2, 0.15, 0.1]),
'signup_date': pd.date_range(start='2024-10-01', periods=num_users, freq='D'),
'converted': np.random.choice([0, 1], size=num_users, p=[0.6, 0.4]) # 전환율 40% 설정
}
df = pd.DataFrame(data)
df.head(3)
| user_id | acquisition_channel | signup_date | converted |
|---------|---------------------|--------------|-----------|
| 1 | Paid Ads | 2024-10-01 | 1 |
| 2 | Referral | 2024-10-02 | 0 |
| 3 | Social Media | 2024-10-03 | 0 |
converted: 사용자가 서비스에서 원하는 행동(회원가입, 구매 등)을 했는지를 나타낸다.
값이 1이면 전환(Conversion), 0이면 미전환이다.
유입된 사용자 수를 채널별로 집계하면 가장 많은 사용자를 끌어들인 채널이 어디인지 확인할 수 있다.
이는 어디에 마케팅 예산을 집중할 것인지 결정하는 데 핵심 기준이 된다.
channel_counts = df['acquisition_channel'].value_counts()
print("Acquisition 채널별 사용자 수:")
print(channel_counts)
Acquisition 채널별 사용자 수:
acquisition_channel
SEO 66
Paid Ads 50
Social Media 33
Email 32
Referral 19
Name: count, dtype: int64
하지만 단순히 유입 수가 많다고 해서 채널이 효율적인 것은 아니며, 다음 단계에서 전환율을 반드시 함께 확인해야 한다.
plt.figure(figsize=(8, 5))
sns.countplot(data=df, x='acquisition_channel', order=channel_counts.index)
plt.title('Acquisition user by channel')
plt.xlabel('Acquisition Channel')
plt.ylabel('User Count')
plt.xticks(rotation=45)
plt.show()

시각화를 통해 텍스트보다 더 빠르게 유입 채널별 규모를 파악할 수 있다.
여기서 중요한 건 사용자 수와 전환율을 함께 고려해야 진짜 ‘성과 좋은 채널’을 정의할 수 있다는 점이다.
마케팅 채널의 진짜 가치는 얼마나 많은 사용자가 전환(구매, 회원가입 등) 되었는가에 있다.
유입 수가 많아도 전환율이 낮다면, 해당 채널은 오히려 비효율적일 수 있다.
conversion_rate = df.groupby('acquisition_channel')['converted'].mean()
print("Acquisition 채널별 전환율:")
print(conversion_rate)
Acquisition 채널별 전환율:
acquisition_channel
Email 0.500000
Paid Ads 0.340000
Referral 0.263158
SEO 0.530303
Social Media 0.424242
Name: converted, dtype: float64
plt.figure(figsize=(8, 5))
conversion_rate.sort_values().plot(kind='bar', color='skyblue')
plt.title('Acquisition – CVR by channel')
plt.xlabel('Acquisition Channel')
plt.ylabel('Conversion Rate')
plt.xticks(rotation=45)
plt.ylim(0, 1)
plt.show()

전환율 기준으로 채널을 정렬하니 효율성이 명확히 구분된다.
→ 전환율이 낮은 채널에 대해서는 예산 조정, 콘텐츠 개선, 메시지 테스트 등이 필요하다는 생각을 해 볼 수 있다.
Acquisition 분석에서 얻을 수 있는 전략적 시사점을 정리해 보았다.
| 항목 | 핵심 포인트 |
|---|---|
| 유입 수 분석 | 어떤 채널이 사용자를 많이 유입시키는가 |
| 전환율 분석 | 유입된 사용자 중 실제 고객으로 전환된 비율 |
| 채널 성과 비교 | 유입 수와 전환율을 함께 고려해야 정확한 판단 가능 |
| 마케팅 전략 | 고전환율 채널은 예산 유지 또는 증액, 저효율 채널은 개선 또는 제거 대상 |
Acquisition 단계는 사용자 여정의 출발점이자 마케팅 전략의 성패가 결정될 수 있다. 따라서 유입 수만 보는 것이 아니라, 전환율을 함께 고려한 분석이 반드시 필요하다.
이 글에서는 유입 단계인 Acquisition에 집중했지만, 이후 Activation, Retention 등의 후속 단계까지 함께 분석함으로써 사용자 전환 여정을 통합적으로 이해하는 것이 중요하다.