홈으로 돌아가기

A/B 없는 프로모션 평가: Diff-in-Diff와 PSM

이 글은 A/B 테스트 없이 오픈 프로모션 효과를 평가하는 방법을 설명합니다: LFL 사용자와 함께한 Diff-in-Diff와 Propensity Score Matching. 계산 예제, 코드, 그룹 품질 검사를 제공합니다.

Diff-in-Diff와 PSM: 테스트 없는 프로모션 평가
Advertisement 728x90

A/B 테스트 없이 프로모션 효과 측정하기: 차분 분석과 성향 점수 매칭

무작위 배정 없이 진행되는 오픈 프로모션은 대체 평가 방법이 필요합니다. 주요 접근법은 추세 비교를 위한 차분 분석(Diff-in-Diff)과 유사한 통제군을 구성하는 성향 점수 매칭(PSM)입니다. 이 기법들은 계절성과 자연스러운 시장 동향에서 진짜 프로모션 효과를 분리하는 데 도움을 줍니다.

통제군은 프로모션의 영향을 외부 요인과 구분하는 데 필수적입니다. 이를 무시하면 명절 기간에 발생하는 모든 지표 상승을 프로모션 탓으로 돌릴 수 있는데, 사실은 단지 계절적 성장일 뿐일 수 있습니다.

차분 분석: 일반적인 통제군을 활용한 기본 접근법

차분 분석은 타겟 그룹(프로모션 참여자)과 통제군(전체 사용자) 간의 지표 추세 차이를 계산합니다. 전후 기간만 비교하면 초기 차이를 무시하게 되는데, 프로모션 참여자는 이미 더 높은 충성도와 평균 주문 금액을 가진 경우가 많습니다.

Google AdInline article slot

이 방법은 유사-유사(Like-for-Like, LFL) 사용자—즉, 프로모션 전후 모두 활동한 사용자—에 적용됩니다. 신규 고객 유입의 영향을 제외할 수 있습니다.

계산 단계:

  • 모든 LFL 사용자: 전기 기간에서 프로모션 기간까지의 추세
  • LFL 프로모션 참여자: 동일한 추세
  • 두 추세의 차이는 프로모션 효과를 나타냅니다.

평균 주문 금액 예시로 설명:

Google AdInline article slot

| 기간 | 타겟 그룹 | 전체 사용자 |

|------------|------------|--------------|

| 프로모션 전 | ₩2,500 | ₩1,350 |

Google AdInline article slot

| 프로모션 중 | ₩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

Advertisement 728x90

다음 읽기