huny.log

기술 포스트 · 통계·ML

Bayesian A/B 테스트 심화 — prior 잡는 법과 HDI 해석

베이지안 A/B는 "p-value < 0.05"가 아니라 "B가 A보다 좋을 확률 0.92"를 줍니다. 그 확률이 정직하려면 prior를 잘 잡아야 하고, HDI를 잘못 읽으면 함정이 옵니다. 마케터 시선에서 prior·posterior·HDI 정리.

“B안이 A보다 좋을 확률 92%“라는 한 줄이 회의를 한 번에 정리합니다. 베이지안 A/B의 매력입니다. 그런데 그 92%라는 숫자가 정직하려면 prior를 어떻게 잡았는지, HDI를 어떻게 해석했는지가 함께 따라와야 합니다. 이 글은 마케터 시선에서 베이지안 A/B의 prior 설계, posterior 해석, HDI의 함정을 정리합니다.

마케터가 이 글을 읽어야 하는 이유: 빈도주의 A/B의 “p-value < 0.05”는 실무에서 늘 어색합니다. “그래서 B가 더 좋다는 거야 아니야?” 베이지안은 그 질문에 직접 답합니다. 다만 prior를 무심코 잡으면 답이 흔들리고, HDI를 단순 신뢰구간처럼 읽으면 의미가 깨집니다. 두 가지만 잘 잡으면 회의에서 의사결정 속도가 한 단계 올라갑니다.

prior 분포가 데이터를 만나 posterior 분포로 갱신되고, posterior 위에 HDI 95% 구간이 표시된 다이어그램
prior가 출발점, 데이터가 갱신, posterior가 결론. HDI는 그 결론을 한 줄로 요약하는 구간.

1. 빈도주의 A/B와 베이지안 A/B의 한 줄 차이

항목빈도주의베이지안
답하는 질문”이 차이가 우연일 확률은?""B가 A보다 좋을 확률은?”
출력p-value, 신뢰구간posterior 분포, HDI
해석”기각/채택” 이분법”어느 정도 더 좋은가” 연속적
표본 부족 자리검출력 부족prior가 정보 보강
회의 친화도낮음 (해석 어려움)높음 (확률로 직접 답)

베이지안의 직관: 사전 믿음(prior)을 데이터로 갱신해 사후 믿음(posterior)을 만든다. posterior가 의사결정의 입력이 됩니다.

2. Prior 잡는 법 — 세 가지 표준 패턴

prior는 “데이터를 보기 전에 우리가 알고 있던 것”입니다. 마케팅 자리에 자주 등장하는 세 패턴을 보겠습니다.

2-1. 무정보 prior — 정보 없을 때

Beta(1, 1) (= 균등분포)는 “0과 1 사이 어디든 가능성 동일”을 의미합니다. 정보가 전혀 없을 때 안전한 출발점.

장점: 사전 편향 없음. 단점: 표본 작을 때 posterior가 흔들리기 쉬움.

2-2. 약한 정보 prior — 일반 상식 반영

Beta(2, 8)은 “전환율이 낮은 자리(평균 약 20%)에 약한 사전 정보”. 마케터가 “이 캠페인은 전환율이 보통 15-25% 사이”라는 상식이 있을 때 그 상식을 prior에 반영.

이런 prior는 데이터가 적을 때도 합리적인 posterior를 만들고, 데이터가 많아지면 prior 영향이 사라져 데이터가 답을 결정합니다.

2-3. 강한 정보 prior — 과거 데이터 활용

같은 캠페인의 작년 분기 데이터가 있으면, 그 데이터를 prior로 사용. 작년 분기에 1000명 중 250명 전환이라면 Beta(250, 750)을 prior로 잡습니다. 이게 베이지안 A/B의 가장 강력한 자리 — 과거 데이터가 사전 정보로 그대로 들어옵니다.

이번 분기 작은 표본만으로도 posterior가 안정적으로 추정됩니다.

Prior 종류표현
무정보1, 1”아는 게 없음”
약한 정보2, 8”전환율 약 20% 가정”
강한 정보250, 750”작년 데이터로 신뢰”

3. Posterior — 데이터로 갱신된 사후 분포

prior에 데이터가 들어가 posterior가 됩니다. Beta-Binomial 결합의 표준 결과:

는 성공 수(전환), 는 실패 수(비전환). 1000명 노출 250명 전환이라면 . prior가 Beta(2, 8)이라면 posterior는 Beta(252, 758). 마케터 직관: 사전에 가정한 알파·베타에 실제 관측치를 더한다. 데이터가 많을수록 prior 영향은 사라지고 posterior가 데이터에 수렴.

A/B 두 변형 모두에 같은 절차를 적용해 두 posterior , 를 얻습니다. 비교는 두 분포의 비교입니다.

4. “B가 A보다 좋을 확률” 계산

두 posterior에서 직접 샘플링해 비교합니다.

P(B > A) = posterior 샘플 중 B 샘플이 A 샘플보다 큰 비율

10000개 샘플을 두 분포에서 각각 뽑아 짝지어 비교한 비율이 그 확률. 92%면 “B가 A보다 좋을 확률 92%“라고 회의에서 한 줄로 답할 수 있음.

이게 빈도주의 p-value가 못 답하는 자리입니다. p-value는 “차이가 우연일 확률”이지 “B가 A보다 좋을 확률”이 아닙니다. 둘은 다른 질문입니다.

5. 코드 한 묶음 — Beta-Binomial Bayesian A/B

이게 글에 박는 유일한 코드입니다.

import numpy as np
from scipy import stats
# 약한 정보 prior — 전환율 평균 약 20% 가정
prior_a, prior_b = 2, 8
# 관측 데이터
visitors_A, conversions_A = 1000, 240
visitors_B, conversions_B = 1000, 280
# Posterior (Beta-Binomial 결합)
posterior_A = stats.beta(prior_a + conversions_A,
prior_b + visitors_A - conversions_A)
posterior_B = stats.beta(prior_a + conversions_B,
prior_b + visitors_B - conversions_B)
# 10000개 샘플로 P(B > A) 계산
n = 10000
samples_A = posterior_A.rvs(n)
samples_B = posterior_B.rvs(n)
prob_B_better = (samples_B > samples_A).mean()
print(f"P(B > A) = {prob_B_better:.3f}") # 예: 0.927
# B의 95% HDI
hdi_lo, hdi_hi = posterior_B.ppf(0.025), posterior_B.ppf(0.975)
print(f"B의 95% HDI: ({hdi_lo:.3f}, {hdi_hi:.3f})") # 예: (0.253, 0.305)
# 상승 효과 lift = (B - A) / A
lift_samples = (samples_B - samples_A) / samples_A
print(f"기대 상승률: {lift_samples.mean()*100:.1f}%") # 예: 16.5%
print(f"상승률 95% HDI: ({np.percentile(lift_samples, 2.5)*100:.1f}%, "
f"{np.percentile(lift_samples, 97.5)*100:.1f}%)")

회의 한 줄 결론: “B가 A보다 좋을 확률 92.7%, 기대 상승률 16.5% (95% HDI 5.2%-29.1%)“.

6. HDI(Highest Density Interval)의 정확한 의미

HDI는 빈도주의의 신뢰구간(CI)과 비슷하게 보이지만 의미가 다릅니다.

6-1. HDI의 정의

95% HDI: posterior 분포에서 확률 밀도가 가장 높은 영역, 누적 95% 차지하는 구간.

직관: posterior가 가장 두꺼운 부분 중심으로 95%를 잡는다. 그 결과 좁고 정확한 구간.

6-2. 빈도주의 신뢰구간과의 차이

항목95% HDI95% 신뢰구간
해석”참값이 이 구간에 있을 확률 95%""여러 번 표본 추출 시 구간이 참값 포함하는 비율 95%“
회의 친화도직관적비직관적
분포 비대칭 시두꺼운 영역으로 이동양쪽 꼬리 균등

마케팅 회의에서 직관적으로 받아들이기 좋은 건 HDI. 빈도주의 신뢰구간을 “참값이 이 구간에 있을 확률 95%“로 해석하면 통계학적으로는 틀린 해석이지만, HDI는 그렇게 해석해도 맞음.

6-3. HDI가 0을 포함하는가

A/B 비교에서 가장 중요한 질문: B-A의 95% HDI가 0을 포함하는가.

  • 포함 안 함 (양수만) → B가 A보다 분명히 좋음
  • 포함 (양·음 양쪽) → 차이가 불확실
  • 음수만 → A가 더 좋음

이게 빈도주의의 “p < 0.05” 대체 룰. 단순하고 회의에서 바로 통하는 기준.

7. ROPE — 실무 의사결정의 또 한 줄

HDI만으로는 한 가지 함정이 있습니다. 큰 표본에서 “통계적 의미는 있지만 실무적 의미는 없는” 차이가 검출됩니다. 예: B가 A보다 0.1%p 높은데 표본이 매우 커서 P(B>A)가 99%.

ROPE(Region of Practical Equivalence)는 그 함정을 막는 도구.

ROPE: 실무적으로 무시할 만한 차이의 범위 (예: ±0.5%p). HDI 전체가 ROPE 안에 있으면 → “차이 없음” 결론 HDI 전체가 ROPE 밖에 있으면 → “유의미한 차이” HDI가 ROPE를 걸치면 → “결론 보류, 더 모음”

마케팅 자리: 전환율 차이의 ROPE를 ±1%p로 잡고, HDI가 그 범위 밖에 있어야 의미 있는 차이로 판단. 표본 폭증으로 작은 차이가 의미 있어 보이는 함정 방지.

결과HDI vs ROPE결론
HDI 전체 ROPE 안±0.3%p ⊂ ±1%p차이 없음
HDI 전체 ROPE 밖+5%p ~ +12%p > +1%p의미 있는 개선
HDI가 ROPE 걸침-0.5%p ~ +2%p결론 보류

8. 흔한 함정과 피하는 법

8-1. Prior 한 번도 점검 안 하기

기본 무정보 prior로 모든 실험을 돌리면 작은 표본에서 posterior가 이상한 자리에 갑니다. 분기에 한 번이라도 prior를 점검하고 약한 정보 prior로 업데이트.

8-2. P(B>A)만 보고 lift 안 봄

확률만 보면 차이의 크기를 모릅니다. P(B>A)=99%라도 기대 상승률이 0.1%면 운영적으로 의미 없음. 항상 함께 보고.

8-3. ROPE 없이 결론

큰 표본에서는 통계적·실무적 의미를 분리해야 합니다. ROPE 없이 결론 내면 표본 폭증으로 의미 없는 차이를 도입하게 됨.

8-4. 강한 prior로 데이터 누르기

작년 데이터를 너무 강하게 prior에 박으면 올해 데이터가 그 prior에 잘 못 박힙니다. prior에 들어가는 정보 양을 표본의 10-30% 수준으로 제한하는 게 일반 룰.

9. 마치며 — 회의 한 줄로 답하는 통계

베이지안 A/B의 가장 큰 가치는 회의에서 의사결정자가 듣고 싶은 형태로 답한다는 것입니다. “B가 A보다 좋을 확률 92.7%, 기대 상승률 16.5%, 95% HDI 5.2%-29.1%”. 이 한 줄이면 그 자리에서 결정할 수 있습니다. 다만 그 정직성이 prior와 HDI·ROPE 해석에 달려 있고, 이 두 가지를 분기에 한 번씩 점검하면 베이지안 A/B의 전 운영 사이클이 안정됩니다.

다음 분기에 한 번만 시도해 볼 만한 것은 가장 자주 돌리는 A/B 실험 자리에 약한 정보 prior와 ROPE를 도입해 빈도주의 결과와 베이지안 결과를 비교하는 흐름입니다. 같은 데이터에서 두 결과가 어떻게 다른지 직접 보면 다음 결정이 자연스러워집니다.

다음에 읽을 글

참고

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

전체 보기 →