huny.log

기술 포스트 · 통계·ML

Propensity score matching — 무작위 배정이 안 되는 자리에서 인과 효과 추정

광고를 본 사람과 안 본 사람을 그냥 비교하면 자가 선택 편향이 큽니다. PSM은 두 그룹을 비슷한 특성으로 매칭해 비교가 가능한 짝을 만듭니다. 마케팅 자리에 적용하는 PSM 워크플로.

“광고 본 사람들의 구매율 8%, 안 본 사람들 구매율 3% — 광고가 5%p 끌어올렸다.” 이 단순 비교의 함정은 분명합니다. 광고를 본 사람들이 원래 더 관심 있었던 사람일 가능성이 큽니다(자가 선택 편향). 무작위 배정 lift 실험을 못 돌리는 자리에서 자주 마주칩니다. propensity score matching(PSM)은 이 편향을 줄여 인과 효과를 추정하는 표준 도구입니다.

마케터가 이 글을 읽어야 하는 이유: 광고 노출과 전환의 단순 비교는 ROAS 보고에 자주 들어가지만 인과 효과는 거의 항상 과대 추정됩니다. PSM의 직관과 한계를 알면, 회의에서 “이 숫자가 인과인가 상관인가”를 정직하게 분리할 수 있습니다.

노출 그룹과 비노출 그룹을 사용자 특성으로 매칭해 비슷한 짝을 만들고 전환율을 비교하는 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. balanceSMD, KS 검정
5. 효과ATT

4. 코드 한 묶음 — Python으로 PSM

이게 글에 박는 유일한 코드입니다.

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from 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.05
mask = distances.flatten() < caliper
matched_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% 이상의 효과가 자가 선택 편향이었음을 자주 확인합니다.

다음에 읽을 글

참고

통계·ML 카테고리의 다른 글

전체 보기 →