Uplift 모델링 — "쿠폰 줘도 살 사람 vs 줘야 사는 사람" 가르기
리텐션·CRM 캠페인에서 가장 비싼 실수는 "어차피 살 사람한테 쿠폰 주는 것". Uplift 모델링은 캠페인이 정말 효과를 만든 사람만 골라냅니다. 4가지 페르소나와 T-Learner·X-Learner의 직관.
“쿠폰 캠페인 전환율이 18%, 비대상은 12%. 효과 +6%p 인정!” — 이 한 줄이 위험한 이유는, 그 18% 중 대부분이 어차피 샀을 사람이기 때문이에요. 쿠폰을 안 줘도 살 사람한테 쿠폰을 주는 건 마진을 그냥 깎는 행위입니다. 이 글은 “진짜 바뀐 사람”만 골라내는 uplift 모델링의 직관을 마케터 언어로 풀어봅니다.
4가지 페르소나 — 가장 중요한 그림
uplift 사고의 출발점은 이 2×2 표예요. “쿠폰 받았다 / 안 받았다” × “샀다 / 안 샀다”의 모든 조합:
| 쿠폰 받음 → 샀다 | 쿠폰 받음 → 안 샀다 | |
|---|---|---|
| 쿠폰 안 받음 → 샀다 | Sure Things (어차피 살 사람) | Lost Causes에 가까움 |
| 쿠폰 안 받음 → 안 샀다 | Persuadables 🎯 | Lost Causes (안 살 사람) |
여기서 빠진 한 칸: Do Not Disturb — 쿠폰을 주면 오히려 안 사는 역효과 그룹. 너무 자주 쿠폰을 받아 “이 브랜드 항상 할인하네” 인식이 생긴 사람들.
전통적인 “전환 가능성 높은 사람한테 보내기”(propensity 모델)는 Persuadables와 Sure Things를 구분하지 못해요. 둘 다 “전환 가능성 높음”으로 잡히기 때문이죠. Uplift는 이 둘을 구분합니다.
Uplift의 정의 — Treatment Effect
수식으로는 단순.
마케터 언어로: “그 사람이 쿠폰을 받았을 때의 구매 확률 - 안 받았을 때의 구매 확률”. 양수면 캠페인이 그 사람에게 효과가 있다는 뜻.
문제: 한 사람한테는 “받았다” 또는 “안 받았다” 한 가지 결과만 관측되지, 둘 다 관측 못 합니다(인과추론의 근본 문제, 다시 등장). 그래서 여러 모델 접근이 있어요.
T-Learner — 가장 단순한 시작
각 그룹에 모델 따로 학습.
from sklearn.ensemble import GradientBoostingClassifier
# 데이터: features X, treatment T (0 or 1), outcome y (0 or 1)treated_idx = (T == 1)control_idx = (T == 0)
# 두 모델 따로m_treated = GradientBoostingClassifier().fit(X[treated_idx], y[treated_idx])m_control = GradientBoostingClassifier().fit(X[control_idx], y[control_idx])
# 새 사람 x의 uplift 추정def uplift(x): p1 = m_treated.predict_proba(x)[:, 1] p0 = m_control.predict_proba(x)[:, 1] return p1 - p0장점: 단순, 빠름, 디버깅 쉬움.
단점: 두 모델이 따로라 데이터 적은 그룹의 분산이 큼. Treatment·Control 그룹 크기가 비슷해야 잘 됨.
X-Learner — Treatment 데이터 적을 때의 답
CRM 실무에선 보통 Treatment(쿠폰 받은 사람)가 Control보다 적어요. T-Learner는 이 불균형에 약합니다. X-Learner는 한 단계 더 나가요.
핵심 아이디어 4단계:
- T-Learner처럼 두 모델 학습 (treated용 / control용)
- Treatment 그룹 사람한테는 “실제 전환 - control 모델이 예측한 값”을 “가짜 효과(imputed effect)“로 라벨
- Control 그룹 사람한테는 “treated 모델 예측 - 실제 전환”을 가짜 효과로 라벨
- 이 가짜 효과를 회귀모델 두 개로 따로 학습 후, propensity score로 가중평균
이름이 X인 이유: 두 그룹의 정보를 cross로 활용하기 때문. 데이터 적은 쪽이 많은 쪽 모델의 예측을 받아 자기 데이터를 보완해요. T-Learner가 “두 모델을 분리”했다면, X-Learner는 “두 모델이 서로의 정보를 빌리는” 구조.
| Learner | 적합 상황 | 강점 | 약점 |
|---|---|---|---|
| S-Learner | 소규모, 빠른 베이스라인 | 가장 간단 | 효과 작으면 무시됨 |
| T-Learner | 그룹 균등 (50:50) | 디버깅 쉬움 | 불균등에 약함 |
| X-Learner | Treatment ≪ Control (CRM 표준) | 작은 그룹 보강 | 구현 복잡 |
| DR-Learner | 관찰 데이터 (RCT 아닌) | 가장 robust | 튜닝 어려움 |
| Causal Forest | 비선형 효과 | 자동 segment 발견 | 학습 느림 |
Qini 곡선 — Uplift 모델 평가의 표준
전통적 ML 평가(AUC, accuracy)는 uplift에 안 맞아요. 우리가 알고 싶은 건 “상위 N%만 골라 보냈을 때 얼마나 더 많은 전환을 만들었나”입니다. 이걸 시각화한 게 Qini 곡선.
핵심 수식:
- = 상위 명에 발송했을 때 그 안의 treated 그룹 전환 수
- = 같은 명 중 control 그룹의 전환 수 (treated 비율로 정규화)
- 차이가 크면 “이 모델이 진짜 효과 있는 사람을 잘 골라낸다”는 뜻
좋은 모델 패턴 예시:
| 발송 비율 | 누적 incremental 전환 | 한계 효과 |
|---|---|---|
| 상위 10% | +200 | 한 명당 매우 효율적 |
| 상위 20% | +280 | 효율 둔화 시작 |
| 상위 30% | +320 (정점) | 권장 타겟팅 컷 |
| 상위 50% | +300 | 약간 떨어짐 |
| 상위 60% | +280 | Do Not Disturb가 깎기 시작 |
| 100% (전수) | +200 | 사실상 랜덤 발송과 비슷 |
해석:
- 곡선이 랜덤 라인보다 위에 있을수록 모델이 좋다
- 곡선의 정점(상위 30%)이 권장 타겟팅 비율
- 정점 이후로는 더 보낼수록 “안 살 사람” + Do Not Disturb까지 끌어들이는 셈 → 효과 감소
실무 케이스 — 윈백 캠페인 예시
이탈 위험 고객 50,000명에게 “30일 안에 다시 오면 20% 쿠폰” 캠페인을 했다고 합시다.
시나리오 1 — 전통적 propensity 모델
“전환 가능성 상위 30%“에 발송. 결과:
- 발송 15,000명, 쿠폰 사용 1,200명
- 비교 control 5,000명 중 전환 280명
- “발송 그룹 전환율 8%, control 5.6% → 효과 +2.4%p”
- 그런데 발송 그룹의 전환자 1,200명 중 800명은 “어차피 사는 Sure Things”
→ 실제 incremental 전환 = 1,200 - 5.6% × 15,000 = 360. 쿠폰 비용 800명분이 낭비.
시나리오 2 — Uplift 모델
“uplift 점수 상위 20%“에 발송. 결과:
- 발송 10,000명, 쿠폰 사용 750명
- control 비교에서 incremental 약 580명
- 동일 예산으로 incremental +60% 향상
같은 캠페인에서 모델만 바꿨는데 incremental이 50~100% 올라가는 사례가 흔해요. CRM 팀의 가장 큰 ROI 개선 포인트.
운영 팁 — 마케터·CRM 팀이 자주 묻는 것
1) Treatment 데이터가 0이면 못 한다
uplift 모델은 “쿠폰 받은 사람 + 안 받은 사람”의 비교 데이터가 필수. 첫 캠페인은 어쨌든 무작위로 (또는 propensity 기반으로) 한 번 돌려야 학습 데이터가 생겨요. 이걸 “learning campaign”이라고 불러요.
2) Treatment / Control 비율
이상적으론 50:50이지만, 실무에선 90:10 정도가 흔함. T-Learner는 80:20 미만에서 흔들리고, X-Learner는 95:5까지도 견딤. Control 5% 이상은 항상 확보하세요.
3) Do Not Disturb 그룹은 진짜 있다
특히 자주 쿠폰을 받는 “VIP인 척 그러나 정상가 안 사는” 고객이 그 예. uplift가 음수로 나오면 “이 사람은 보내지 마라”라고 모델이 말하는 거예요.
4) Cold-start 문제
신규 가입자는 feature가 빈약해서 uplift 추정 분산이 큽니다. 처음 30~60일은 propensity 기반 + 무작위로 운영하다가, 행동 데이터 쌓이면 uplift로 전환.
마치며
CRM·리텐션 팀의 가장 근본적인 질문은 “누구한테 보낼까”인데, 그 답을 “전환 가능성 높은 사람”이 아니라 “우리 캠페인이 진짜 효과를 만들 사람”으로 바꾸는 게 uplift입니다. T-Learner나 X-Learner 한 번만 구현하면 같은 발송 비용으로 incremental이 50% 이상 올라가는 케이스가 흔해요. CRM 팀에서 가장 임팩트 큰 ML 프로젝트를 고르라면 단연 이거.
다음 글에서는 광고 크리에이티브의 “피로도(creative fatigue)“를 임베딩으로 미리 잡는 법을 다뤄볼게요.
참고
- Causal ML — Uber Engineering — T/X/S/DR-Learner 통합 라이브러리
- scikit-uplift — 파이썬 표준, Qini 곡선 시각화
- EconML — Microsoft — Causal Forest, DML 등 고급 모델
- The True Lift Model — Lo (2002) — uplift 페르소나의 원전
- Uplift Modeling for Multiple Treatments — Zhao et al. — 다중 처치(여러 쿠폰 종류) 확장
통계·ML 카테고리의 다른 글
전체 보기 →-
2026·05·10
마케팅 실험 플랫폼 설계 — 사내 A/B 시스템의 5가지 원칙
광고 플랫폼 자체 A/B로는 부족하고 외부 SaaS는 비쌉니다. 사내 마케팅 실험 플랫폼을 설계할 때 깔아야 할 split assignment·exposure log·SRM 검정·sequential safe·메타 표준 5가지 원칙.
-
2026·05·09
Bayesian A/B 테스트 심화 — prior 잡는 법과 HDI 해석
베이지안 A/B는 "p-value < 0.05"가 아니라 "B가 A보다 좋을 확률 0.92"를 줍니다. 그 확률이 정직하려면 prior를 잘 잡아야 하고, HDI를 잘못 읽으면 함정이 옵니다. 마케터 시선에서 prior·posterior·HDI 정리.
-
2026·05·09
Doubly robust estimation — IPW와 outcome 모델의 결합으로 인과 추정 안정화
PSM·IPW는 propensity 모델이 틀리면 무너지고, 회귀는 outcome 모델이 틀리면 무너집니다. doubly robust는 두 모델을 결합해 둘 중 하나만 맞으면 정직한 효과 추정. 마케팅 인과 분석의 안전판.
-
2026·05·09
Heterogeneous treatment effects — 평균 효과 너머의 개인별 효과
A/B 평균 효과 +5%p가 모든 사람에게 같지 않습니다. 일부에게는 +20%p, 일부에게는 -3%p. CATE·uplift forest로 효과의 이질성을 추정해 타겟 마케팅을 정밀화하는 흐름.