Propensity score matching — 무작위 배정이 안 되는 자리에서 인과 효과 추정
광고를 본 사람과 안 본 사람을 그냥 비교하면 자가 선택 편향이 큽니다. PSM은 두 그룹을 비슷한 특성으로 매칭해 비교가 가능한 짝을 만듭니다. 마케팅 자리에 적용하는 PSM 워크플로.
“광고 본 사람들의 구매율 8%, 안 본 사람들 구매율 3% — 광고가 5%p 끌어올렸다.” 이 단순 비교의 함정은 분명합니다. 광고를 본 사람들이 원래 더 관심 있었던 사람일 가능성이 큽니다(자가 선택 편향). 무작위 배정 lift 실험을 못 돌리는 자리에서 자주 마주칩니다. propensity score matching(PSM)은 이 편향을 줄여 인과 효과를 추정하는 표준 도구입니다.
마케터가 이 글을 읽어야 하는 이유: 광고 노출과 전환의 단순 비교는 ROAS 보고에 자주 들어가지만 인과 효과는 거의 항상 과대 추정됩니다. PSM의 직관과 한계를 알면, 회의에서 “이 숫자가 인과인가 상관인가”를 정직하게 분리할 수 있습니다.
1. 자가 선택 편향과 PSM의 직관
광고 노출은 무작위가 아닙니다. 플랫폼이 “광고에 반응할 가능성이 높은 사람”에 더 많이 노출시킵니다. 그래서 노출 그룹은 비노출 그룹보다 원래 구매 의향이 높은 사람들로 구성됩니다.
노출 그룹의 구매율 - 비노출 그룹의 구매율 = 광고 효과 + 자가 선택 편향
PSM은 이 편향을 줄이는 한 가지 도구입니다.
노출 그룹의 각 사람마다 “비슷한 특성을 가진” 비노출 그룹 사람을 짝지어, 그 짝끼리만 비교한다.
비슷하다는 기준이 propensity score — “이 사람이 노출될 확률”의 추정치. 같은 propensity score를 가진 두 사람은 노출에 대한 사전 성향이 같으니 비교가 정직합니다.
2. Propensity score의 정의
특정 사람이 노출 그룹에 들어갈 확률을 그 사람의 특성으로 예측한 값.
는 사용자 특성(연령, 성별, 과거 구매, 페이지 방문 등). 로지스틱 회귀가 표준 추정 모델.
이 모델로 모든 사람의 propensity score를 계산. 그 값이 비슷한 노출·비노출 사람을 짝지어 비교.
3. PSM 워크플로 — 5단계
3-1. 1단계: 특성 변수 선택
노출과 결과(전환) 둘 다에 영향을 주는 변수들을 모음. 흔한 자리:
- 인구통계 — 연령, 성별, 지역
- 과거 행동 — 방문 빈도, 마지막 구매일, 평균 구매액
- 사용자 세그먼트 — 신규 vs 기존, 카테고리 선호
- 디바이스·매체 — 모바일 vs 데스크톱, 유입 채널
이 단계가 가장 중요합니다. 빠뜨린 confounder가 있으면 매칭의 효력이 약해집니다.
3-2. 2단계: propensity score 추정
로지스틱 회귀 또는 GBM으로 노출 여부를 예측하는 모델 학습. 모든 사람의 propensity score 계산.
3-3. 3단계: 매칭
각 노출 그룹 사람마다 propensity score가 비슷한 비노출 사람을 1명(또는 N명) 짝지음. 매칭 알고리즘:
- Nearest neighbor — 가장 가까운 1명 매칭
- Caliper — score 차이가 임계값 이내인 경우만 매칭
- Stratification — score 구간으로 나눠 구간별 비교
- Kernel matching — 가중치로 여러 사람을 결합
3-4. 4단계: balance 점검
매칭 후 두 그룹의 특성 분포가 정말 비슷해졌는지 확인. 표준화된 평균 차이(SMD) < 0.1이면 균형 OK.
3-5. 5단계: 효과 추정
매칭된 짝의 결과 차이의 평균이 추정 인과 효과(ATT, Average Treatment effect on the Treated).
| 단계 | 도구 |
|---|---|
| 1. 변수 선택 | 도메인 지식 + EDA |
| 2. propensity 추정 | 로지스틱 회귀 |
| 3. 매칭 | Nearest neighbor (1:1) |
| 4. balance | SMD, KS 검정 |
| 5. 효과 | ATT |
4. 코드 한 묶음 — Python으로 PSM
이게 글에 박는 유일한 코드입니다.
import numpy as npimport pandas as pdfrom sklearn.linear_model import LogisticRegressionfrom sklearn.neighbors import NearestNeighbors
# df: user_id, treated(1=노출, 0=비노출), 특성들 X1..X5, outcome(전환 0/1)features = ["age", "past_purchases", "visits_30d", "is_mobile", "segment"]X = df[features]T = df["treated"]Y = df["outcome"]
# 1. propensity score 추정ps_model = LogisticRegression(max_iter=1000)ps_model.fit(X, T)df["ps"] = ps_model.predict_proba(X)[:, 1]
# 2. nearest neighbor matching (caliper 0.05)treated = df[df["treated"] == 1].copy()control = df[df["treated"] == 0].copy()
nn = NearestNeighbors(n_neighbors=1)nn.fit(control[["ps"]])distances, indices = nn.kneighbors(treated[["ps"]])
# caliper로 너무 멀리 있는 매칭 제거caliper = 0.05mask = distances.flatten() < calipermatched_treated = treated.iloc[mask]matched_control = control.iloc[indices.flatten()[mask]]
# 3. balance 점검 (SMD)for f in features: mean_t, mean_c = matched_treated[f].mean(), matched_control[f].mean() pooled_std = np.sqrt((matched_treated[f].var() + matched_control[f].var()) / 2) smd = abs(mean_t - mean_c) / pooled_std print(f"{f}: SMD = {smd:.3f}") # 0.1 이하 권장
# 4. ATT 추정att = (matched_treated["outcome"].values - matched_control["outcome"].values).mean()print(f"ATT (광고 효과) = {att:.4f}") # 예: 0.018 = 1.8%p매칭 전 단순 비교가 5%p였다면, 매칭 후 ATT가 1.8%p로 줄어들 수 있음. 그 3.2%p가 자가 선택 편향이었다는 뜻.
5. PSM의 장점과 한계
5-1. 장점
- 무작위 배정이 안 되는 자리에 적용 가능
- 직관적 (비슷한 사람끼리 비교)
- 회귀보다 모델 가정이 적음
5-2. 한계
- 관측되지 않은 confounder는 못 잡음
- 매칭 알고리즘·caliper 선택의 임의성
- 매칭 후 표본이 줄어 검출력 감소
- 가짜 인과로 보이게 만드는 함정
6. 마케팅 자리에서 PSM이 자주 등장하는 자리
6-1. Walled garden 광고 lift 추정
Meta·Google이 자체 lift study를 제공하지만, 그 결과를 외부 데이터로 검증하고 싶을 때. 1st-party 데이터로 노출·비노출 구분 후 PSM.
6-2. CRM 캠페인 효과 측정
이메일·푸시 발송 대상 vs 비대상의 구매 차이. 발송 자체가 무작위가 아니라(VIP에게 더 자주) PSM으로 보정.
6-3. 신규 채널 런칭 효과
새 채널 광고를 본 사용자 vs 안 본 사용자의 구매 차이. 채널 도입 초기에는 lift study 안 돌아간 경우가 많아 PSM이 차선책.
6-4. 옴니채널 영향 측정
오프라인 매장 방문 + 온라인 광고 노출 결합 효과. 무작위 배정 어려움. PSM이 표준.
| 자리 | PSM 적합성 | 대안 |
|---|---|---|
| 무작위 lift study 가능 | 보조 검증 | lift study 우선 |
| 무작위 안 됨, 관측 풍부 | 적합 | PSM |
| 무작위 안 됨, 관측 부족 | 부적합 | DiD, IV |
| 시계열 자연실험 있음 | 보조 | DiD 우선 |
Geo-lift, DiD, PSM은 인과추론의 도구상자에 함께 들어가는 도구들입니다.
7. PSM과 DiD·Doubly Robust의 관계
7-1. PSM + DiD 결합
PSM으로 매칭한 짝 안에서 DiD(전후 차이의 차이) 적용. 시간 trend 변수를 추가로 통제. 가장 자주 사용되는 결합 패턴.
7-2. Doubly robust estimation
Doubly robust는 PSM의 IPW와 outcome 모델 두 모델을 결합. 둘 중 하나라도 맞으면 효과 추정이 정직. PSM의 강력한 일반화.
7-3. CATE — 이질적 효과
PSM은 평균 효과(ATT)를 추정. 효과가 사람마다 다르다면 CATE/uplift forest로 확장.
8. 분석 보고에 가져갈 한 줄 표
회의에서 PSM 결과를 제시할 때 표준 양식.
| 항목 | 값 |
|---|---|
| 노출 그룹 | 12,400명 |
| 비노출 그룹 | 80,200명 |
| 매칭 후 짝 | 11,800쌍 (caliper 0.05) |
| 단순 비교 효과 | +5.2%p |
| PSM 매칭 후 ATT | +1.8%p |
| 특성 SMD 평균 | 0.05 (균형 OK) |
| 95% CI (bootstrap) | (+0.9%p, +2.7%p) |
이 한 표가 “광고 효과 +5%p”라는 단순 비교 숫자가 사실은 +1.8%p임을 정직하게 보여줍니다.
9. 마치며 — 무작위 배정 못 하는 자리의 표준 도구
마케팅 운영의 많은 자리에서 무작위 배정이 어렵습니다. PSM은 그 자리에 인과 효과를 추정하는 표준 도구이고, 단순 비교의 자가 선택 편향을 크게 줄여줍니다. 다만 unmeasured confounder는 못 잡고, 매칭 알고리즘 선택의 임의성이 있어 lift study가 가능하면 lift study가 우선. PSM은 그 외 자리의 차선책으로 운영합니다.
다음 분기에 한 번만 시도해 볼 만한 것은 광고 노출과 비노출 사용자의 구매율 차이를 PSM으로 보정해 단순 비교 결과와 어떻게 다른지 비교하는 흐름입니다. 의외로 50% 이상의 효과가 자가 선택 편향이었음을 자주 확인합니다.
다음에 읽을 글
- Geo-lift 인과추론 — 지역 단위 무작위 lift study
- DiD 인과추론 — 시계열 자연실험
- Doubly robust estimation — PSM의 강력한 일반화
참고
- Rosenbaum & Rubin (1983), “Central role of the propensity score in observational studies”: https://www.jstor.org/stable/2335942
- Imbens & Rubin (2015), “Causal Inference for Statistics, Social, and Biomedical Sciences”: https://www.cambridge.org/core/books/causal-inference-for-statistics-social-and-biomedical-sciences/71126BE90C58F1A431FE9B2DD07938AB
- “MatchIt R package”: https://kosukeimai.github.io/MatchIt/
- “causalml Python”: https://causalml.readthedocs.io/
- King & Nielsen (2019), “Why propensity scores should not be used for matching”: https://gking.harvard.edu/publications/why-propensity-scores-should-not-be-used-formatching
통계·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로 효과의 이질성을 추정해 타겟 마케팅을 정밀화하는 흐름.