DEV Community

Cover image for CACE와 LATE — 쿠폰 받았지만 안 쓴 사람이 섞인 실험에서 진짜 효과 분리하기
HyunSeok Jeong
HyunSeok Jeong

Posted on • Originally published at blog.trysitely.com

CACE와 LATE — 쿠폰 받았지만 안 쓴 사람이 섞인 실험에서 진짜 효과 분리하기

"쿠폰을 1만 명에게 보냈는데 5,000명만 실제로 썼고, 그 5,000명 중 1,200명이 구매했어요. 캠페인 효과는 12%? 24%? 어느 쪽이 진짜?" 둘 다 다른 질문에 답합니다. ITT(Intent-to-Treat)는 의도된 처리의 평균 효과 — 보내려고 했던 사람 전체에서. CACE(Complier Average Causal Effect)·LATE는 실제로 처리를 받은 사람만의 효과 — instrumental variable로 분리. 부분 준수가 있는 마케팅 실험에서 두 도구가 답하는 질문을 정리합니다.

1. 부분 준수 — 마케팅 실험의 일반 자리

마케팅 실험에서 처리·대조 배정과 실제 처리 받음 사이에 갭이 있는 게 일반적입니다.

  • 쿠폰 보냄 → 받은 사람 일부만 사용
  • 푸시 발송 → 일부만 열람
  • 이메일 보냄 → 일부만 클릭·전환
  • 광고 노출 시도 → 일부만 실제 노출 (예산·매체 풀 제약)

배정과 실제 처리가 일치하지 않는 이 상황을 부분 준수(partial compliance) 또는 non-compliance라고 부릅니다. A/B 매뉴얼은 보통 이 갭을 무시하거나 ITT 분석으로 회피합니다.

문제는 두 분석이 다른 질문에 답한다는 점입니다.

  • ITT — 의도된 처리의 평균 효과: "쿠폰을 보내면 평균 매출이 어떻게 변하나"
  • per-protocol — 실제 처리 받은 사람의 결과 비교: 편향 위험 (선택 편의)
  • CACE/LATE — 진짜 쿠폰을 쓴 사람의 효과: instrumental variable로 보정

같은 실험에서 ITT 12%, CACE 24%가 동시에 나올 수 있습니다. 어느 쪽이 의사결정 단위로 적합한지가 운영의 핵심입니다.

ITT vs CACE/LATE — 부분 준수 환경의 두 가지 효과 측정
ITT는 배정 자체의 효과(보낸 모든 사람의 평균). CACE는 진짜 쓴 사람만의 효과. 의사결정 단위에 따라 다른 답이 적합하다.

📌 이 글에서 다루는 것

CACE/LATE는 economics·social science의 표준 도구로, Imbens & Angrist(1994·2009 노벨경제학상)가 정리한 instrumental variable 프레임의 핵심입니다. 마케팅 실험에서 부분 준수가 있는 자리에 그대로 적용됩니다. 이 글은 직관·공식·운영 적용을 마케터 시각으로 풀어냅니다.

2. ITT — 가장 단순, 가장 보수적

ITT의 한 줄 정의는 다음입니다.

처리·대조 배정 자체로 비교하라. 실제 처리 받았는지는 무시.

쿠폰을 1만 명에게 보냈고 매출이 600만원, 안 보낸 1만 명의 매출이 480만원이면 ITT는 (600 - 480) / 1만 = 12원/사람. 1만 명 중 5,000명만 실제로 썼다는 사실을 무시합니다.

ITT의 장점:

  • 무작위 배정의 보증을 그대로 유지 — 인과 효과의 비편향 추정
  • 단순 — t-test 한 번으로 끝
  • 의사결정 단위에 적합 — "쿠폰을 보낼까 말까"의 답

ITT의 단점:

  • 효과를 과소 추정 — 안 쓴 사람도 평균에 포함
  • "쿠폰의 진짜 효과"가 아니라 "쿠폰 보내기의 효과"

ITT는 캠페인 보낼지 말지의 의사결정 단위로는 가장 적합합니다. 하지만 "이 쿠폰을 받아 쓴 사람에게 얼마의 효과가 있었나"의 질문에는 답하지 않습니다.

3. CACE/LATE — IV로 진짜 효과 분리

부분 준수 환경의 사람을 4가지 페르소나로 나눠봅시다 (Angrist·Imbens 프레임).

페르소나 처리 배정 안 됨 처리 배정 됨 비중
Always-takers 받음 받음 πa\pi_a
Compliers 안 받음 받음 πc\pi_c
Defiers 받음 안 받음 πd\pi_d
Never-takers 안 받음 안 받음 πn\pi_n

쿠폰 캠페인이라면:

  • Always-takers — 어차피 쿠폰 다른 경로로 받아 쓰는 사람
  • Compliers — 보내준 쿠폰만 쓰는 사람 ← 이 그룹의 효과가 CACE/LATE
  • Defiers — 보내준 쿠폰은 안 쓰고 다른 경로로 받음 (드묾)
  • Never-takers — 쿠폰 자체를 안 쓰는 사람

monotonicity 가정(defier가 없다는 가정)에서 LATE는 다음 공식으로 추정됩니다.

LATE=ITT 효과Compliance 비율=E[YZ=1]E[YZ=0]E[DZ=1]E[DZ=0] \text{LATE} = \frac{\text{ITT 효과}}{\text{Compliance 비율}} = \frac{E[Y \mid Z=1] - E[Y \mid Z=0]}{E[D \mid Z=1] - E[D \mid Z=0]}

여기서 ZZ 는 처리 배정(보냈는지), DD 는 실제 처리(썼는지), YY 는 결과(매출). 분자는 ITT, 분모는 compliance gap. 둘을 나누면 complier의 진짜 효과가 나옵니다.

운영적으로는 단순 비례 관계입니다. Compliance 50%면 LATE는 ITT의 2배. ITT 12원/사람 + Compliance 50% → LATE 24원/사람. "진짜 쓴 사람만 보면 효과는 24원/사람" 이라는 정보가 됩니다.

4. 코드 한 묶음 — 2SLS 회귀

CACE/LATE는 instrumental variable 회귀의 한 줄 한 줄로 풉니다. 가장 표준은 Two-Stage Least Squares(2SLS)입니다.


python
Enter fullscreen mode Exit fullscreen mode

Top comments (0)