DEV Community

Cover image for MMM 모델은 어떻게 검증하나 — backtest·holdout·robustness
HyunSeok Jeong
HyunSeok Jeong

Posted on • Originally published at blog.trysitely.com

MMM 모델은 어떻게 검증하나 — backtest·holdout·robustness

들어가며

MMM이 fit되어 채널 기여도와 한계 ROAS posterior가 손에 들어왔다고 끝이 아닙니다. "이 모델이 진짜 데이터를 잘 잡고 있는가, 미래에도 비슷하게 동작할 것인가"를 검증하는 단계가 남아 있고, 이 단계를 건너뛰면 분기 회의에서 자주 나오는 "MMM은 못 믿을 숫자"라는 인식이 강화됩니다. 이 글은 마케터·분석가가 분기마다 돌릴 만한 4가지 검증법과 실패 시 대응을 정리합니다.

MMM 모델 검증 흐름 — backtest와 holdout window 다이어그램
모델이 회의에 가기 전에 거쳐야 할 4개의 관문

왜 검증이 필요한가

in-sample fit의 함정

MMM 모델이 학습 데이터를 잘 따라간다는 건 R^2가 높다는 의미일 뿐, 미래 예측력이 좋다는 뜻은 아닙니다. 모델이 학습 구간의 노이즈까지 학습한 overfitting일 수 있고, 그러면 다음 분기 데이터로 가면 예측이 어긋납니다.

📌 이 글의 전제

MMM 모델 fit 단계까지는 끝났다고 가정합니다(bayesian-mmm-pymc-marketing 참고). posterior가 손에 있고, 회의 슬라이드를 만들기 전 단계입니다.

의사결정 신뢰의 근거

분기 회의에서 마케팅 헤드가 "이 채널 기여도 12%를 어떻게 믿어?"라고 물을 때, 검증 결과 슬라이드 한 장이 답입니다. backtest 정확도, holdout 예측 오차, prior 민감도, lift 비교 — 이 네 가지가 통과한 모델이라면 결정에 쓸 만합니다.

검증 1 — Posterior Predictive Check

in-sample 적합 점검

학습된 모델이 학습 데이터의 매출 시계열을 얼마나 잘 따라가는지 시각화합니다.

PyMC-Marketing은 mmm.plot_posterior_predictive()로 한 줄에 그릴 수 있습니다. 보는 것은 다음 4가지:

  1. 전체 트렌드 — 모델 추정선이 실제 매출선의 큰 흐름을 잡는가
  2. 큰 캠페인 시기 — 신제품 런칭·세일 등 특이 시점에서 추정선이 어떻게 움직이는가
  3. 잔차 패턴 — 잔차에 시계열 패턴(autocorrelation)이 남으면 모델 명세 오류
  4. 신뢰구간 — 90% 구간이 실제 매출의 90%를 포함하는가

잔차에 큰 캠페인 직후 양의 패턴이 남으면 adstock peak가 미뤄져야 한다는 신호이고, 시즌 패턴이 남으면 시즌 더미가 모델에 추가되어야 한다는 신호입니다.

검증 2 — Time-series Holdout

절차

학습 구간에서 마지막 4~8주를 떼어 holdout으로 두고, 나머지로 모델을 학습한 뒤 holdout 매출을 예측해 실제와 비교합니다.

단계 활동
1 데이터를 학습(95~100주)·holdout(4~8주)로 분할
2 학습 데이터로 모델 fit
3 holdout 광고비를 입력해 매출 예측
4 예측 vs 실제 매출 비교

MAPE·NRMSE — 평가 지표

MAPE=1ntyty^tyt \text{MAPE} = \frac{1}{n} \sum_t \left| \frac{y_t - \hat{y}_t}{y_t} \right|
NRMSE=1nt(yty^t)2yˉ \text{NRMSE} = \frac{\sqrt{\frac{1}{n} \sum_t (y_t - \hat{y}_t)^2}}{\bar{y}}

MAPE 10% 이내, NRMSE 15% 이내가 일반적인 안전 기준입니다. 그보다 크면 모델이 미래를 못 잡는다고 봐도 무방합니다.

💡 holdout window 선택 룰

분기 의사결정 모델이라면 holdout은 13주(한 분기) 정도가 적절합니다. 너무 짧으면(2~3주) 평가 잡음이 크고, 너무 길면(20주+) 학습 데이터가 부족해집니다.

검증 3 — Rolling Backtest

시간을 슬라이딩 윈도우로

한 번의 holdout만으로는 운이 좋아서 잘 맞은 건지 모릅니다. rolling backtest는 학습 구간을 시간상 슬라이딩해서 여러 번의 holdout을 평가합니다.

학습 윈도우 평가 윈도우
1~80주 81~92주
13~92주 93~104주
25~104주 105~116주 (현재 분기 시작 시점)

각 윈도우에서 MAPE를 계산하고 평균과 변동성을 봅니다. 모델이 안정적이라면 윈도우마다 비슷한 정확도를 보이고, 변동성이 크다면 모델이 시간에 따라 휘어지는 신호입니다.

모델 변동성 진단

MAPE 변동 해석 액션
< 3% 차이 안정 OK
3~7% 차이 시간 변동 시간 변동 변수 추가
> 7% 차이 불안정 모델 명세 재검토

검증 4 — Prior Sensitivity

절차

prior 평균을 ±30%로 흔들고 다시 fit해 채널 기여도가 얼마나 흔들리는지 측정합니다(mmm-prior-elicitation 참고).

변화율 해석 의사결정 신뢰
< 5% 데이터가 답을 결정 높음
5~15% prior와 데이터 균형 중간
> 15% prior가 답을 결정 낮음

데이터가 충분한 채널은 prior에 둔감하고, 데이터 부족 채널은 prior에 민감합니다. 이 정보가 의사결정 슬라이드에 함께 표시되면 회의에서 "이 채널은 데이터 기반, 저 채널은 가정 기반"이 투명해집니다.

검증 5 — Lift 결과와 비교

외부 ground truth

가장 강한 검증은 lift 실험 결과와의 비교입니다. lift는 인과 강도가 가장 높은 측정이므로, MMM이 그 값과 가까이 가면 모델이 진짜를 잡고 있다고 볼 수 있습니다.

lift 결과 MMM 결과 해석
Meta incremental ROAS 1.3 MMM Meta mROAS 1.4 (CI [1.1, 1.7]) 일치, 모델 신뢰
Meta incremental ROAS 1.3 MMM Meta mROAS 0.6 불일치, 모델 의심
Meta incremental ROAS 1.3 MMM Meta mROAS 2.1 불일치, 자기잠식 의심

불일치 시 우선 점검할 것: prior 잡았는지, adstock·saturation 형태 적절한지, 외생 변수 누락 없는지.

⚠️ 불일치를 무시하지 말 것

lift와 MMM이 30% 이상 어긋나면 그 채널의 의사결정은 일단 보류하고 원인 분석에 들어갑니다. 두 측정이 어긋난 채로 결정을 밀어붙이면 분기 결과 회수에서 큰 차이로 돌아옵니다.

검증 실패 시 대응 매뉴얼

Posterior predictive 잔차 큼

  • 큰 캠페인 시기 잔차 → adstock peak 조정 또는 외생 더미 추가
  • 시즌 패턴 잔차 → 시즌·요일 dummy 추가
  • 추세 잔차 → 시간 추세 변수 추가
  • random walk → OK, 무시 가능

Holdout MAPE 큼

  • 추세 학습 부족 → 시간 추세 prior 강화
  • 채널 mix 변경 → 학습 구간 단축, 최근 데이터 비중 강화
  • 외부 충격 → 충격 더미 추가 후 재학습

Prior 민감도 큼

  • 데이터 부족 채널 → prior stddev 확대해 데이터에 더 맡김
  • 다중공선성 → 채널 그룹화 또는 변동 큰 시기 데이터 우선

Lift 불일치

  • MMM > Lift → 자기잠식·외생 변수 누락 의심
  • MMM < Lift → spillover·잔향 누락 의심

분기 1회 검증 워크플로

단계 활동 시간
1 posterior predictive plot 점검 10분
2 13주 holdout MAPE 계산 30분
3 3-window rolling backtest 1시간
4 prior 민감도 ±30% 분석 30분
5 lift 결과와 채널별 비교 30분
6 검증 결과 슬라이드 1장 정리 30분

총 3시간이면 한 분기 의사결정에 쓸 모델 검증 슬라이드가 나옵니다. 회의실에 들어가는 자료의 질을 좌우합니다.

💡 검증 결과 슬라이드 디자인

한 페이지에 5개 박스로 — posterior predictive 그림 / holdout MAPE 숫자 / rolling backtest 변동성 / prior 민감도 표 / lift 비교 표. 모든 항목이 안전 기준 안인지 한눈에 보이게. {/* TODO_HUNY: 우리가 분기 회의에 검증 슬라이드를 띄우는지, 띄운다면 어느 항목이 가장 자주 빨간색으로 뜨는지 한 단락 */}

함정 모음

  • in-sample R^2 의존 — 학습 적합만 보고 미래 예측력으로 착각
  • 한 번의 holdout으로 결론 — 운에 좌우되는 평가
  • 검증 단계 생략 — 시간 부족으로 fit만 하고 회의에 가져감
  • lift 불일치 무시 — 두 측정 어긋남을 합리화
  • 모든 검증 통과 신화 — 모델은 항상 어딘가 깨져 있음. 의사결정 신뢰도 등급 매기는 게 현실적

마치며

MMM 검증은 fit보다 더 시간이 들 수 있지만, 검증을 거친 모델은 분기 회의에서 다른 무게를 갖습니다. posterior predictive·holdout·rolling backtest·prior 민감도·lift 비교 — 이 다섯 단계가 분기 워크플로에 정식으로 들어가면, 회의실에서 MMM 결과를 의사결정으로 끌고 가는 마찰이 크게 줄어듭니다.

다음 분기에 한 번만 시도해 볼 만한 것은 검증 결과를 5색 신호등(녹색·노란색·빨간색)으로 단순화해 의사결정 슬라이드 헤더에 띄우는 흐름입니다. 마케팅 헤드는 모델 디테일 대신 신호등을 보고 신뢰도를 빠르게 판단할 수 있습니다.

{/* TODO_HUNY: 우리 회사 MMM 검증에서 가장 자주 깨지는 항목과 그 원인 한 단락 */}

참고

Top comments (0)