huny.log

기술 포스트 · 통계·ML

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

CTR 0.034, LTV 12만원. 점추정 한 숫자만 던져진 예측은 위험합니다. Conformal Prediction은 분포 가정 없이 "이 예측이 90% 확률로 맞는 구간"을 붙여줍니다. 마케팅 예산 배분·소재 선별·LTV 추정에 그대로 쓸 수 있는 distribution-free 신뢰구간.

광고 운영 시스템이 “이 소재의 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은 캘리브레이션 데이터로 '얼마나 자주 빗나갔는지'를 측정해, 새 예측 위에 보증 구간을 씌운다.

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

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

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

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

  1. 학습 데이터 외에 캘리브레이션 데이터 1,000개를 따로 둔다(split conformal)
  2. 모델이 캘리브레이션 데이터를 예측한다 — 진짜 값과의 잔차 1,000개 수집
  3. 잔차의 90% 분위수 를 구한다
  4. 새 예측 의 신뢰구간은

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

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

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

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

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

import numpy as np
# 모델은 이미 학습된 상태. y_cal_true·y_cal_pred는 캘리브레이션 데이터 결과
residuals = np.abs(y_cal_true - y_cal_pred)
q = np.quantile(residuals, 0.9)
intervals = [(p - q, p + q) for p in y_test_pred]

이게 끝입니다. 학습 코드 한 줄도 안 건드리고, 캘리브레이션용 데이터 1,000개와 4줄짜리 후처리만 추가하면 모든 예측에 90% 보증 구간이 붙습니다.

여기서 두 가지만 챙기면 운영에 그대로 쓸 수 있습니다.

  • 캘리브레이션 데이터는 학습 데이터와 겹치면 안 됩니다. 모델이 본 적 있는 데이터의 잔차는 인위적으로 작아져 보증이 깨집니다.
  • 캘리브레이션 크기는 보통 1,000개면 충분하고, 운영 메트릭이 흔들리면 5,000개까지. 너무 작으면 분위수가 노이즈를 탑니다.

4. 베이지안 신뢰구간과 무엇이 다른가

마케팅 분야에서 신뢰구간이라 하면 베이지안 사후 분포에서 뽑은 credible interval이 더 익숙할 수 있습니다. 두 도구의 차이는 한 줄로 요약됩니다.

항목베이지안 credible intervalConformal prediction interval
가정모델·우도·사전이 옳다데이터가 교환 가능하다
보증 방식사후 분포 자체가 답빈도주의적 marginal coverage
모델 종류베이지안 모델 (PyMC·Stan)아무 모델이나
비용MCMC·Variational Inference캘리브레이션 한 번 + 분위수
깨질 때사전·우도가 틀리면 같이 무너짐분포 변화(distribution shift)에 약함

베이지안은 모델 위에서 불확실성을 그리고, Conformal은 모델 바깥에서 불확실성을 씌웁니다. 마케팅 운영 환경에서 둘이 다 쓸 만한 자리가 있습니다.

  • 베이지안: 데이터가 적고(수십·수백 단위), 도메인 지식을 사전 분포로 넣고 싶을 때. 신규 채널 첫 달 LTV·전환율 추정.
  • Conformal: 데이터가 많고(수천·수만 단위), 이미 운영 중인 점추정 모델에 사후적으로 보증을 씌우고 싶을 때. CTR·전환·LTV 모델의 일상 운영.

5. 분포가 변하면? — 적응형 Conformal

위 식의 단 하나의 가정 — 데이터가 교환 가능하다 — 은 시계열·운영 환경에서는 깨지기 쉽습니다. 광고 시장은 매주 흔들리고, 시즌·경쟁사·매크로 환경이 모델 잔차의 분포를 통째로 바꿉니다.

이 깨짐을 그대로 두면 conformal 보증이 가짜가 됩니다. 90%라고 표시되지만 실제로는 70%만 맞을 수 있습니다. 해결은 적응형(adaptive) conformal입니다.

가장 단순한 적응형은 Gibbs & Candès(2021)의 ACI(Adaptive Conformal Inference)입니다. 매일 보증 수준 를 다음 규칙으로 갱신합니다.

여기서 는 어제의 신뢰구간, 은 어제 실제값이 구간 밖이면 1입니다. 어제 빗나갔으면 을 살짝 키워(=구간을 넓혀) 오늘 더 보수적으로 굴고, 어제 잘 맞췄으면 살짝 줄여 좁힙니다. 이 단순한 규칙만으로도 분포 변화 환경에서 장기 평균 coverage를 목표치 로 수렴시킬 수 있습니다.

마케팅 시계열에서 ACI가 빛나는 자리는 다음과 같습니다.

  • 일별 CTR 예측 — 트래픽 구성·소재 풀이 매일 바뀜
  • LTV 모델 운영 — 코호트별 분포가 시즌·신규 채널로 흔들림
  • 예산 배분 일일 갱신 — 점추정의 신뢰성을 매일 측정

6. 마케팅 실무 케이스 3개

6-1. CTR 예측에 신뢰구간을 씌워 입찰가 결정

광고 입찰 시스템이 점추정 CTR 0.034를 줄 때, conformal 90% 구간이 [0.018, 0.062]라면 입찰가를 점추정으로 계산하지 말고 보수적인 하한 0.018로 계산할 수 있습니다. 변동성이 큰 임프레션에는 입찰가를 낮게, 변동성이 작은 임프레션에는 점추정 그대로. 단순한 룰만으로도 ROAS의 분산이 줄어듭니다.

6-2. LTV 모델 신뢰구간으로 광고 단가 한도 산정

신규 가입자의 12개월 LTV 점추정 12만원만 가지고 광고 단가 한도를 정하면, 모델이 과대 추정한 코호트에 너무 비싼 가격으로 광고를 사들이게 됩니다. Conformal 90% 하한 7만원을 단가 한도의 기준으로 두면, 모델이 흔들려도 손실 한도가 통제됩니다. “운 좋게 LTV 18만원짜리 코호트가 떴다”는 사후 검증으로 점진적으로 한도를 풀어가면 됩니다.

6-3. 캠페인 일일 매출 예측 — 재고·OOH 발주 의사결정

다음 주 매출 850만원 예측 위에 conformal 80% 구간이 [620, 1080]이라면, 재고·OOH 발주는 점추정이 아니라 하한 620 근처에서 보수적으로 가는 게 합리적입니다. 빗나가면 점추정 기준으로 결정한 의사결정의 손실이 훨씬 큽니다. 신뢰구간이 의사결정의 실수를 줄이는 자리는 항상 비대칭 손실이 있는 곳입니다.

7. Conformal이 깨질 때 — 흔한 함정 3가지

7-1. 캘리브레이션 데이터가 학습 데이터와 겹친다

모델이 본 데이터의 잔차는 인위적으로 작아져 90% 보증이 50%가 됩니다. 가장 흔한 실수입니다. 캘리브레이션은 반드시 학습에서 분리된, 모델이 한 번도 본 적 없는 데이터여야 합니다.

7-2. 분포가 급변했는데 정적 conformal을 쓰고 있다

iOS 14.5 같은 정책 충격이 오면 잔차 분포 자체가 통째로 바뀝니다. 정적 conformal은 옛 잔차를 보고 있어 보증이 그대로 깨집니다. ACI 같은 적응형으로 갈아타거나, 캘리브레이션 데이터를 짧은 윈도(예: 최근 4주)로 굴려야 합니다.

7-3. Marginal coverage와 conditional coverage를 혼동한다

90% 보증은 전체 평균 수준입니다. 특정 세그먼트(예: iOS 신규 유저)에서는 70%만 맞을 수 있습니다. 세그먼트별 보증이 필요하면 그룹별로 따로 캘리브레이션을 돌리거나(group-conditional conformal), Mondrian conformal 같은 변형으로 가야 합니다.

8. 마치며 — “점추정 한 숫자에 베팅하지 말라”는 한 문장

Conformal Prediction이 마케팅에 주는 가치는 정교한 수식이 아니라 한 줄의 운영 원칙입니다.

점추정 한 숫자에 베팅하지 말고, 보증 구간으로 의사결정을 감싸라.

운영 중인 모델 위에 4줄짜리 후처리만 얹으면 되고, 모델을 바꿀 필요도 없습니다. 베이지안과 달리 사전 분포·우도 가정이 필요 없고, 모델 종류를 가리지 않습니다. 마케팅 데이터처럼 분포가 길고 비정형이며 매주 흔들리는 환경에서, distribution-free 보증의 가치는 점점 커집니다.

다음 글에서는 마케터가 가장 많이 보는 한 숫자, LTV의 운영 모델로 BG/NBD를 다룹니다. Conformal이 “예측에 보증을 붙이는 도구”였다면, BG/NBD는 “예측 자체를 만드는 모델”입니다. 두 글을 합치면 LTV 점추정 + 보증 구간이 한 묶음으로 완성됩니다.

참고

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

전체 보기 →