B가 이길 확률 95%는 어디서 나온 숫자일까?

베이지안으로 읽는 A/B

게시일
2026.10.20
태그
베이지안방향 확률A/B 테스트

같은 데이터에서 p값은 0.088이 나오고 B가 이길 확률은 95.6%가 나옵니다. 둘은 모순이 아니라 다른 질문의 답이고, 사전분포를 바꾸면 95.6%는 71.2%까지 내려갑니다.

들어가며

첫 칼럼의 버튼 실험으로 돌아가 보겠습니다. 각 그룹 1,000명, A안 전환율 5.0%(50명), B안 6.8%(68명). 두 비율 z검정의 양측 p값은 0.088이었고, 결론은 이 데이터로는 우연과 구별하지 못했다였습니다.

그런데 요즘 실험 도구 화면에는 다른 숫자가 같이 뜹니다. B가 이길 확률 95.6%. 같은 데이터인데 한쪽은 판단 보류이고 다른 쪽은 거의 확실해 보입니다.

이번 글에서는 이 확률이 어떻게 계산되는지, 왜 95.6%라는 값이 나오는지, 그리고 결정에 쓸 때 무엇을 미리 정해야 하는지를 보겠습니다.

두 숫자는 다른 질문에 답합니다

p값과 방향 확률은 세로선(∣) 앞뒤가 바뀐 확률입니다.

식질문이 실험에서
p값P(관측 결과 ∣ 두 안이 같음)두 안이 같다면, 50명 대 68명만큼 또는 그보다 큰 차이가 나올 확률0.088 (양측)
방향 확률P(B가 더 좋음 ∣ 관측 결과)50명 대 68명이라는 결과를 보고 난 뒤, B가 더 좋을 확률95.6%

그림 1. 같은 데이터, 다른 질문. 설명을 위해 만든 가상 예시입니다.

p값은 차이가 없다는 가정에서 출발해 데이터가 얼마나 어색한지를 잽니다. 방향 확률은 반대로 데이터에서 출발해 B가 더 좋을 확률을 바로 말합니다. 후자가 우리가 실제로 묻고 싶은 질문에 가깝습니다.

다만 그 답을 내려면 데이터 말고 하나가 더 필요합니다. 데이터를 보기 전에 전환율이 어느 정도일 거라고 믿었는지, 즉 사전분포입니다.

방향 확률은 우리가 묻고 싶은 질문의 답이지만, 그 답은 데이터와 사전 믿음을 합쳐서 나옵니다.

방향 확률은 이렇게 계산합니다

전환율 같은 비율에는 베타분포를 씁니다. 아무 정보가 없다는 뜻으로 Beta(1, 1), 즉 0%부터 100%까지 모든 전환율이 똑같이 그럴듯하다는 사전분포에서 시작하겠습니다.

데이터가 들어오면 사전분포는 사후분포로 바뀌는데, 베타분포에서는 성공 수와 실패 수를 더하는 것으로 끝납니다. A안은 Beta(1 + 50, 1 + 950), B안은 Beta(1 + 68, 1 + 932)입니다.

그다음은 두 분포에서 전환율을 20만 번씩 뽑아 B가 A보다 큰 비율을 세는 것입니다.

import numpy as np

rng = np.random.default_rng(seed=2026)
a = rng.beta(1 + 50, 1 + 950, 200_000)    # A안: 1,000명 중 50명 전환, 사전분포 Beta(1,1)
b = rng.beta(1 + 68, 1 + 932, 200_000)    # B안: 1,000명 중 68명 전환
lift = (b - a) / a

print(f"B가 A보다 좋을 확률      : {(b > a).mean()*100:.1f}%")
print(f"상대 개선의 기댓값        : {lift.mean()*100:+.1f}%  (95% 구간 {np.percentile(lift, 2.5)*100:+.1f}% ~ {np.percentile(lift, 97.5)*100:+.1f}%)")
print(f"B를 택했을 때 기대 손실   : {np.maximum(a - b, 0).mean()*100:.3f}%p")
# B가 A보다 좋을 확률      : 95.6%
# 상대 개선의 기댓값        : +37.9%  (95% 구간 -4.5% ~ +93.5%)
# B를 택했을 때 기대 손실   : 0.019%p
A안 (점선) B안 (실선) 3% 4% 5% 6% 7% 8% 9% 10% 전환율의 사후분포. 가로축은 전환율, 세로축은 그럴듯한 정도
그림 2. 데이터를 반영한 뒤 두 안의 전환율이 어디쯤 있을지에 대한 분포. B안 곡선이 오른쪽에 있지만 두 곡선은 상당히 겹칩니다. 설명을 위해 만든 가상 예시입니다.

B가 A보다 좋을 확률은 95.6%입니다. 그런데 같은 출력의 둘째 줄에 있는 상대 개선의 95% 구간은 −4.5%에서 +93.5%까지입니다. B가 조금 나쁠 수도 있고 두 배 가까이 좋을 수도 있다는 뜻입니다. 방향은 꽤 확실하지만 크기는 거의 모르는 상태입니다.

95.6%라는 숫자만 보면 이 폭이 보이지 않습니다.

방향 확률이 높다는 것은 B가 좋다는 뜻이지, 얼마나 좋은지를 안다는 뜻이 아닙니다.

95.6%는 어디서 왔나

같은 데이터의 단측 p값은 0.044입니다. 1에서 빼면 0.956입니다. 우연의 일치가 아닙니다. 아무 정보가 없는 평평한 사전분포에서 출발하면 방향 확률은 단측 p값을 1에서 뺀 값과 거의 같아집니다.

도구가 보여 주는 95.6%는 p값 0.088과 다른 데이터에서 나온 숫자가 아니라, 같은 데이터를 다른 방향에서 읽은 숫자입니다.

그룹당 인원 (비율은 동일)양측 p값B가 이길 확률
1,000명0.08895.6%
3,000명0.00399.9%
10,000명<0.001100.0%

그림 3. 전환율은 5.0%와 6.8%로 고정하고 인원만 늘렸을 때. 두 숫자는 같은 방향으로 함께 움직입니다. 평평한 사전분포 기준입니다.

그래서 p값이 0.05를 넘는 실험을 방향 확률 95%로 채택한다면, 다른 증거를 찾은 것이 아닙니다. 기준을 단측 0.05로 바꾼 것입니다. 바꾸는 것 자체는 선택할 수 있지만, 결과를 본 뒤에 바꾸면 결과에 맞춰 기준을 고르는 일이 되고, 그러면 어떤 기준도 의미가 없습니다.

평평한 사전분포의 방향 확률은 새 증거가 아니라 단측 p값의 다른 표현입니다.

사전분포가 답을 바꿉니다

방향 확률이 p값과 실제로 달라지는 지점은 사전분포입니다. 이 서비스의 전환율이 오랫동안 5% 근처였다는 걸 알고 있다면, 그 지식을 사전분포에 넣을 수 있습니다. 과거 데이터를 몇 명 분량으로 믿느냐에 따라 결과가 이렇게 달라집니다.

사전분포뜻B가 이길 확률기대 개선
Beta(1, 1)아무 정보 없음95.6%+37.9%
Beta(5, 95)전환율 5%를 100명 분량만큼 믿음95.0%+35.1%
Beta(50, 950)전환율 5%를 1,000명 분량만큼 믿음89.5%+19.1%
Beta(500, 9,500)전환율 5%를 10,000명 분량만큼 믿음71.2%+3.5%

그림 4. 같은 데이터(각 1,000명)에 사전분포만 바꿨을 때. 설명을 위해 만든 가상 예시입니다.

표의 3행처럼 과거 1,000명 분량의 경험을 반영하면 방향 확률은 89.5%로 내려가고 기대 개선은 +19.1%로 줄어듭니다. 1,000명짜리 실험이 보여 준 +36%는 과거 경험에 비춰 보면 과하다는 판단이 숫자에 들어간 것입니다.

4행처럼 과거를 10,000명 분량으로 믿으면 이번 실험은 거의 영향을 주지 못합니다.

어느 줄이 맞는지는 통계가 정해 주지 않습니다. 실험 도구는 보통 첫 줄이나 그 근처를 기본값으로 쓰고, 그 설정은 화면에 잘 보이지 않습니다. 같은 데이터로 도구마다 다른 확률이 나오는 이유입니다.

도구가 보여 주는 확률 뒤에는 보이지 않는 사전분포가 있고, 그 설정이 95.6%와 71.2%의 차이를 만듭니다.

실제 데이터에서는 어떻게 보이나

가상 예시 대신 공개 데이터로 같은 계산을 해 보겠습니다. Kaggle에 CC0으로 공개된 마케팅 A/B 테스트 데이터입니다. 광고를 본 그룹 564,577명과 공익광고를 본 대조군 23,524명의 구매 전환율이 들어 있습니다.

전체로 계산하면 2.555% 대 1.785%, 양측 p값은 10−13 수준이고 방향 확률은 사전분포와 무관하게 100%입니다. 차이가 너무 분명해서 계산 방식의 차이가 드러나지 않습니다.

그래서 두 그룹에서 2,000명씩 무작위로 뽑아 작은 실험처럼 만들었습니다. 대조군은 2,000명 중 40명(2.00%), 광고 그룹은 2,000명 중 64명(3.20%)이 전환했습니다. 전체 데이터는 답지로 남겨 둡니다.

계산 방식 (각 2,000명)결과상대 개선 (광고 − 대조군)
두 비율 z검정양측 p = 0.017, 단측 p = 0.009+60.0% (+1.20%p)
방향 확률, 사전분포 Beta(1, 1)광고 그룹이 높을 확률 99.2%+62.4% (+8.7% ~ +136.0%)
방향 확률, 사전분포 1,000명 분량 (2.5%)97.6%+38.9%
방향 확률, 사전분포 10,000명 분량 (2.5%)83.8%+8.6%
답지: 전체 588,101명100.0%+43.1% (+30.0% ~ +57.5%)

그림 5. 같은 4,000명의 부분표본을 네 가지 방식으로 읽은 결과와 전체 데이터의 답. 사전분포 중심 2.5%는 이 서비스의 과거 전환율에 해당하는 값(전체 합동 전환율)입니다. 출처는 Kaggle의 Marketing A/B Testing(CC0)이고 집계는 이 글에서 직접 했습니다.

가상 예시의 결론이 그대로 나타납니다. 평평한 사전분포의 방향 확률 99.2%는 단측 p값을 1에서 뺀 0.991과 같습니다. 그 99.2% 뒤의 상대 개선 구간은 +8.7%에서 +136.0%까지라 크기는 거의 모르는 상태입니다.

답지와 비교하면 하나가 더 보입니다. 평평한 사전분포의 기대 개선 +62.4%는 실제 +43.1%보다 크게 부풀려졌고, 과거 전환율을 1,000명 분량으로 반영한 +38.9%가 답에 가장 가깝습니다. 반대로 10,000명 분량은 +8.6%로 지나치게 눌렀습니다.

사전분포는 쓰지 않으면 작은 표본의 출렁임을 그대로 믿게 되고, 너무 세게 쓰면 새 데이터를 무시하게 됩니다.

실제 데이터에서도 방향 확률은 단측 p값의 다른 표현이고, 사전분포는 적당히 쓰면 답에 가까워지고 세게 쓰면 답에서 멀어집니다.

결정에 쓰려면 미리 정할 것

방향 확률 하나로 결정하기보다 기대 손실을 함께 봅니다. B를 택했는데 사실 A가 더 좋았을 때 잃는 전환율의 기댓값입니다. 이 실험에서는 B를 택했을 때 기대 손실이 0.019%p, A를 유지했을 때 기대 손실이 1.817%p입니다.

틀렸을 때 잃는 것이 B 쪽이 약 95배 작습니다. 되돌리기 쉬운 결정이라면 이 숫자만으로 B를 택할 수 있습니다.

결정 규칙이 실험에서미리 정할 것
양측 p < 0.050.088, 보류유의수준, 표본 수
B가 이길 확률 > 95%95.6%, 채택사전분포, 기준 확률
기대 손실 < 허용선0.019%p, 허용선이 0.05%p라면 채택사전분포, 허용선

그림 6. 세 가지 결정 규칙. 어느 것을 쓰든 결과를 보기 전에 정해야 합니다.

세 규칙 모두 쓸 수 있고, 같은 데이터에서 결론이 갈릴 수도 있습니다. 문제는 규칙이 아니라 순서입니다. 결과를 보고 나서 유리한 규칙을 고르면 어떤 규칙도 의미가 없습니다.

또 하나, 베이지안 방법은 결과를 매일 들여다봐도 괜찮다는 말이 있는데 조건이 붙습니다. 사전분포가 실제 효과 분포를 잘 반영할 때만 그렇고, 평평한 사전분포로 매일 확인하며 멈추면 p값과 같은 문제가 생깁니다[2].

방향 확률과 사후분포가 주는 진짜 이점은 따로 있습니다. 효과의 크기와 불확실성을 한 분포로 보여 주고, 기대 손실처럼 결정에 바로 쓰이는 양을 계산할 수 있다는 점입니다[1]. 95.6%라는 숫자 하나로 줄이면 그 이점이 사라집니다.

결정 규칙은 p값이든 방향 확률이든 기대 손실이든 쓸 수 있지만, 셋 다 결과를 보기 전에 정했을 때만 규칙입니다.

나가며

  1. p값 0.088과 B가 이길 확률 95.6%는 같은 데이터의 다른 질문입니다. 평평한 사전분포에서 방향 확률은 단측 p값을 1에서 뺀 값과 거의 같습니다.
  2. 방향 확률은 사전분포에 따라 달라집니다. 같은 데이터에서 과거 전환율을 1,000명 분량만큼 믿으면 89.5%, 10,000명 분량이면 71.2%입니다. 도구의 기본 설정이 어느 줄에 해당하는지 확인해야 합니다.
  3. 결정에는 방향 확률보다 기대 손실이 쓸모 있습니다. 이 실험에서 B를 택했을 때 기대 손실은 0.019%p였습니다. 어느 규칙이든 결과를 보기 전에 정합니다.

참고

  1. Kruschke, J. K. (2013). Bayesian estimation supersedes the t test. Journal of Experimental Psychology: General, 142(2), 573-603. https://doi.org/10.1037/a0029146
  2. Deng, A., Lu, J., & Chen, S. (2016). Continuous monitoring of A/B tests without pain: Optional stopping in Bayesian testing. 2016 IEEE International Conference on Data Science and Advanced Analytics (DSAA), 243-252. https://doi.org/10.1109/DSAA.2016.33

본문의 모든 수치는 설명을 위해 만든 가상 예시를 직접 계산한 값입니다. 데이터는 첫 칼럼과 같은 각 그룹 1,000명, 전환 50명과 68명입니다. 방향 확률과 기대 손실은 베타 사후분포에서 20만 번 표본을 뽑아 구했고(시드 2026), p값은 두 비율 z검정으로 계산했습니다. 사전분포 표의 네 줄은 A안과 B안에 같은 사전분포를 적용한 결과입니다. 그림 5의 실제 데이터는 Kaggle의 Marketing A/B Testing(faviovaz, CC0 Public Domain, https://www.kaggle.com/datasets/faviovaz/marketing-ab-testing)이며, 부분표본은 두 그룹에서 각 2,000명을 무작위로 뽑았습니다(시드 7). 사전분포의 중심 2.5%는 전체 588,101명의 합동 전환율 2.524%입니다. 유저 단위 원본은 싣지 않았습니다. 코드 실행 환경은 Python 3.12, NumPy 2.5.3, SciPy 1.18.1입니다.