DEV Community

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

Posted on • Originally published at blog.trysitely.com

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

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

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

노출 그룹과 비노출 그룹을 사용자 특성으로 매칭해 비슷한 짝을 만들고 전환율을 비교하는 PSM 다이어그램
비슷한 특성을 가진 사람끼리 짝짓고 그 짝의 행동 차이로 인과 효과를 본다.

1. 자가 선택 편향과 PSM의 직관

광고 노출은 무작위가 아닙니다. 플랫폼이 "광고에 반응할 가능성이 높은 사람"에 더 많이 노출시킵니다. 그래서 노출 그룹은 비노출 그룹보다 원래 구매 의향이 높은 사람들로 구성됩니다.

노출 그룹의 구매율 - 비노출 그룹의 구매율 = 광고 효과 + 자가 선택 편향

PSM은 이 편향을 줄이는 한 가지 도구입니다.

노출 그룹의 각 사람마다 "비슷한 특성을 가진" 비노출 그룹 사람을 짝지어, 그 짝끼리만 비교한다.

비슷하다는 기준이 propensity score — "이 사람이 노출될 확률"의 추정치. 같은 propensity score를 가진 두 사람은 노출에 대한 사전 성향이 같으니 비교가 정직합니다.

📌 이 글의 전제

독자가 A/B 테스트·인과추론이라는 단어를 일상으로 쓰고, 회귀·로지스틱이라는 단어 정도는 들어봤다고 가정합니다. 코드를 직접 짠 적은 없어도 됩니다.

2. Propensity score의 정의

특정 사람이 노출 그룹에 들어갈 확률을 그 사람의 특성으로 예측한 값.

p(X)=Pr(노출=1X) p(X) = \Pr(\text{노출} = 1 \mid X)

XX 는 사용자 특성(연령, 성별, 과거 구매, 페이지 방문 등). 로지스틱 회귀가 표준 추정 모델.

p(X)=11+exp(β0β1X1...βkXk) p(X) = \frac{1}{1 + \exp(-\beta_0 - \beta_1 X_1 - ... - \beta_k X_k)}

이 모델로 모든 사람의 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).

ATT=1NTi:Ti=1[YiYmatched(i)] \text{ATT} = \frac{1}{N_T} \sum_{i: T_i=1} [Y_i - Y_{\text{matched}(i)}]
단계 도구
1. 변수 선택 도메인 지식 + EDA
2. propensity 추정 로지스틱 회귀
3. 매칭 Nearest neighbor (1:1)
4. balance SMD, KS 검정
5. 효과 ATT

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

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


python
Enter fullscreen mode Exit fullscreen mode

Top comments (0)