Referral은 기존 사용자가 지인에게 제품이나 서비스를 소개하고, 이를 통해 신규 사용자가 자연스럽게 유입되는 구조를 의미한다. 사용자가 만족감을 느끼고 타인에게 자연스럽게 소개할 정도로 가치를 인정받았다는 뜻으로 해석할 수 있다.
이 단계는 사용자를 기반으로 저절로 성장할 수 있는 가장 이상적인 구조이며, 입소문과 바이럴을 통해 마케팅 비용 없이도 유저 수가 크게 증가할 수 있기 때문에 중요하다.
이처럼 Referral은 단순한 초대를 넘어서 보상 설계와 유저 경험이 맞물려야 효과가 발생한다.
💡 NPS (Net Promotion Score)
= 추천 고객 비율(%) - 비추천 고객 비율(%)사용자의 추천 의향을 수치화한 지표로,
조사방법이 간단하고 리소스가 적게 들어가지만, 구체적으로 어떤 경험이였는지 특정이 어렵고 가중치 없이 단순화된 지표(ex: 0점을 10명이 준 것과, 6점을 10명이 준 것은 동일)라는 문제가 있다.
💡 바이럴 계수(viral Coefficient)
= (유저가 데려온 신규 유저) / (유저 수)
= (지인을 초대한 유저 수 * 초대 받아서 가입한 유저 수) / (유저 수)한 명의 사용자가 데려오는 신규 사용자 수를 의미하여,
복리에 의한 효과로 바이럴 계수가 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 |
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%의 사용자가 추천을 통해 유입되었음을 알 수 있다.
추천 코드(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%가 추천 코드를 실제로 입력한 것을 알 수 있다.
# 추천 사용자 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 점수 분석도 수행해 보자.
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를 개선한다든가 수락 유저를 위한 혜택 강화하고, 타겟팅된 리마인드 캠페인 등을 고려해 볼 수 있을 것이다.
NPS(Net Promoter Score)는 유저가 제품이나 서비스를 추천할 의향이 있는지를 점수로 표현한 지표이다.
0~10점 응답을 기반으로 다음과 같이 분류한다.
# 임의의 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 Coefficient | 0.62 → 자발적인 성장 구조까지는 아직 도달하지 못함 |
| NPS Score | 1.00 → 중립적인 평가, 추천 유도 전략 필요 |
사용자가 자발적으로 서비스를 퍼뜨리게 하려면, 만족도와 유도 구조가 모두 정교하게 설계되어야 한다. 지표를 확인한 다음, 실제 유저의 추천 행동을 디자인 관점에서 어떻게 설계할 수 있는지 고민하는 것이 중요하다.
출시된 날씨앱 서비스의 신규 기능을 개발 중인데, 기능 개발이 마무리되면 우리 앱을 성장시키 수 있는 방법으로 Referral 단계를 고려할 수 있겠다는 생각이 들었다.