huny.log

기술 포스트 · 퍼포먼스 마케팅

Bayesian Optimization으로 광고 예산 분배 — 채널별 ROAS 곡선을 데이터로 찾아내기

채널 5개에 예산 1억을 어떻게 분배할까요. 채널별 ROAS는 예산 크기에 따라 달라집니다(saturation·diminishing returns). Bayesian Optimization은 적은 시도로 예산-ROAS 곡선을 추정해 최적 분배를 찾아냅니다. MMM·Marketing Mix와 결합하는 운영 도구.

채널 5개에 예산 1억을 어떻게 분배할까요. “ROAS 좋은 채널에 더 태우자”가 답인 것 같은데 채널별 ROAS는 예산 크기에 따라 달라집니다 — 적게 쓸 때는 좋다가, 많이 태우면 saturation이 옵니다. 정확한 예산-ROAS 곡선을 알면 최적 분배가 결정되지만, 곡선을 추정하려면 다양한 예산 시나리오의 데이터가 필요합니다. Bayesian Optimization은 적은 시도로 곡선을 추정하고 최적점을 찾는 도구. 마케터의 예산 의사결정에 들어가는 또 다른 도구입니다.

1. 예산 분배의 진짜 어려움 — saturation

광고 예산 분배의 직관은 단순해 보입니다. ROAS가 좋은 채널에 더 태우자.

문제는 ROAS가 예산에 의존한다는 점입니다.

  • Meta에 100만원 → ROAS 6
  • Meta에 500만원 → ROAS 4
  • Meta에 1,000만원 → ROAS 2.5

같은 채널이어도 예산이 늘면 ROAS가 떨어집니다. 매체 풀이 한정되어 있고, 좋은 임프레션부터 사용되기 때문. 이게 saturation·diminishing returns 입니다. huny.log의 MMM 입문 글에서 이 곡선을 다룹니다.

각 채널마다 saturation 곡선이 다릅니다. 운영 결정의 핵심은 다음입니다.

모든 채널의 marginal ROAS(추가 1원당 ROAS)가 같아질 때까지 예산을 옮긴다.

이 자리에 도달하면 더 옮길 이유가 없습니다 — 어디로 옮겨도 같은 한계 효과. 문제는 marginal ROAS 곡선을 모르면 이 자리를 찾을 수 없다는 점.

채널별 saturation 곡선 + Bayesian Optimization 탐색 다이어그램
채널별 예산-ROAS 곡선은 처음엔 가파르다가 점차 평탄해진다. Bayesian Optimization은 적은 시도로 이 곡선을 추정하고 최적 분배 자리를 찾는다.

2. Bayesian Optimization의 한 줄 직관

Bayesian Optimization(BayesOpt)의 한 줄 정의:

비싼 함수의 최적점을 적은 시도로 찾기.

광고 예산 시뮬레이션이 비쌉니다 — 한 시나리오를 1주 굴려야 진짜 ROAS를 알 수 있습니다. 100가지 시나리오를 다 시도할 수 없습니다. BayesOpt는 다음 두 도구로 가장 가치 있는 시나리오를 골라가며 곡선을 추정합니다.

  • Surrogate model — Gaussian Process(GP). 지금까지 본 데이터로 함수의 평균·분산 추정
  • Acquisition function — 다음 시도 후보를 고르는 룰. EI(Expected Improvement)·UCB·Thompson Sampling

흐름:

  1. 첫 5~10개 시도는 무작위로 데이터 수집
  2. GP로 surrogate function 적합 — 어디가 좋은지·어디가 불확실한지 추정
  3. acquisition function으로 다음 시도 후보 선택
  4. 그 시나리오 실험·데이터 수집
  5. GP 업데이트 → 반복

이 한 사이클로 보통 3050번 시도면 좋은 최적점을 찾습니다. 100가지 시나리오를 다 돌리는 것보다 1/21/3 비용.

3. acquisition function — 탐색·활용 균형

Cold start Thompson Sampling 글의 탐색·활용 프레임이 BayesOpt에도 그대로 적용됩니다. 다음 시도 후보를 고르는 acquisition function이 그 역할.

가장 흔한 3가지:

  • Expected Improvement (EI) — 지금까지 best보다 얼마나 더 좋아질 기대값. 가장 자주 쓰임
  • Upper Confidence Bound (UCB) — 점추정 + 불확실성 보너스. Thompson과 유사
  • Thompson Sampling — GP 사후 분포에서 한 번 샘플링한 함수의 최대점

여기서 는 지금까지 본 best. EI가 높은 자리를 다음 시도로 고릅니다 — best보다 좋아질 기대값이 큰 자리.

from skopt import gp_minimize
# objective: 광고 예산 시나리오 → -ROAS (최소화 문제로)
def objective(budget_split):
return -simulate_roas(budget_split)
result = gp_minimize(
objective,
dimensions=[(0, 1)] * 5, # 5개 채널, 비중 0~1
n_calls=30,
acq_func='EI',
)
print(result.x, -result.fun) # 최적 비중, 최대 ROAS

이게 본문에 박는 유일한 코드입니다. scikit-optimize 한 줄로 BayesOpt가 동작. 30번 시뮬레이션·실험으로 5채널의 최적 분배를 찾습니다.

4. MMM과의 결합 — surrogate를 MMM으로

위 코드는 simulate_roas() 함수가 필요합니다. 이걸 진짜 광고 시장에서 굴리면 한 시도가 1주·5,000만 원의 비용. BayesOpt도 30번이면 1.5억 원·30주.

대안은 MMM 모델로 simulate_roas를 대체하는 것입니다. MMM이 채널별 saturation 곡선·adstock·시즌을 모델링했다면, 그 위에서 BayesOpt를 돌려 최적 분배를 찾습니다. 진짜 시장 실험 0번으로 BayesOpt 30번 돌릴 수 있습니다.

운영 패턴:

  1. MMM으로 채널별 saturation 곡선 추정 (분기 1번)
  2. MMM 위에서 BayesOpt로 다음 분기 최적 예산 분배 탐색
  3. 실제 운영 = BayesOpt 결과 위주 + 일부 탐색 예산
  4. 다음 분기 데이터 → MMM 재학습 → 다시 BayesOpt
도구답하는 질문빈도
MMM채널별 곡선 형태분기 1번
BayesOpt곡선 위 최적점분기 1번
일별 운영점진적 조정매일

5. constraint와 robustness

운영의 BayesOpt는 단순 최적화가 아닙니다. 제약 조건과 강건성이 함께.

5-1. Constraint

  • 총 예산 — 5개 채널 합 = 1억
  • 최소 예산 — 각 채널 최소 1,000만원 이상 (브랜드 노출 보장)
  • 최대 예산 — 한 채널 4,000만원 이하 (의존도 제한)

constrained BayesOpt가 표준 (skopt·BoTorch에서 지원).

5-2. Robustness

같은 분배가 매주 정확히 같은 ROAS를 내지 않습니다. 분산이 큰 자리. 단순 best 분배가 시장 변동성에 흔들릴 수 있습니다.

robust BayesOpt는 평균 ROAS 대신 ROAS 분포의 conservative 분위(예: 25%분위)를 최적화. 더 안정적인 분배 — 평균 ROAS는 약간 낮지만 worst case가 좋아짐.

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

6-1. 분기 예산 재분배

분기 시작 시 BayesOpt + MMM으로 채널별 분배 재계산. 새 데이터(지난 분기)와 새 컨텍스트(시즌·매크로)에 맞춤. 사람이 손으로 정한 분배 대비 평균 ROAS 5~12%p 향상이 일반적.

6-2. 신규 채널 추가의 가치 평가

새 채널 도입 시 “이 채널에 얼마 태우면 어떤 ROAS”를 BayesOpt로 빠르게 탐색. 첫 4주에 BayesOpt가 곡선의 가파른 부분을 찾아내고, 5주차부터 그 자리 안정 운영.

6-3. 비용 충격 대응

원자재·매체 비용 급변으로 채널별 ROAS 분포가 변할 때, BayesOpt를 재시작해 새 곡선 빠르게 탐색. 사람의 직관으로 조정하는 것보다 빠르고 정확.

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

7-1. simulate_roas가 부정확

MMM 위에서 BayesOpt를 굴린다면 MMM의 정확도가 결과를 좌우. MMM 모델이 실제 곡선과 다르면 BayesOpt 최적점이 진짜 최적이 아님. MMM 검증을 먼저.

7-2. 차원이 너무 높음

채널 수 × 시간(주별)로 차원이 늘면 BayesOpt가 어려워집니다. 채널 5개 + 분기 단위면 5차원 — OK. 채널 20개 + 주별이면 80차원 — BayesOpt가 잘 안 듣음. 이런 자리는 hierarchical Bayesian이나 다른 도구가 필요.

7-3. acquisition function 선택을 안 함

EI 디폴트 그대로 쓰는 게 보통 OK이지만, 도메인에 따라 다른 선택이 더 적합할 수 있습니다. 시즌이 중요한 자리는 Thompson, 비용 제약이 빡빡한 자리는 EI-with-cost.

8. 마치며 — 마케터의 예산 도구상자

마케터의 예산 분배 도구상자에는 이제 여러 층이 있습니다.

  • 직관·경험 — 빠르고 단순. 큰 변화 시점에 첫 추정
  • MMM — 채널 곡선의 형태 모델링. 분기 단위 검증
  • BayesOpt — 곡선 위 최적점 탐색. MMM 위에서 운영
  • 실시간 입찰 자동화 — 일별 미세 조정. Google·Meta의 자동 입찰

네 층이 같이 가야 분기·일별·시즌별 결정이 정합성 있게 짜입니다. 한 층만 쓰면 다른 층이 가져갈 가치를 놓칩니다.

다음 글에서는 같은 도구상자의 또 다른 자리, incrementality test 설계를 다룹니다. geo·user holdout 결정 트리로 어떤 인과 도구를 어디 쓸지 정리.

참고

퍼포먼스 마케팅 카테고리의 다른 글

전체 보기 →