DEV Community

Cover image for Conformal Prediction — 광고 예측에 "90% 확실" 보증을 분포 가정 없이 붙이기
HyunSeok Jeong
HyunSeok Jeong

Posted on • Originally published at blog.trysitely.com

Conformal Prediction — 광고 예측에 "90% 확실" 보증을 분포 가정 없이 붙이기

광고 운영 시스템이 "이 소재의 CTR은 0.034"라고 알려주면 마케터는 그 한 숫자에 예산을 태웁니다. 그런데 같은 모델이 다음 날 "0.018"을 뱉으면, 어느 쪽이 진짜인지 어떻게 아나요. 점추정 하나만 가지고 의사결정 하기엔 모델 출력의 흔들림이 너무 큽니다. Conformal Prediction은 어떤 예측 모델 위에든 분포 가정 없이 "90% 확률로 이 구간 안에 있다"는 신뢰구간을 붙여주는 도구입니다. 베이지안과 무엇이 다른지, 마케팅에 어떻게 쓰는지 정리합니다.

1. 점추정의 함정 — 왜 한 숫자에 베팅하면 안 되나

마케팅 의사결정의 99%는 "예측 한 숫자"를 받아서 비교하는 일입니다.

  • 광고 입찰 시스템: "이 임프레션의 클릭 확률 0.034 → 입찰가 산정"
  • LTV 모델: "이 가입자의 12개월 LTV 12만원 → 광고 단가 한도"
  • 추천 시스템: "이 상품의 다음 주 매출 예상 850만원 → 재고 발주"

문제는 같은 모델이 같은 입력을 받아도 출력이 흔들린다는 점입니다. 점추정 0.034가 실제로는 [0.018, 0.062]의 범위 안 어딘가일 수 있습니다. 이 폭을 모르고 0.034 한 숫자로 입찰을 짜면, 운 나쁜 날엔 입찰을 너무 세게 부르고 운 좋은 날엔 기회를 놓칩니다.

이 폭을 알려주는 도구가 예측 신뢰구간(prediction interval)입니다. 베이지안 모델은 사후 분포에서 신뢰구간을 자연스럽게 뽑아주지만, 운영하는 모델 대부분(XGBoost·LightGBM·딥러닝)은 점추정만 뱉습니다. 이 모델들 위에 신뢰구간을 사후적으로 씌우는 가장 간단한 방법이 Conformal Prediction입니다.

점추정 위에 conformal 신뢰구간을 씌우는 직관 그림
*모델은 점추정만 뱉어도 된다. Conformal Prediction은 캘리브레이션 데이터로 *

📌 이 글에서 다루는 것

Conformal Prediction은 1990년대 Vovk·Gammerman·Shafer가 정리한 프레임워크지만, Angelopoulos·Bates(2021)의 "Gentle Introduction" 이후 ML 운영에 본격적으로 들어왔습니다. 핵심은 단 하나의 가정 — 데이터가 교환 가능(exchangeable)하다는 것. 정규성·등분산성 같은 가정은 일절 필요 없습니다. 마케팅 데이터처럼 분포가 길고 비정형인 곳에서 특히 강합니다.

2. Conformal의 직관 — "과거에 얼마나 빗나갔나"로 보증 구간 만들기

Conformal Prediction의 한 줄짜리 아이디어는 이것입니다.

캘리브레이션용 데이터에서 모델이 빗나간 정도(잔차)를 모아두면, 새 예측이 빗나갈 폭을 그 분포에서 잘라낼 수 있다.

조금 더 풀어 쓰면 다음과 같습니다.

  1. 학습 데이터 외에 캘리브레이션 데이터 1,000개를 따로 둔다(split conformal)
  2. 모델이 캘리브레이션 데이터를 예측한다 — 진짜 값과의 잔차 yiy^i|y_i - \hat{y}_i| 1,000개 수집
  3. 잔차의 90% 분위수 q0.9q_{0.9} 를 구한다
  4. 새 예측 y^new\hat{y}{\text{new}} 의 신뢰구간은 [y^newq0.9, y^new+q0.9][\hat{y}{\text{new}} - q_{0.9},\ \hat{y}{\text{new}} + q{0.9}]

핵심은 단순한 분위수입니다. 캘리브레이션에서 90% 잔차가 ±0.012\pm 0.012 안에 들어왔다면, 새 예측도 같은 분포에서 왔다는 가정 아래 90% 확률로 ±0.012\pm 0.012 안에 들어옵니다. 이걸 marginal coverage 보증이라고 부릅니다.

수식으로 적으면 다음과 같습니다.

Pr(ynew[y^newq1α, y^new+q1α])1α \Pr\bigl(\, y_{\text{new}} \in [\hat{y}{\text{new}} - q{1-\alpha},\ \hat{y}{\text{new}} + q{1-\alpha}] \,\bigr) \geq 1 - \alpha

α=0.1\alpha = 0.1 이면 90% coverage 보증입니다. 한 줄짜리 아이디어가 만들어내는 보증치고는 무겁습니다.

💡 모델은 무엇이든 좋다

Conformal의 가장 큰 매력은 모델 종류를 가리지 않는다는 점입니다. XGBoost·LightGBM·딥러닝·랜덤포레스트, 심지어 LLM의 다음 토큰 분포 위에도 씌울 수 있습니다. 학습이 끝난 모델에 캘리브레이션 데이터만 따로 빼두면 됩니다.

3. Split Conformal 실전 — 5줄 코드로 끝나는 보증

CTR 예측 모델 위에 신뢰구간을 씌우는 가장 단순한 방법, split conformal을 보겠습니다.


python
Enter fullscreen mode Exit fullscreen mode

Top comments (0)