A/B 테스트 없이 프로모션 효과 측정하기: 차분 분석과 성향 점수 매칭
무작위 배정 없이 진행되는 오픈 프로모션은 대체 평가 방법이 필요합니다. 주요 접근법은 추세 비교를 위한 차분 분석(Diff-in-Diff)과 유사한 통제군을 구성하는 성향 점수 매칭(PSM)입니다. 이 기법들은 계절성과 자연스러운 시장 동향에서 진짜 프로모션 효과를 분리하는 데 도움을 줍니다.
통제군은 프로모션의 영향을 외부 요인과 구분하는 데 필수적입니다. 이를 무시하면 명절 기간에 발생하는 모든 지표 상승을 프로모션 탓으로 돌릴 수 있는데, 사실은 단지 계절적 성장일 뿐일 수 있습니다.
차분 분석: 일반적인 통제군을 활용한 기본 접근법
차분 분석은 타겟 그룹(프로모션 참여자)과 통제군(전체 사용자) 간의 지표 추세 차이를 계산합니다. 전후 기간만 비교하면 초기 차이를 무시하게 되는데, 프로모션 참여자는 이미 더 높은 충성도와 평균 주문 금액을 가진 경우가 많습니다.
이 방법은 유사-유사(Like-for-Like, LFL) 사용자—즉, 프로모션 전후 모두 활동한 사용자—에 적용됩니다. 신규 고객 유입의 영향을 제외할 수 있습니다.
계산 단계:
- 모든 LFL 사용자: 전기 기간에서 프로모션 기간까지의 추세
- LFL 프로모션 참여자: 동일한 추세
- 두 추세의 차이는 프로모션 효과를 나타냅니다.
평균 주문 금액 예시로 설명:
| 기간 | 타겟 그룹 | 전체 사용자 |
|------------|------------|--------------|
| 프로모션 전 | ₩2,500 | ₩1,350 |
| 프로모션 중 | ₩3,000 | ₩1,500 |
| 변화율 | +20% | +11% |
프로모션 효과: 20% - 11% = +9%. 증가 가치: ₩3,000 / 1.09 ≈ ₩2,752(기준), 추가 수익 ₩248.
한계: 프로모션 참여자들은 일반 인구보다 다른 행동 패턴을 보일 수 있습니다. 예를 들어, 특정 계절에 특별한 소비 습관을 가질 수 있습니다.
개선된 차분 분석: 주제 기반 통제군
오프라인 프로모션(예: 베이커리 할인)의 경우, 통제군은 같은 매장에서 유사 제품을 구매하는 고객들로 구성됩니다(다른 베이커리 제품). 두 그룹은 개념적으로 유사합니다: 동일한 장소에서 판매되며, 하나는 프로모션이 적용되고, 하나는 적용되지 않습니다.
이 방식은 편향을 줄이지만 완전히 제거하지는 못합니다. 예를 들어, 파이를 좋아하는 사람과 베이커리를 선호하는 사람의 소비 성향은 다릅니다(예: 절약 vs. 대량 구매).
성향 점수 매칭: 가상의 통제군 만들기
PSM은 A/B 테스트의 무작위 배정을 모방합니다. 프로모션 전 데이터(고객 생애 가치, 활동 일수, 평균 주문 금액, 계정 연수 등)를 활용해 참여 확률(성향 점수, 0~1 사이)을 예측하는 모델을 만듭니다.
모델은 참여 여부 플래그 없이 학습된 후, k-NN 알고리즘을 통해 점수 기반으로 쌍을 매칭합니다. 정확한 매칭을 위해 통제군은 타겟 그룹보다 훨씬 커야 합니다.
XGBoost를 활용한 예제 코드:
# 모델 하이퍼파라미터 설정 (Optuna로 최적화 가능)
model_params = {
'objective': 'binary:logistic',
'eval_metric': 'logloss',
'learning_rate': 0.4,
'max_depth': 3,
'min_child_weight': 10,
'subsample': 0.8,
'colsample_bytree': 0.8,
'lambda': 1.0,
'alpha': 0.1,
'random_state': seed,
'n_estimators': 100
}
# 부스팅 모델 훈련
pm = GradientBoostedPropensityModel(early_stop=False, **model_params)
ps = pm.fit_predict(all_data[features], all_data['test'])
# 쌍 매칭
matcher = NearestNeighborMatch(replace=False, ratio=1, random_state=seed)
all_data['score'] = ps
matched = matcher.match(all_data, 'test', ['score'])
# 최종 그룹
matched[(matched['test'] == 0)].describe()
matched[(matched['test'] == 1)].describe()
품질 검증 항목:
- 그룹 간 지표 유사성 확인
- 교정성: 점수 0.5일 때 약 50%가 프로모션 참여자여야 함
- 특성 분포가 동일해야 함
매칭 후 차분 분석을 적용합니다. 한계사항:
- 미래 동향이 과거와 유사하다는 가정
- 지역별 계절성 영향
- 통제군이 제한적일 경우 편향 발생—참여 불가능한 사람만 포함됨
핵심 요약
- 통제군은 반드시 필요: 없으면 프로모션 효과가 전체 트렌드와 혼동됨.
- 차분 분석은 간단하고 빠름: LFL 사용자 또는 주제 기반 통제군 활용 가능.
- PSM는 더 정밀함: 데이터와 계산 리소스 필요하지만, A/B 테스트에 근접함.
- 항상 그룹 검증 필수: 지표, 교정성, 특성 분포 확인.
- 가능하면 A/B 테스트 우선 고려: 사후 평가를 피하라.
— Editorial Team
아직 댓글이 없습니다.