그로스 마케팅/학습 기록

통계학 실전 완벽 정리 | 그로스 마케터가 알아야 할 AARRR 퍼널 분석 [멋쟁이사자처럼 그로스 마케팅 5기 day 22]

shushu26 2026. 6. 15. 00:24

많은 마케터들이


"유입은 많은데 왜 매출이 안 나지?",
"새로 바꾼 결제 화면이 정말 효과가 있나?"라는 고민을 합니다. 

 

이번 포스팅에서는 실제 커머스 마케팅 데이터(Market_data.csv)를 활용한 파이썬 실습 코드를 바탕으로,
서비스의 성장을 이끄는 두 가지 핵심 무기를 완벽하게 정리해 드립니다.

  1. AARRR 퍼널 분석으로 유저 이탈의 탈출구(병목 구간) 찾기
  2. 독립표본 t-검정(T-Test)으로 신규 결제 UI의 실제 성과 검증하기

실습 준비: 데이터 로드 및 마케팅 지표 정의

 

분석에 사용된 데이터는 유입 채널, 광고비, 첫 구매액, 프로모션 전/후 체류시간, 추천 횟수, 누적 총 매출 등 마케팅 핵심 지표를 담은 3,000명의 고객 행동 데이터입니다.

 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

# 한글 폰트 및 시각화 설정
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False

# 데이터 로드
df = pd.read_csv("data/Market_data.csv", encoding="euc-kr")

 

 

데이터 분석을 시작하기 전, 그로스 팀이 합의한 AARRR 단계별 활성화 조건은 다음과 같이 명확하게 정의되어 있습니다.

 

 

Acquired (획득): 1단계 - 우리 서비스에 방문했는가? 
Activated (활성화): 2단계 - 첫 구매액이 2만 원 이상인가?
Retained (유지): 3단계 - 프로모션 이후 앱 체류시간이 18분 이상인가? (충성고객 판단)
Referred (추천): 4단계 - 주변에 1명 이상 추천(친구 초대)을 했는가?
Revenue_Generated (수익): 5단계 - 누적 총 매출이 8만 원을 넘는 고객인가? (VIP 판단)

 


실습 1. AARRR 퍼널 분석 (Funnel Analysis)

 

첫 번째 실습은 유저의 라이프사이클을 추적하는 AARRR 퍼널 분석이며,
유입된 유저들이 최종 VIP 단계까지 가면서 어디서 가장 많이 이탈하는지 파악하는 작업입니다.

 

 

1) 퍼널별 전환 유저 수 계산 코드

:   각 퍼널 단계 컬럼의 합계를 구하여, 최종 단계로 갈수록 얼마나 많은 유저가 남는지 계산합니다.

 
# 각 퍼널 단계별 전환 유저 수 계산
funnel_stages = ['Acquired', 'Activated', 'Retained', 'Referred', 'Revenue_Generated']
funnel_counts = df[funnel_stages].sum()

print(funnel_counts)

 

 

2) 그로스 마케터의 인사이트 (Insight)

병목(Bottleneck) 진단:
각 단계별 유저 수의 감소 폭을 확인하면, 유저가 어디서 전환되지 않고 이탈했는지 직관적으로 드러납니다.

 

 

마케팅 액션:
만약 Activated(첫 구매 2만 원) 단계에서 이탈이 크다면 첫 구매 허들을 낮추는 프로모션이 필요하고, Retained(체류시간 18분) 단계가 무너졌다면 프로모션 리워드 설계나 푸시 알림 타이밍을 다시 점검해야 합니다. 

 

 

실습 2. 결제 페이지 UI A/B 테스트 검증

 

이번에 새로 기획한 신규 결제 화면(UI_B)이 기존의 기존 화면(UI_A)보다
유저들의 '첫 구매액(First_Purchase)'을 늘리는 데 진짜 기여했는지 데이터로 검증해 보겠습니다.

 

 

1) 시각화로 두 그룹의 차이 확인 (Boxplot)

:   통계 검정을 돌리기 전, Seaborn의 boxplot을 활용해 시각적으로 데이터 분포를 먼저 비교합니다.

 
# UI 그룹별 첫 구매액 분포 시각화
plt.figure(figsize=(10, 6))
sns.boxplot(x='UI_Group', y='First_Purchase', data=df, palette='Set2')
plt.title('결제 페이지 UI 그룹별 첫 구매액 비교')
plt.xlabel('UI 그룹')
plt.ylabel('첫 구매액 (원)')
plt.show()

 

 

2) 통계적 검정 (독립표본 t-검정)

단순히 그래프상으로 평균이 높아 보인다고 해서 성과가 좋다고 결론 내릴 수는 없습니다.
그것이 '우연'이 아님을 증명하기 위해 T-Test를 수행합니다.

 

# 두 UI 그룹의 데이터 분리
group_A = df[df['UI_Group'] == 'UI_A(기존)']['First_Purchase']
group_B = df[df['UI_Group'] == 'UI_B(신규)']['First_Purchase']

# 독립표본 t-검정 수행 (웰치의 t-검정 적용)
t_stat, p_value = stats.ttest_ind(group_B, group_A, equal_var=False)

print(f"T-statistic (검정통계량): {t_stat:.4f}")
print(f"P-value (유의확률): {p_value:.4f}")

 

 

3) 그로스 마케터의 인사이트 (Insight)

P-value 분석:
계산된 p-value가 유의수준 0.05보다 작다면, 신규 UI_B가 유저들의 첫 구매액을 높이는 데 '통계적으로 유의미한 효과'를 냈다고 확신할 수 있습니다.

 

 

비즈니스 의사결정:
통계적 유의성이 확보되었다면 기존 UI_A 버전을 가동 중단하고, 신규 결제 화면(UI_B)을 전체 유저에게 100% 롤아웃(Roll-out)하는 근거가 됩니다. 반대로 차이가 없다면 과감히 드롭하고 새로운 가설을 세워야 예산 낭비를 막을 수 있습니다.