[통계] AARRR: Referral

jul ee·2025년 4월 24일

데이터 성장기

목록 보기
63/139

Referral: 사용자의 자발적 확산을 유도

Referral이란?

Referral은 기존 사용자가 지인에게 제품이나 서비스를 소개하고, 이를 통해 신규 사용자가 자연스럽게 유입되는 구조를 의미한다. 사용자가 만족감을 느끼고 타인에게 자연스럽게 소개할 정도로 가치를 인정받았다는 뜻으로 해석할 수 있다.

이 단계는 사용자를 기반으로 저절로 성장할 수 있는 가장 이상적인 구조이며, 입소문과 바이럴을 통해 마케팅 비용 없이도 유저 수가 크게 증가할 수 있기 때문에 중요하다.

  • 드롭박스(Dropbox): 친구를 초대하면 양쪽 모두에게 저장 공간을 추가 제공
  • 배달의민족: 친구 초대를 통해 할인 쿠폰 제공

이처럼 Referral은 단순한 초대를 넘어서 보상 설계와 유저 경험이 맞물려야 효과가 발생한다.

주요 지표

💡 NPS (Net Promotion Score)
= 추천 고객 비율(%) - 비추천 고객 비율(%)

사용자의 추천 의향을 수치화한 지표로,

조사방법이 간단하고 리소스가 적게 들어가지만, 구체적으로 어떤 경험이였는지 특정이 어렵고 가중치 없이 단순화된 지표(ex: 0점을 10명이 준 것과, 6점을 10명이 준 것은 동일)라는 문제가 있다.

💡 바이럴 계수(viral Coefficient)
= (유저가 데려온 신규 유저) / (유저 수)
= (지인을 초대한 유저 수 * 초대 받아서 가입한 유저 수) / (유저 수)

한 명의 사용자가 데려오는 신규 사용자 수를 의미하여,
복리에 의한 효과로 바이럴 계수가 1이 넘어가면 신규 사용 자가 기하급수적으로 증가하는 프로덕트라고 볼 수 있다.




이 글에서는 아래의 지표들을 고려하여 Referral 분석을 수행해 보았다.

  • referral_source: 추천을 통해 유입되었는가?
  • referral_code_used: 추천 코드를 사용했는가?
  • purchase_amount: 추천 사용자의 구매력은 얼마나 되는가?
  • referral_sent / referral_accepted: 초대 시도와 실제 가입
  • NPS(Net Promoter Score): 추천 의향
  • Viral Coefficient: 유저 1명이 데려오는 유저 수

1. 샘플 Referral 데이터 생성

추천 유입 여부, 추천 코드 사용 여부, 가입일, 구매 금액 데이터를 포함하는 가상의 유저 데이터를 생성한다.

import pandas as pd
import numpy as np

# 가상의 데이터 생성
np.random.seed(42)
n_users = 1000
data = {
    'user_id': range(1, n_users + 1),
    'referral_source': np.random.choice(['Yes', 'No'], size=n_users, p=[0.3, 0.7]),
    'referral_code_used': np.random.choice(['Yes', 'No'], size=n_users, p=[0.4, 0.6]),
    'signup_date': pd.date_range(start='2024-01-01', periods=n_users, freq='D'),
    'purchase_amount': np.random.randint(0, 1000, size=n_users)
}

# 데이터프레임 생성
df = pd.DataFrame(data)
df.head(3)
| user_id | referral_source | referral_code_used | signup_date | purchase_amount |
|---------|-----------------|--------------------|-------------|-----------------|
| 1       | No              | Yes                | 2024-01-01  | 219             |
| 2       | No              | No                 | 2024-01-02  | 902             |
| 3       | No              | No                 | 2024-01-03  | 162             |

2. 추천 유입 사용자의 비율 분석

referral_source 컬럼을 기준으로 추천을 통해 유입된 사용자의 비율을 계산한다.

# 추천을 통해 유입된 사용자 비율 분석
referral_count = df['referral_source'].value_counts(normalize=True) * 100
print("추천 유입 사용자 비율:")
print(referral_count)
추천 유입 사용자 비율:
referral_source
No     68.1
Yes    31.9

약 32%의 사용자가 추천을 통해 유입되었음을 알 수 있다.


3. 추천 코드 사용 비율 분석

추천 코드(referral_code_used)를 실제로 사용한 사용자의 비율을 확인한다.

# 추천 코드 사용 비율 분석
referral_code_usage = df['referral_code_used'].value_counts(normalize=True) * 100
print("추천 코드 사용 비율:")
print(referral_code_usage)
추천 코드 사용 비율:
referral_code_used
No     61.5
Yes    38.5

사용자의 약 38.5%가 추천 코드를 실제로 입력한 것을 알 수 있다.


4. 추천 사용자 vs. 비추천 사용자의 평균 구매 금액 비교

# 추천 사용자 vs 비추천 사용자 구매 금액 비교
referral_purchase = df[df['referral_source'] == 'Yes']['purchase_amount'].mean()
non_referral_purchase = df[df['referral_source'] == 'No']['purchase_amount'].mean()

print("추천 유입 사용자의 평균 구매 금액:", referral_purchase.round(3))
print("비추천 유입 사용자의 평균 구매 금액:", non_referral_purchase.round(3))
추천 유입 사용자의 평균 구매 금액: 513.549
비추천 유입 사용자의 평균 구매 금액: 531.107

흥미롭게도, 추천을 통해 유입된 사용자보다 비추천 유입 사용자의 평균 구매 금액이 더 높았다는 것이 보인다.

이 결과를 통해 보상 구조나 진성 유저 분류 기준을 다시 설계할 필요가 있음을 생각해 볼 수 있다.



이어서 바이럴 계수와 NPS 점수 분석도 수행해 보자.

5. Viral Coefficient 계산

Viral Coefficient(바이럴 계수)는 한 사용자가 초대한 지인 중 실제 가입으로 이어진 사람의 수를 나타내며, 1 이상이면 유저가 유저를 데려오는 확산 구조에 도달한 것을 의미한다.

# Referral 행동 시뮬레이션
n = 200
referral_sent = np.random.poisson(1.5, n)  # 평균 1.5명 초대
referral_accepted = [min(sent, np.random.binomial(sent, 0.4)) for sent in referral_sent]  # 수락률 40%

# 데이터프레임 생성
df2 = pd.DataFrame({
    'user_id': range(1, n + 1),
    'referral_sent': referral_sent,
    'referral_accepted': referral_accepted
})

# 바이럴 계수 계산
total_users = len(df2)
total_referral_accepted = df2['referral_accepted'].sum()
viral_coefficient = total_referral_accepted / total_users

print(f"Viral Coefficient: {viral_coefficient:.2f}")
Viral Coefficient: 0.62

0.62라는 수치는 아직 완전한 Referral 성장 구조는 아니지만, 일정 수준의 확산 효과가 존재함을 나타낸다.

이 계수를 1 이상으로 끌어올리기 위해서 초대 UI/UX를 개선한다든가 수락 유저를 위한 혜택 강화하고, 타겟팅된 리마인드 캠페인 등을 고려해 볼 수 있을 것이다.


6. NPS 분석

NPS(Net Promoter Score)는 유저가 제품이나 서비스를 추천할 의향이 있는지를 점수로 표현한 지표이다.

0~10점 응답을 기반으로 다음과 같이 분류한다.

  • Promoters (9~10):  강력한 추천자
  • Passives (7~8):  중립적인 사용자
  • Detractors (0~6):  비추천자 또는 불만 사용자
# 임의의 NPS 점수 분포 생성
nps_scores = np.random.choice(
    range(11),
    size=n,
    p=[0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.10, 0.10, 0.25, 0.20]
)

df2['nps_score'] = nps_scores

# NPS 그룹 분류
df2['nps_group'] = pd.cut(df2['nps_score'], bins=[-1, 6, 8, 10], labels=['Detractor', 'Passive', 'Promoter'])

# 비율 계산 및 NPS 산출
nps_summary = df2['nps_group'].value_counts(normalize=True) * 100
nps_score = nps_summary['Promoter'] - nps_summary['Detractor']

print("NPS 분포:")
print(nps_summary.round(2))
print(f"\nNet Promoter Score: {nps_score:.2f}")
NPS 분포:
Promoter     30.50%
Passive      40.00%
Detractor    29.50%

Net Promoter Score: 1.00

NPS = 1.00은 긍정적이라고 보기는 어려우며, 만족도는 중립에 가깝다.

이 경우에는 Passive 유저를 Promoter로 전환시킬 전략 설계하고, 불만족(Detractor) 요인의 정확한 파악과 제거하는 것이 필요할 것이다.




지금까지 Referral 단계에서 가능한 간단한 분석을 수행해 보았다.

분석 항목주요 결과
추천 유입 비율31.9%
추천 코드 사용 비율38.5%
평균 구매 금액 (추천)513.5원
평균 구매 금액 (비추천)531.1원
Viral Coefficient0.62 → 자발적인 성장 구조까지는 아직 도달하지 못함
NPS Score1.00 → 중립적인 평가, 추천 유도 전략 필요

사용자가 자발적으로 서비스를 퍼뜨리게 하려면, 만족도와 유도 구조가 모두 정교하게 설계되어야 한다. 지표를 확인한 다음, 실제 유저의 추천 행동을 디자인 관점에서 어떻게 설계할 수 있는지 고민하는 것이 중요하다.

출시된 날씨앱 서비스의 신규 기능을 개발 중인데, 기능 개발이 마무리되면 우리 앱을 성장시키 수 있는 방법으로 Referral 단계를 고려할 수 있겠다는 생각이 들었다.

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글