대표본에서 p-값의 구조적 한계와 실무 대안 지표

왜 n이 크면 모든 것이 유의해지는가 – 임상 지표와 온라인 실험 지표의 설계 원리

표본 크기가 커지면 p-값은 아무리 작은 효과도 유의하다고 판정한다. 이 현상의 수학적 메커니즘(표준오차 축소, 검정통계량 발산)을 정밀하게 유도하고, 희귀질환 데이터 통합 사례로 직관을 쌓은 뒤, 임상 시험(MCID, NNT, HR/OR)과 온라인 실험(MDE, CI 기반 의사결정, CUPED, Bayesian)에서 효과 크기를 n과 분리하여 평가하는 실무 지표 설계 원리를 제시한다.

Statistics
Experimentation
저자

Kwangmin Kim

공개

2026년 04월 12일

1 개요

가설 검정의 핵심 도구인 p-값은 “귀무가설 하에서 현재 관측값 이상으로 극단적인 결과가 나올 확률”이다. 이 정의 자체는 문제가 없다. 문제는 표본 크기 \(n\) 이 커질수록 p-값이 구조적으로 0에 수렴한다는 점이다.

직관적으로 말하면, p-값은 “효과가 있는가?”와 “데이터가 충분한가?”를 하나의 숫자에 뒤섞는다. \(n\) 이 충분히 크면 사실상 모든 미세한 차이가 “유의”해지고, 그 결과 통계적 유의성과 실무적 의미 사이에 간극이 벌어진다.

이 포스트는 세 가지를 다룬다.

  1. 수학적 메커니즘 – 왜 \(n \to \infty\) 이면 p-값이 0으로 수렴하는가
  2. 희귀질환 사례 – 전 세계 데이터를 모으면 왜 “무조건 유의”한 결과가 나오는가
  3. 실무 대안 지표 – 효과 크기를 \(n\) 에서 분리하여 평가하는 임상 및 온라인 실험 지표

2 p-값의 수학적 구조: 왜 \(n\) 이 커지면 모든 것이 유의해지는가

2.1 검정통계량의 일반적 형태

가장 기본적인 양측 검정(two-sided z-test)을 생각하자. 모평균 \(\mu\) 에 대한 귀무가설 \(H_0: \mu = \mu_0\) 을 검정할 때 검정통계량은 다음과 같다.

\[ Z = \frac{\hat{\mu} - \mu_0}{\text{SE}} = \frac{\hat{\mu} - \mu_0}{\sigma / \sqrt{n}} \]

여기서 \(\hat{\mu} = \bar{X}\) 는 표본평균, \(\sigma\) 는 모표준편차, \(n\) 은 표본 크기이다. p-값은 \(p = 2\bigl[1 - \Phi(|Z|)\bigr]\) 로 계산된다.

이 구조를 뜯어보면 \(Z\) 는 두 요소의 곱으로 분해된다.

\[ Z = \underbrace{(\hat{\mu} - \mu_0)}_{\text{효과 크기 (signal)}} \times \underbrace{\frac{\sqrt{n}}{\sigma}}_{\text{정밀도 (precision)}} \]

핵심 관찰: 효과 크기 \((\hat{\mu} - \mu_0)\) 가 아무리 작아도 \(\sqrt{n}\) 이 충분히 크면 \(|Z|\) 는 얼마든지 커질 수 있다. \(|Z|\) 가 커지면 \(\Phi(|Z|) \to 1\) 이므로 \(p \to 0\) 이다. 즉, \(n\) 을 키우는 것만으로 p-값을 원하는 만큼 줄일 수 있다.

2.2 표준오차의 축소: 정밀도와 유의성의 혼동

표준오차 \(\text{SE} = \sigma / \sqrt{n}\)\(n\) 이 커질수록 단조감소한다.

\(n\) \(\text{SE}\) (\(\sigma = 10\) 기준) 실제 차이 \(= 0.1\) 일 때 \(Z\) p-값
100 1.000 0.10 0.920
10,000 0.100 1.00 0.317
1,000,000 0.010 10.00 < 0.001
100,000,000 0.001 100.00 \(\approx 0\)

실제 효과는 동일하게 0.1인데, \(n\) 만 바뀌었을 뿐 p-값은 0.920에서 사실상 0으로 떨어진다. 이것이 p-값의 구조적 한계이다 – \(n\) 이 충분히 크면 어떤 효과도 “유의”하게 만들 수 있다.

비유하면 이렇다. 돋보기의 배율을 올리면 아주 작은 흠집도 크게 보인다. \(n\) 을 늘리는 것은 돋보기의 배율을 올리는 것과 같다. p-값은 “흠집이 보이는가?”만 답할 뿐, “그 흠집이 제품에 문제가 되는 수준인가?”는 답하지 못한다.

2.3 귀무가설 하에서의 \(Z\) 분포 vs 대립가설 하에서의 \(Z\) 분포

이 현상을 더 엄밀하게 이해하기 위해 귀무가설과 대립가설 각각에서 \(Z\) 의 분포를 살펴보자.

귀무가설 \(H_0: \mu = \mu_0\) 이 참일 때:

\[ Z = \frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}} \sim N(0, 1) \]

\(n\) 과 무관하게 항상 표준정규분포를 따른다. p-값은 대략 \(\text{Uniform}(0,1)\) 분포를 따르며, \(\alpha = 0.05\) 에서 기각할 확률은 정확히 5%이다.

대립가설 \(H_1: \mu = \mu_0 + \delta\) 가 참일 때 (\(\delta \neq 0\)):

\[ Z = \frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}} = \frac{(\bar{X} - \mu_0 - \delta) + \delta}{\sigma / \sqrt{n}} \]

\(\bar{X} - \mu_0 - \delta\)\(N(0, \sigma^2/n)\) 을 따르므로

\[ Z \sim N\!\left(\frac{\delta}{\sigma / \sqrt{n}},\; 1\right) = N\!\left(\frac{\delta \sqrt{n}}{\sigma},\; 1\right) \]

비중심 모수(noncentrality parameter)는 \(\lambda = \delta\sqrt{n}/\sigma\) 이다. \(n \to \infty\) 이면 \(\lambda \to \infty\) 이므로 \(Z\) 의 분포 전체가 오른쪽으로 이동한다. \(|Z|\) 가 기각역 밖에 위치할 확률이 1에 수렴하고, 따라서 p-값은 0에 수렴한다.

수학적으로 정리하면:

정리: 대표본에서 p-값의 일치성 (Consistency of p-value)

진짜 효과 \(\delta \neq 0\) 가 존재하면, 표본 크기가 커질수록 p-값은 확률적으로 0에 수렴한다.

\[ \delta \neq 0 \implies p\text{-value} \xrightarrow{P} 0 \quad \text{as } n \to \infty \]

이는 \(\lambda = \delta\sqrt{n}/\sigma \to \infty\) 에서 \(P(|Z| > z_{\alpha/2}) \to 1\) 이 됨에 의한다.

직관적으로 이것은 검정의 일치성(consistency)이라 부르는 성질이다. “효과가 존재하면 충분한 데이터가 모이면 반드시 감지한다”는 바람직한 성질처럼 보이지만, 문제는 \(\delta = 0.0001\) 처럼 실무적으로 무의미한 크기의 효과도 예외 없이 감지한다는 점이다.

2.4 검정력 함수로 보는 구조적 한계

검정력(power)은 대립가설이 참일 때 귀무가설을 기각할 확률이다.

\[ \text{Power}(\delta) = P\bigl(\text{reject } H_0 \mid \mu = \mu_0 + \delta\bigr) = 1 - \Phi\!\left(z_{\alpha/2} - \frac{\delta\sqrt{n}}{\sigma}\right) + \Phi\!\left(-z_{\alpha/2} - \frac{\delta\sqrt{n}}{\sigma}\right) \]

\(n\) 을 고정하고 \(\delta\) 를 변화시키면 S자 곡선이 그려진다. \(n\) 이 커지면 이 S자 곡선이 \(\delta = 0\) 근처로 좁혀지면서, 아주 작은 \(\delta\) 에서도 검정력이 1에 가까워진다.

이것이 “과잉 검정력(overpowered study)” 문제이다.

검정력 상태 의미 결과 해석
과소 검정력 (underpowered) 실제 효과를 감지할 능력 부족 유의하지 않아도 효과 없다고 단정 불가
적정 검정력 실무적으로 의미 있는 효과를 감지 p-값이 의사결정에 유용
과잉 검정력 (overpowered) 실무적으로 무의미한 효과까지 감지 p-값이 거의 항상 유의 – 의사결정에 무용

2.5 Cohen의 \(d\)\(Z\) 의 관계

효과 크기를 표준화한 Cohen의 \(d\) 는 다음과 같다.

\[ d = \frac{\delta}{\sigma} \]

이를 사용하면 비중심 모수를 \(\lambda = d\sqrt{n}\) 으로 쓸 수 있다. 검정통계량은

\[ Z = d\sqrt{n} + \varepsilon, \quad \varepsilon \sim N(0,1) \]

이므로, p-값의 크기는 본질적으로 \(d\sqrt{n}\) 에 의해 결정된다. \(d\)\(n\) 을 분리하지 않는 한, 표본 크기가 효과 크기를 압도하는 상황이 필연적으로 발생한다.

2.6 p-값은 세 가지 요소의 혼합물이다

위의 분석을 종합하면, p-값은 사실상 세 가지 요소의 함수이다.

\[ p\text{-value} = f\!\bigl(\underbrace{\delta}_{\text{효과 크기}},\; \underbrace{n}_{\text{표본 크기}},\; \underbrace{\sigma}_{\text{변동성}}\bigr) \]

\(n\) 이 충분히 크면 \(\delta\)\(\sigma\) 에 관계없이 p-값이 작아진다. 즉 p-값에서 효과 크기의 정보를 분리해낼 수 없다. 이것이 p-값의 핵심 맹점이다.

이 구조를 표로 정리하면 문제가 선명해진다.

\(n\) 실제 효과 크기 p-값 해석
50 크다 (Cohen’s \(d = 0.8\) ) 0.03 유의, 실무적으로도 의미 있음
50 작다 (Cohen’s \(d = 0.05\) ) 0.72 비유의
500,000 작다 (Cohen’s \(d = 0.05\) ) \(< 0.001\) 유의하지만 실무적으로 무의미

마지막 행이 대표본 함정이다. 효과가 작다는 사실은 \(n\) 이 커져도 변하지 않는데, p-값만으로는 이를 구분할 수 없다. 보완 지표는 모두 이 혼합물에서 \(\delta\) 를 분리하는 것을 목표로 한다.


3 희귀질환 사례: 전 세계 데이터를 모으면 왜 무조건 유의한가

3.1 상황 설정

어떤 희귀질환이 전 세계에서 100만 명 중 1명꼴로 발생한다고 하자. 연구자들이 이 질환의 특정 치료법이 효과가 있는지 확인하려 한다.

  • 단일 기관: 환자 수 20-30명 – \(n\) 이 작아 SE가 크고, 검정력이 낮아 효과를 감지하기 어렵다
  • 전 세계 데이터 통합: 과거 수십 년간의 환자 기록, 전 세계 의료기관 데이터, 유전체 데이터베이스를 합치면 수만~수십만 건의 레코드가 모인다

3.2 문제가 발생하는 메커니즘

전 세계 데이터를 모으면 \(n\) 이 극단적으로 커진다. 이때 치료군과 대조군 사이에 아주 미미한 차이 – 예를 들어 혈압이 0.1 mmHg 낮아지는 수준 – 만 있어도 다음이 성립한다.

\[ Z = \frac{0.1}{\sigma / \sqrt{n}} \gg z_{0.025} = 1.96 \]

\(n = 100{,}000\) 이고 \(\sigma = 15\) mmHg라면

\[ Z = \frac{0.1}{15 / \sqrt{100{,}000}} = \frac{0.1}{0.0474} \approx 2.11 \quad (p \approx 0.035) \]

\(n = 1{,}000{,}000\) 이면

\[ Z = \frac{0.1}{15 / \sqrt{1{,}000{,}000}} = \frac{0.1}{0.015} \approx 6.67 \quad (p \approx 2.6 \times 10^{-11}) \]

혈압 0.1 mmHg 차이는 측정 오차 범위 내의 무의미한 차이이지만, 백만 명의 데이터에서는 \(p < 10^{-10}\) 수준으로 “극도로 유의”하다.

3.3 직관적 설명: 저울의 비유

정밀한 전자저울을 생각하자.

  • 저울의 정밀도 = \(1/\text{SE} = \sqrt{n}/\sigma\)
  • 올려놓은 물체의 무게 = 실제 효과 \(\delta\)

일반 저울(소표본)로는 먼지 한 알의 무게를 감지할 수 없다. 하지만 원자단위 저울(대표본)로는 먼지 한 알도 “0이 아님”으로 감지한다. 문제는 “먼지 한 알의 무게가 있다”는 사실 자체가 아니라, 그것이 의미 있는 무게인지 여부이다.

p-값은 “저울 바늘이 움직였는가?”에만 답한다. “그 움직임이 의미 있는 수준인가?”는 별도의 판단 기준이 필요하다 – 이것이 바로 실무 지표의 역할이다.

3.4 비율 검정에서의 동일 현상: 생존율 비교

위의 혈압 예시는 연속형 결과(means test)에 해당한다. 비율 검정(proportions test)에서도 동일한 현상이 발생하는지 확인하자. 비율 검정의 검정통계량 구조를 뜯어보면 왜 대표본에서 “무의미한 차이”가 유의해지는지를 또 다른 각도에서 이해할 수 있다.

상황: 희귀질환 약물 A의 5년 생존율을 플라시보와 비교한다. 전 세계 환자 데이터를 통합하여 \(n = 500{,}000\) (각 군 \(250{,}000\) )을 확보했다. 플라시보 군 5년 생존율 72.0%, 약물 A 군 72.1% – 절대 차이는 0.1%p에 불과하다.

\[ Z = \frac{\hat{p}_T - \hat{p}_C}{\sqrt{\hat{p}(1-\hat{p})(1/n_T + 1/n_C)}} \]

여기서 \(\hat{p} = (n_T \hat{p}_T + n_C \hat{p}_C)/(n_T + n_C)\) 는 합동 비율이다. 대입하면

\[ Z = \frac{0.721 - 0.720}{\sqrt{0.7205 \times 0.2795 \times (1/250{,}000 + 1/250{,}000)}} = \frac{0.001}{\sqrt{0.2014 \times 8 \times 10^{-6}}} \approx \frac{0.001}{0.00127} \approx 0.79 \]

\(n = 500{,}000\) 에서도 \(p \approx 0.43\) – 아직 유의하지 않다. 하지만 \(n = 5{,}000{,}000\) 이면

\[ Z \approx \frac{0.001}{0.000401} \approx 2.49 \quad (p \approx 0.013) \]

\(n = 50{,}000{,}000\) 이면 \(Z \approx 7.87\), \(p \approx 3.6 \times 10^{-15}\) 이다.

핵심 관찰: 0.1%p 차이는 NNT(Number Needed to Treat) = 1,000에 해당한다. 즉 1,000명을 치료해야 1명이 추가로 생존하는 수준이다. 치료 비용, 부작용, 환자 부담을 고려하면 대부분의 경우 투여를 정당화하기 어렵다. 그런데 데이터를 충분히 모으면 “극도로 유의한” 결과가 나온다.

비유하면, 동전을 10번 던져서 6:4가 나오면 편향 여부를 판단할 수 없다. 하지만 50,000,000번 던져서 25,050,000:24,950,000이 나오면 “이 동전은 공정하지 않다”는 결론이 통계적으로 확실해진다. p-값은 이 “우연 배제”만 수행할 뿐, 0.1%p의 편향이 실제로 의미 있는 크기인지는 답하지 않는다.

3.5 대규모 통합 연구의 추가 문제

p-값의 구조적 한계 외에도, 전 세계 데이터를 통합할 때는 추가적인 교란이 발생한다.

교란 요인 설명 효과
이질성 (Heterogeneity) 국가별 의료 체계, 진단 기준, 인구 특성이 다름 Simpson’s paradox 가능성
측정 편향 (Measurement bias) 기관마다 측정 장비, 프로토콜이 다름 체계적 오차 유입
선택 편향 (Selection bias) 발표된 연구만 포함 (출판 편향) 효과 크기 과대 추정
시간 편향 (Temporal bias) 수십 년간 치료 표준이 변화 과거-현재 비교 불가

이 교란들이 만들어내는 미세한 체계적 편향이 \(n\) 의 증가로 “유의”하게 감지되면서, 실제로는 치료 효과가 아닌 교란의 유의성을 보고하게 된다. 이것이 “전 세계 데이터를 모으면 무조건 유의한 결과가 나온다”는 현상의 핵심이다.


4 공식적 틀: 통계적 유의성과 실무적 유의성의 분리

위의 분석에서 핵심 교훈은 하나이다.

원칙: 효과 크기와 표본 크기의 분리

의사결정은 \(d\sqrt{n}\) (검정통계량)이 아니라 \(d\) (효과 크기) 자체에 기반해야 한다. p-값은 “데이터 안에 신호가 있는가?”를 탐지하는 도구이지, “그 신호가 의미 있는 크기인가?”를 평가하는 도구가 아니다.

이 원칙을 구현하는 방법은 분야마다 다르지만, 공통 구조는 동일하다.

\[ \text{의사결정} = f\!\bigl(\underbrace{\text{효과 크기}}_{\text{n과 독립}},\; \underbrace{\text{불확실성}}_{\text{신뢰구간}},\; \underbrace{\text{실무 기준}}_{\text{도메인 지식}}\bigr) \]

아래에서 임상 시험과 온라인 실험의 구체적 지표를 살펴본다.


5 임상 시험의 실무 지표

임상 시험은 p-값의 한계를 가장 먼저 인식하고 대안 지표를 체계화한 분야이다. FDA와 EMA 가이드라인 모두 “통계적 유의성만으로는 승인 근거가 불충분하다”고 명시한다.

5.1 최소 임상적 유의 차이 (MCID)

정의: Minimal Clinically Important Difference (MCID)

MCID는 환자가 “의미 있는 변화”로 느끼는 최소한의 차이이다. 측정 도구(설문, 혈액 검사 등)마다 사전에 정의된 기준값이며, 앵커 기반(anchor-based) 또는 분포 기반(distribution-based) 방법으로 결정된다.

\[ \text{MCID} = \Delta_{\min} \quad \text{such that patients perceive the change as meaningful} \]

MCID가 존재하면 의사결정 구조가 명확해진다.

결과 해석
\(|\hat{\delta}| \geq \text{MCID}\) 이고 \(p < \alpha\) 통계적으로도, 임상적으로도 유의 – 치료 효과 인정
\(|\hat{\delta}| < \text{MCID}\) 이고 \(p < \alpha\) 통계적으로 유의하지만 임상적으로 무의미 – 대표본 함정
\(|\hat{\delta}| \geq \text{MCID}\) 이고 \(p \geq \alpha\) 임상적으로 의미 있을 수 있으나 표본 부족 – 추가 연구 필요
\(|\hat{\delta}| < \text{MCID}\) 이고 \(p \geq \alpha\) 효과 없음으로 판단

왜 p-값 대신 MCID인가? p-값은 \(\delta = 0\)\(\delta \neq 0\) 을 구분할 뿐이다. MCID는 \(\delta\) 가 “환자에게 의미 있는 수준”인지를 구분한다. 돋보기 비유를 이어가면, MCID는 “이 흠집이 제품 불량으로 분류되는 크기인지”를 정하는 품질 기준이다.

MCID 결정 방법:

  • 앵커 기반 (Anchor-based): 환자 보고 결과(Patient-Reported Outcome)에서 “약간 좋아졌다”에 해당하는 점수 변화를 MCID로 설정한다. 예를 들어 통증 VAS(Visual Analog Scale)에서 환자가 “의미 있는 개선”으로 느끼는 최소 변화가 13mm이면 MCID = 13mm이다.
  • 분포 기반 (Distribution-based): \(\text{MCID} = 0.5 \times \text{SD}_{\text{baseline}}\) 또는 SEM(Standard Error of Measurement)의 배수로 설정한다. 측정 오차를 넘어서는 최소 변화를 의미한다.

5.2 치료 필요수 (NNT)

정의: Number Needed to Treat (NNT)

NNT는 한 명의 추가적인 치료 성공(또는 유해 사건 방지)을 얻기 위해 치료해야 하는 환자 수이다.

\[ \text{NNT} = \frac{1}{\text{ARR}} = \frac{1}{p_{\text{control}} - p_{\text{treatment}}} \]

여기서 ARR(Absolute Risk Reduction)은 절대 위험 감소이다.

NNT가 직관적인 이유는 의사결정자가 바로 비용-효과를 계산할 수 있기 때문이다.

예시: 신약 A가 심혈관 사건 발생률을 대조군 12%에서 치료군 9%로 줄였다.

\[ \text{ARR} = 0.12 - 0.09 = 0.03, \quad \text{NNT} = \frac{1}{0.03} \approx 34 \]

“34명을 치료하면 1명이 추가로 심혈관 사건을 피한다.” 이 정보는 치료 비용, 부작용 위험과 직접 비교할 수 있다. 반면 \(p = 0.002\) 는 이런 비교를 할 수 없다.

NNT의 핵심적 장점은 \(n\) 과 무관하다는 점이다. \(n = 1{,}000\) 이든 \(n = 100{,}000\) 이든 ARR이 0.03이면 NNT는 34이다. p-값은 \(n\) 에 따라 달라지지만, NNT는 효과 크기만을 반영한다.

NNT 범위 해석
1-5 매우 효과적인 치료
5-20 임상적으로 의미 있는 효과
20-50 효과는 있으나 비용 대비 검토 필요
50+ 효과가 작아 대안 고려

5.3 위험비와 오즈비 + 신뢰구간

정의: Hazard Ratio (HR) 와 Odds Ratio (OR)

위험비 (Hazard Ratio): 시간-사건(time-to-event) 분석에서 치료군의 순간 위험률 대비 대조군의 순간 위험률이다.

\[ \text{HR} = \frac{h_{\text{treatment}}(t)}{h_{\text{control}}(t)} \]

오즈비 (Odds Ratio): 이진 결과에서 치료군의 오즈 대비 대조군의 오즈이다.

\[ \text{OR} = \frac{p_{\text{treatment}} / (1 - p_{\text{treatment}})}{p_{\text{control}} / (1 - p_{\text{control}})} \]

여기서 중요한 것은 점추정이 아니라 신뢰구간이다.

  • HR = 0.75 (95% CI: 0.60-0.93) – CI가 1을 포함하지 않고 효과 방향이 명확
  • HR = 0.98 (95% CI: 0.70-1.37) – 점추정은 1 미만이지만 CI가 1을 포함, 효과 불확실
  • HR = 0.99 (95% CI: 0.985-0.995) – 대표본에서 p < 0.001이지만, HR이 1에 극히 가까워 실무적 의미 없음

세 번째 경우가 바로 대표본 함정이다. p-값은 극도로 유의하지만 HR의 점추정이 1에 너무 가까워 임상적 의미가 없다.

신뢰구간의 역할: 신뢰구간은 효과 크기의 불확실성을 표현한다. p-값은 “효과가 0인가 아닌가”만 답하지만, 신뢰구간은 “효과가 얼마나 크고, 그 추정이 얼마나 불확실한가”를 동시에 보여준다. 이것이 \(d\)\(n\) 을 분리하는 가장 자연스러운 방법이다.

5.4 임상 시험에서의 종합 판단 프레임워크

현대 임상 시험에서의 효과 판정은 p-값 하나가 아니라 다음의 복합 체계를 따른다.

[1단계] 통계적 검정: p < α?
    ├── No  → 귀무가설 기각 실패 (추가 연구 검토)
    └── Yes → [2단계로 진행]

[2단계] 효과 크기 평가: |δ̂| ≥ MCID?
    ├── No  → 통계적으로 유의하나 임상적으로 무의미 (대표본 함정)
    └── Yes → [3단계로 진행]

[3단계] 임상적 의미: NNT, HR/OR + CI 종합 평가
    ├── NNT 합리적 + HR/OR CI가 의미 있는 범위
    │   → 치료 효과 인정 (비용-효과 분석 진행)
    └── NNT 과대 또는 CI 불확실
        → 보수적 판단 (추가 연구 또는 하위군 분석)

6 온라인 실험의 실무 지표

A/B 테스트와 같은 온라인 실험은 대표본 문제를 가장 빈번하게 마주하는 영역이다. 글로벌 서비스의 일일 활성 사용자가 수억 명에 달하는 환경에서, 어떤 변경이든 p < 0.05를 달성하는 것은 거의 자동이다.

대안 지표를 살펴보기 전에, A/B 테스트에서 흔히 사용하는 핵심 지표의 구조를 먼저 이해해야 한다. 각 지표의 통계적 성질이 대표본 문제와 어떻게 상호작용하는지를 아는 것이 보완 지표 설계의 출발점이다.

6.1 A/B 테스트의 핵심 측정 지표

6.1.1 전환율 (Conversion Rate, CR)

\[ \text{CR} = \frac{\text{전환 수}}{\text{총 노출 수}}, \quad \hat{p} \sim \text{Binomial}(n, p)/n \]

가장 기본적인 지표이다. “사용자가 원하는 행동을 했는가?” – 구매, 가입, 클릭 등이 이에 해당한다. 비율이므로 이항분포를 따르고, 두 군의 비교에는 비율의 z-검정을 사용한다.

\[ Z = \frac{\hat{p}_T - \hat{p}_C}{\sqrt{\hat{p}(1-\hat{p})(1/n_T + 1/n_C)}}, \quad \hat{p} = \frac{n_T\hat{p}_T + n_C\hat{p}_C}{n_T + n_C} \]

대표본 문제와의 연관: 전환율은 대표적인 비율 지표이므로, 앞서 다룬 비율 검정의 구조가 그대로 적용된다. 일일 트래픽이 수백만인 서비스에서 전환율 0.01%p 차이도 “유의”해진다.

6.1.2 평균 매출 (Revenue per User, ARPU)

\[ \text{ARPU} = \frac{\sum_{i=1}^n \text{Revenue}_i}{n} \]

분포가 강하게 right-skewed된다 – 소수의 고액 구매자가 평균을 왜곡한다. 직관적으로, 한 명이 100만 원을 구매하면 나머지 999명의 평균이 1,000원씩 올라간다. 이 때문에 원시 ARPU 비교보다 로그 변환 또는 winsorization(상위 1% 절삭)을 적용하여 분산을 안정화하는 것이 실무 관행이다. 분산이 크면 SE가 커져서 대표본에서도 검정력이 의외로 낮을 수 있다는 점에서, 분산 감소 기법(CUPED 등)의 효용이 특히 크다.

6.1.3 클릭률 (Click-Through Rate, CTR)

\[ \text{CTR} = \frac{\text{클릭 수}}{\text{노출 수}} \]

전환율의 상위 퍼널(funnel) 버전이다. 검색 엔진, 광고, 추천 시스템에서 핵심 지표로 사용된다. 전환율과 동일하게 비율 검정 구조를 따르므로 대표본 함정에 직접 노출된다.

6.1.4 체류 시간 (Session Duration)

\[ \text{Avg Duration} = \frac{1}{n}\sum_{i=1}^n t_i \]

콘텐츠 플랫폼에서 중요한 지표이다. 다만 체류 시간은 “좋은 경험이라 오래 머문 것”과 “원하는 것을 못 찾아 헤맨 것”을 구분하지 못한다. 따라서 단독으로 사용하지 않고, 만족도 지표(예: 긍정 피드백 비율)와 결합하여 해석한다.

6.1.5 이탈률 (Bounce Rate / Churn Rate)

\[ \text{Churn Rate} = \frac{\text{이탈 사용자 수}}{\text{기간 시작 시 활성 사용자 수}} \]

SaaS, 구독 서비스에서 핵심이다. 이탈은 비가역적 사건이므로 생존분석(survival analysis) 프레임워크와 결합하는 경우가 많다. 이탈률이 낮을수록 좋으므로 역방향 지표에 해당하며, 대표본에서 미세한 이탈률 차이가 유의해지는 문제가 동일하게 적용된다.

6.1.6 복합 지표 (Overall Evaluation Criterion, OEC)

실무에서는 단일 지표가 아니라 여러 지표를 가중 합산한 OEC를 설계한다.

\[ \text{OEC} = w_1 \cdot \text{CR} + w_2 \cdot \text{ARPU} + w_3 \cdot (-\text{Churn}) \]

Microsoft, Netflix 등에서 사용하는 방식이다. 가중치 \(w_i\) 는 비즈니스 목표에 따라 정한다. OEC의 장점은 “전환율은 올랐지만 이탈률도 올랐다”와 같은 트레이드오프 상황에서 단일 숫자로 의사결정을 내릴 수 있다는 것이다. 다만 가중치 설정이 주관적이므로, 사전에 이해관계자 합의가 필요하다.

이 지표들은 모두 “무엇을 측정하는가”에 답할 뿐, “그 차이가 의미 있는 크기인가?”에는 답하지 않는다. 아래의 보완 지표들이 후자의 질문에 답하는 도구이다.

6.2 최소 감지 효과 (MDE)

정의: Minimum Detectable Effect (MDE)

MDE는 실험 설계 시점에서 “감지할 가치가 있는 최소 효과 크기”이다. 이것은 검정력과 표본 크기에서 역산되는 것이 아니라, 비즈니스 판단으로 사전에 결정된다.

\[ \text{MDE} = \delta_{\min} \quad \text{such that the business impact justifies the change} \]

MDE의 설정 원리는 MCID와 동일하지만 도메인이 다르다.

분야 기준 MDE 예시
전자상거래 개발+유지비를 상회하는 매출 증분 전환율 +0.5%
검색 엔진 사용자 만족도 지표의 최소 감지 변화 클릭률 +0.1%
SaaS 이탈률 감소가 LTV 증가로 이어지는 임계 이탈률 -2%

MDE와 Cohen의 \(d\) 의 관계: MDE를 표준편차로 나누면 Cohen의 \(d\) 가 되고, 이를 역으로 활용하여 필요 표본 크기를 계산한다.

\[ n = \left(\frac{z_{\alpha/2} + z_{\beta}}{d}\right)^2 \times 2 = \frac{2(z_{\alpha/2} + z_{\beta})^2 \sigma^2}{\text{MDE}^2} \]

이 공식의 핵심 통찰은 \(n\) 이 아니라 MDE가 먼저 결정되어야 한다는 것이다. “가용한 \(n\) 에서 유의한 결과를 얻으려면 어떤 효과를 감지해야 하는가?”가 아니라, “비즈니스적으로 의미 있는 효과가 이것이고, 이를 감지하려면 \(n\) 이 얼마나 필요한가?”가 올바른 순서이다.

6.3 신뢰구간 기반 의사결정

p-값 대신 신뢰구간을 직접 활용하는 프레임워크이다.

\[ \text{CI}_{1-\alpha}(\delta) = \hat{\delta} \pm z_{\alpha/2} \cdot \text{SE} \]

의사결정은 CI와 MDE의 위치 관계로 내린다.

CI 위치 판정
CI 전체가 MDE 위 실무적으로 의미 있는 효과 확인 – 배포
CI 전체가 \([-\text{MDE}, +\text{MDE}]\) 효과가 작아 실무적 의미 없음 – 배포하지 않음
CI 전체가 \(-\text{MDE}\) 아래 부정적 효과 – 절대 배포 금지
CI가 MDE 경계를 걸침 판단 불확실 – 실험 연장 또는 추가 분석

이 프레임워크의 장점은 p-값이 필요 없다는 것이다. CI가 MDE를 포함하는지 여부만으로 “효과가 있는가?”와 “그 효과가 의미 있는 크기인가?”를 동시에 답한다.

6.4 CUPED: 분산 감소를 통한 정밀도 향상

정의: Controlled-experiment Using Pre-Experiment Data (CUPED)

CUPED는 실험 전 데이터를 공변량으로 활용하여 처치 효과 추정량의 분산을 줄이는 기법이다.

\[ \hat{\delta}_{\text{CUPED}} = \hat{\delta} - \theta(\bar{X}_{\text{pre}} - \mathbb{E}[X_{\text{pre}}]) \]

여기서 \(\theta = \text{Cov}(Y, X_{\text{pre}}) / \text{Var}(X_{\text{pre}})\) 는 회귀 계수이며, 분산 감소 비율은

\[ \frac{\text{Var}(\hat{\delta}_{\text{CUPED}})}{\text{Var}(\hat{\delta})} = 1 - \rho^2_{Y, X_{\text{pre}}} \]

\(\rho\) 는 실험 결과와 실험 전 데이터의 상관계수이다.

왜 CUPED가 대표본 문제의 해결책이 되는가?

표면적으로 CUPED는 SE를 줄여서 p-값을 더 작게 만드는 것처럼 보인다. 하지만 올바른 활용은 반대이다.

\[ n_{\text{required}} \propto \frac{\sigma^2}{\text{MDE}^2} \xrightarrow{\text{CUPED}} \frac{\sigma^2(1 - \rho^2)}{\text{MDE}^2} \]

CUPED는 동일한 MDE를 감지하는 데 필요한 \(n\) 을 줄인다. 즉, 불필요하게 큰 \(n\) 을 모으지 않아도 되게 함으로써 과잉 검정력 문제를 간접적으로 완화한다. 실험 기간이 짧아지므로 더 많은 실험을 돌릴 수 있는 부수적 이점도 있다.

직관: 실험 전 데이터가 결과 변동의 일부를 설명하면, 설명되지 않는 잔차의 분산이 줄어든다. 더 조용한 배경에서는 더 작은 신호도 명확히 들린다 – 하지만 “듣고 싶은 최소 크기의 신호”(MDE)는 바꾸지 않는다.

6.5 상대적 효과 크기: Lift

정의: Lift

Lift는 대조군 대비 처치군의 상대적 변화율이다.

\[ \text{Lift} = \frac{\hat{p}_T - \hat{p}_C}{\hat{p}_C} \times 100\% \]

절대 차이 \(\hat{p}_T - \hat{p}_C\) 가 아니라 원래 값 대비 비율을 보고하는 것이 Lift의 핵심이다. 예를 들어 전환율이 1%에서 1.2%로 상승했다면 절대 차이는 0.2%p지만 Lift는 +20%이다.

왜 Lift가 대표본 문제를 완화하는가?

Lift는 효과 크기를 “비율”로 표현하므로 \(n\) 과 무관하다. 전환율이 1%인 서비스와 10%인 서비스에서 같은 0.1%p의 절대 차이는 각각 +10% Lift와 +1% Lift로 해석된다. 비즈니스 임팩트가 완전히 다르다는 것이 즉시 드러난다.

다만 Lift 단독으로 의사결정하지 않는다. 기저값이 작으면 Lift가 과대 해석될 수 있기 때문이다 (예: CTR이 0.01%인 배너에서 0.02%로 증가하면 +100% Lift지만 절대 임팩트는 미미하다). Lift는 반드시 신뢰구간과 함께 보고하며, 절대 효과 크기와 병기한다.

6.6 동치성 검정: TOST (Two One-Sided Tests)

정의: Two One-Sided Tests (TOST)

TOST는 “효과가 없다”를 적극적으로 증명하기 위해 가설을 뒤집는 검정 프레임워크이다. 기존 검정과 달리 귀무가설과 대립가설의 역할이 뒤바뀐다.

\[ H_0: |\delta| \geq \Delta \quad \text{(실무적으로 의미 있는 차이가 있다)} \]

\[ H_1: |\delta| < \Delta \quad \text{(효과가 동치 영역 안에 있다)} \]

여기서 \(\Delta\) 는 사전 정의된 동치 경계(equivalence margin)이다. 일반 검정이 “효과가 0이 아님”을 증명하는 반면, TOST는 “효과가 실무 기준보다 작음”을 증명한다.

왜 가설을 뒤집는가?

일반 검정에서 \(H_0\) 기각 실패는 “효과가 없다”를 증명하지 않는다 – 단지 “없다고 말할 수 없다”일 뿐이다. 즉 \(p = 0.8\) 이어도 “효과가 없다”고 결론내리는 것은 오류이다 (Absence of evidence is not evidence of absence).

TOST는 이 비대칭성을 해결한다. “효과가 \(\Delta\) 보다 작다”를 \(H_1\) 에 배치하면, \(H_0\) 를 기각했을 때 “실무적 동치(practical equivalence)”를 적극적으로 주장할 수 있다.

절차: TOST는 이름 그대로 두 개의 단측 검정을 동시에 수행한다.

\[ \text{Test 1: } H_0^{(1)}: \delta \geq \Delta \text{ vs } H_1^{(1)}: \delta < \Delta \]

\[ \text{Test 2: } H_0^{(2)}: \delta \leq -\Delta \text{ vs } H_1^{(2)}: \delta > -\Delta \]

두 검정 모두에서 \(H_0\) 를 유의수준 \(\alpha\) 로 기각하면, 결과적으로 \(-\Delta < \delta < \Delta\) 를 신뢰수준 \(1 - 2\alpha\) 로 주장할 수 있다. 실무적으로는 \(90\%\) CI가 \([-\Delta, +\Delta]\) 안에 완전히 포함되는지만 확인하면 된다 (이것이 TOST와 수학적으로 동치이다).

대표본에서의 역할: 대표본에서 일반 검정이 “유의하지만 무의미한” 결과를 쏟아낼 때, TOST는 이 결과를 공식적으로 “실무적으로 동등하다”고 판정하는 유일한 통계적 도구이다. FDA의 생물학적 동등성 심사(bioequivalence), 온라인 실험의 “중립 결과” 판정에 모두 이 프레임워크가 표준으로 사용된다.

판정 의미
일반 검정 \(p < \alpha\), TOST 기각 실패 효과가 0이 아니지만 \(\Delta\) 이상인지 불확실
일반 검정 \(p \geq \alpha\), TOST 기각 실무적 동등 (가장 유용한 결론)
양쪽 모두 기각 효과가 \(0\) 도 아니고 \(\Delta\) 이상도 아님 – 미세 효과 존재
양쪽 모두 기각 실패 판단 불가 (표본 부족 또는 경계 영역)

6.7 베이지안 사후 확률

정의: Bayesian Posterior Probability of Practical Significance

처치 효과 \(\delta\) 에 대한 사후분포 \(p(\delta | \text{data})\) 를 구한 뒤, 효과가 실무적 기준 \(\Delta\) 를 넘을 확률을 직접 계산한다.

\[ P(\delta > \Delta \mid \text{data}) = \int_{\Delta}^{\infty} p(\delta \mid \text{data})\, d\delta \]

이 접근의 장점은 명확하다.

  1. \(P(\delta > \Delta \mid \text{data}) = 0.93\) 은 “데이터를 관측한 후, 효과가 \(\Delta\) 를 넘을 확률이 93%”로 직관적으로 해석된다
  2. p-값처럼 \(n\) 이 커지면 자동으로 유의해지는 문제가 없다 – 사후분포의 위치가 \(\Delta\) 근처이면 확률은 50% 부근에 머문다
  3. 사전분포(prior)를 통해 도메인 지식을 명시적으로 반영할 수 있다

\(n\) 이 커질 때의 행동: 빈도주의 p-값은 \(n \to \infty\) 에서 \(\delta \neq 0\) 이면 무조건 0에 수렴하지만, 베이지안 사후 확률은 \(\delta\) 의 진짜 값이 \(\Delta\) 보다 작으면 \(P(\delta > \Delta \mid \text{data}) \to 0\) 에 수렴한다. 즉, 실무적으로 무의미한 효과가 데이터가 많아질수록 “무의미하다”는 결론이 강화된다. 이것이 p-값과의 근본적 차이이다.

수학적으로 표현하면:

  • \(\delta_{\text{true}} > \Delta\) 이면: \(P(\delta > \Delta \mid \text{data}) \to 1\) as \(n \to \infty\)
  • \(\delta_{\text{true}} < \Delta\) 이면: \(P(\delta > \Delta \mid \text{data}) \to 0\) as \(n \to \infty\)
  • \(\delta_{\text{true}} = \Delta\) 이면: \(P(\delta > \Delta \mid \text{data}) \to 0.5\) as \(n \to \infty\)

이것은 정확히 우리가 원하는 행동이다 – 의사결정 기준 \(\Delta\) 에 대한 답이 데이터가 많아질수록 명확해진다, 단순히 “유의해지는” 것이 아니라.


7 왜 베이지안이 거의 모든 한계의 해결책처럼 보이는가

대표본 문제뿐만 아니라 빈도주의 통계의 많은 제약이 베이지안 프레임워크에서 자연스럽게 해소되는 것처럼 보인다. 이것은 베이지안이 “만능”이어서가 아니라, 빈도주의가 가진 구조적 철학적 제약을 베이지안이 원리적으로 우회하기 때문이다. 이 절에서는 그 메커니즘을 체계적으로 정리한다.

7.1 빈도주의의 구조적 제약

빈도주의 통계는 “만약 실험을 무한히 반복하면”이라는 가상의 반복 샘플링에 기초한다. 이 철학이 만들어내는 제약은 세 가지이다.

  1. 모수는 고정된 상수 \(\theta\) 에 대해 \(P(\theta \in [a,b])\) 를 계산할 수 없다. 신뢰구간 \([a,b]\) 의 해석은 “이 구간을 만드는 절차가 100번 중 95번 \(\theta\) 를 포함한다”이지, “이 특정 구간 안에 \(\theta\) 가 있을 확률이 95%”가 아니다. 일반적으로 실무자가 원하는 해석은 후자인데, 빈도주의는 이 해석을 허용하지 않는다.

  2. 사전 정보 반영 불가 이전 연구, 도메인 지식, 전문가 판단을 공식적 모형에 넣을 수 없다. 모든 추론은 현재 데이터만으로 이뤄져야 한다. 과거 데이터가 아무리 풍부해도 “prior”로 사용할 공식 경로가 없다.

  3. p-값은 역방향 확률 p-값은 \(P(\text{data} \mid H_0)\) 이지 \(P(H_0 \mid \text{data})\) 가 아니다. 우리가 알고 싶은 것은 “이 가설이 데이터를 볼 때 맞을 확률”인데, p-값은 “가설이 맞다고 가정할 때 이런 데이터가 나올 확률”이다. 방향이 뒤집혀 있다. 이 때문에 p-값을 \(P(H_0 \mid \text{data})\) 로 오해하는 실무자 오류가 반복된다.

7.2 베이지안의 대응 구조

베이지안은 이 세 제약에 대해 구조적 해결을 제공한다. 이것이 가능한 이유는 베이지안이 모수를 확률변수로 취급하기 때문이다.

빈도주의 제약 베이지안 해결 방식 수학적 메커니즘
모수는 상수 모수에 확률분포 부여 사전분포 \(\pi(\theta)\)
사전 정보 반영 불가 prior에 명시적 인코딩 \(\pi(\theta)\) 를 informative하게 설정
p-값의 역방향 확률 사후확률 직접 계산 \(P(\theta \in A \mid \text{data})\)
대표본에서 p → 0 사후분포가 진짜 효과 크기로 수축 실무 기준 \(\Delta\) 와 비교 가능
소표본에서 불안정 prior가 정규화 역할 데이터 부족 시 prior 쪽으로 shrinkage

핵심 수식은 베이즈 정리이다.

\[ \underbrace{p(\theta \mid \text{data})}_{\text{사후분포}} = \frac{\overbrace{p(\text{data} \mid \theta)}^{\text{가능도}} \times \overbrace{\pi(\theta)}^{\text{사전분포}}}{\underbrace{p(\text{data})}_{\text{주변 가능도}}} \]

이 한 줄이 빈도주의의 세 제약을 모두 우회한다 – 모수에 분포를 부여하고, prior로 사전 정보를 반영하며, 사후분포에서 \(P(\theta \mid \text{data})\) 를 직접 얻는다.

7.3 왜 소표본에서도, 대표본에서도 작동하는가

베이지안 프레임워크의 강력함은 \(n\) 에 따라 행동이 자연스럽게 바뀐다는 점이다.

소표본 (\(n\) 이 작을 때):

  • 데이터가 적으면 가능도(likelihood)가 제공하는 정보가 약하다
  • 사전분포가 “기본값(default)” 역할을 하여 추정을 안정화한다
  • 수학적으로: \(n\) 이 작으면 사후분포 \(\approx\) 사전분포
  • 직관: 새 식당의 리뷰가 1개뿐이면, “일반적으로 식당 평점은 3~4점대”라는 사전 지식이 극단적 판단을 완화한다. 1개의 5점 리뷰만으로 “이 식당은 완벽하다”고 결론내리지 않는다

대표본 (\(n\) 이 클 때):

  • 가능도가 매우 날카로워지며 사전분포의 영향이 사라진다 (Bernstein-von Mises 정리)
  • 사후분포의 위치가 진짜 \(\theta\) 로 수렴하고, 폭은 \(O(1/\sqrt{n})\) 으로 줄어든다
  • p-값과의 차이: p-값은 \(\theta \neq \theta_0\) 이면 무조건 유의해지지만, 사후분포는 \(\theta\) 가 실무 기준 \(\Delta\) 에 못 미치면 \(P(\theta > \Delta \mid \text{data}) \to 0\) 으로 수렴한다
  • 직관: 리뷰가 10만 개이면 사전 지식은 무의미해지고, 실제 데이터의 패턴이 전부이다. 하지만 “4.01점과 4.02점의 차이”를 “의미 있다”고 하지 않는다

이 두 극단의 행동이 하나의 공식에서 자연스럽게 도출된다는 점이 베이지안이 “만능처럼 보이는” 이유이다. 빈도주의는 소표본용 방법(exact tests)과 대표본용 방법(asymptotic tests)이 분리되어 있지만, 베이지안은 단일 프레임워크가 \(n\) 에 따라 적절히 행동한다.

7.4 베이지안이 해결책으로 자주 등장하는 구체적 상황

대표본 문제 외에도, 다음 상황에서 베이지안이 자연스러운 해법으로 부상한다.

  1. A/B 테스트 조기 종료 (Peeking Problem) 빈도주의에서는 실험 중간에 결과를 들여다보면 1종 오류가 증가한다 – 매 peek마다 실질적 다중 검정이 일어나기 때문이다. 베이지안에서는 사후확률을 아무 때나 계산해도 해석이 일관된다. 추가 데이터는 단순히 사후분포를 갱신할 뿐이다. Optional stopping에 강건하다.

  2. 희귀 사건 추정 (Sparse Events) 이상 거래 감지, 희귀질환 발생률 등 사건 자체가 드문 경우, 빈도주의 MLE는 종종 \(0/n = 0\) 이 된다. “사건이 한 번도 관측되지 않았으므로 확률은 0”이라는 결론은 실무적으로 쓸모없다. 베이지안은 prior가 0이 아닌 합리적 추정을 제공한다 (예: Beta(1,1) prior + 0번 관측 → 사후평균 \(1/(n+2)\) ).

  3. 다중 비교 (Multiple Comparisons) 20개 메트릭을 동시에 검정하면 빈도주의는 Bonferroni 등으로 \(\alpha\) 를 보정해야 한다. 베이지안 계층모형(hierarchical model)은 partial pooling으로 자연스러운 shrinkage를 제공한다 – 명시적 보정 없이도 극단적 추정이 완화된다. 이 shrinkage는 “전체 메트릭의 평균”이라는 prior가 각 메트릭 추정을 끌어당기는 효과이다.

  4. 개인화 / 추천 (Personalization) Thompson Sampling(Multi-Armed Bandit의 핵심 알고리즘)은 각 arm의 보상 분포에 대한 사후분포를 유지하고, 사후분포에서 샘플링하여 탐색-활용(exploration-exploitation) 균형을 맞춘다. 이것은 본질적으로 베이지안이며, 빈도주의 방법(UCB 등)보다 구현이 간단하고 이론적 보장도 우아하다.

  5. 불확실성 정량화 (Uncertainty Quantification) “95% 확률로 이 범위에 있다”는 사후 구간(credible interval)은 빈도주의 신뢰구간보다 직관적으로 해석된다. 이 직관적 해석은 비통계 이해관계자(경영진, 의사결정자)와의 커뮤니케이션을 크게 단순화한다.

7.5 그렇다면 베이지안의 한계는 무엇인가

베이지안이 “만능”은 아니다. 네 가지 실무적 한계를 짚어야 한다.

  1. 사전분포 선택의 주관성 prior가 결과에 영향을 미친다. 소표본일수록 영향이 크다. “어떤 prior를 쓸 것인가?”는 주관적 판단이며, prior에 따라 결론이 달라지는 사례가 실제로 존재한다. 이를 완화하기 위해 weakly informative prior를 사용하거나, 여러 prior에 대한 민감도 분석(sensitivity analysis)을 수행한다.

  2. 계산 비용 사후분포를 닫힌 형태(closed form)로 구할 수 있는 경우는 제한적이다. 일반적으로 MCMC, 변분추론(Variational Inference) 등 수치적 방법이 필요하고, 이는 빈도주의의 닫힌 형태 공식보다 훨씬 느리다. Stan, PyMC 등 도구가 발전했지만 여전히 복잡한 모델은 수 시간~수일의 계산을 요구한다.

  3. 규제 환경 FDA 등 규제 기관은 전통적으로 빈도주의 프레임워크를 요구한다. 최근 변화 중이지만(FDA는 베이지안 적응 설계를 부분적으로 허용) 아직 주류는 빈도주의이다. 승인 경로를 고려하면 베이지안을 선택하기 어려운 경우가 많다.

  4. 대표본에서 차이 소멸 \(n \to \infty\) 이면 사후분포가 MLE로 수렴한다 (Bernstein-von Mises). 데이터가 충분하면 빈도주의와 베이지안의 점추정은 사실상 동일하다. 차이를 만드는 것은 해석의 틀(모수를 상수로 보는가, 분포로 보는가)과 의사결정 구조(\(\Delta\) 와의 비교가 자연스러운가)이지, 추정값 자체가 아니다.

7.6 핵심 정리

베이지안이 해결책처럼 보이는 이유는 빈도주의의 “모수는 상수, 확률은 장기빈도”라는 철학적 제약이 실무에서 불편한 상황이 너무 많기 때문이다. 베이지안은 “데이터를 본 후 모수에 대해 무엇을 믿는가?”라는 더 자연스러운 질문에 직접 답한다.

다만 이것은 관점의 차이이지 “정답의 차이”는 아니다. 두 프레임워크는 동일한 데이터에서 \(n\) 이 충분하면 같은 결론에 도달한다. 선택 기준은 다음과 같다.

상황 권장 프레임워크
규제 승인, 엄격한 빈도 해석 필요 빈도주의 (+ TOST, MCID 등으로 대표본 함정 보완)
소표본, 사전 지식 활용 필요 베이지안
Optional stopping이 자주 발생 베이지안
계산 자원이 제한적 빈도주의
비통계 이해관계자 커뮤니케이션 중시 베이지안 사후 구간
다중 메트릭 실험 베이지안 계층모형 또는 빈도주의 + FDR

8 코드 예시: p-값 vs 효과 크기 기반 판단

8.1 Step 1: 순수 Python – 대표본에서 p-값의 인플레이션 시뮬레이션

코드
import numpy as np
from scipy import stats

np.random.seed(42)

# 진짜 효과: 0.05 (극히 작은 차이)
true_effect = 0.05
sigma = 1.0

# 다양한 표본 크기에서 p-값 변화 관찰
sample_sizes = [100, 1_000, 10_000, 100_000, 1_000_000]

print(f"{'n':>12} {'Z':>10} {'p-value':>15} {'Cohen d':>10} {'판정':>20}")
print("-" * 75)

for n in sample_sizes:
    # 대립가설 하에서 데이터 생성
    treatment = np.random.normal(true_effect, sigma, n)
    control = np.random.normal(0, sigma, n)

    # 효과 크기 추정
    diff = treatment.mean() - control.mean()
    se = sigma * np.sqrt(2 / n)
    z = diff / se
    p_value = 2 * (1 - stats.norm.cdf(abs(z)))

    # Cohen's d
    pooled_std = np.sqrt((treatment.var() + control.var()) / 2)
    cohen_d = diff / pooled_std

    # 판정: MDE = 0.1 기준
    mde = 0.1
    if p_value < 0.05 and abs(diff) >= mde:
        verdict = "유의 + 실무적 의미"
    elif p_value < 0.05 and abs(diff) < mde:
        verdict = "유의하나 무의미"  # 대표본 함정
    else:
        verdict = "유의하지 않음"

    print(f"{n:>12,} {z:>10.3f} {p_value:>15.2e} {cohen_d:>10.4f} {verdict:>20}")

이 코드의 핵심: 진짜 효과는 0.05로 동일한데, \(n = 100\) 에서는 유의하지 않지만 \(n = 100{,}000\) 이상에서는 극도로 유의하다. 하지만 MDE = 0.1 기준으로 판단하면 “유의하나 실무적으로 무의미”하다.

8.2 Step 2: scipy를 활용한 CI 기반 의사결정

코드
import numpy as np
from scipy import stats

def ci_based_decision(treatment, control, mde, alpha=0.05):
    """CI 기반 의사결정 프레임워크"""
    n_t, n_c = len(treatment), len(control)
    diff = treatment.mean() - control.mean()
    se = np.sqrt(treatment.var(ddof=1)/n_t + control.var(ddof=1)/n_c)

    z_crit = stats.norm.ppf(1 - alpha/2)
    ci_lower = diff - z_crit * se
    ci_upper = diff + z_crit * se

    # p-value
    z = diff / se
    p_value = 2 * (1 - stats.norm.cdf(abs(z)))

    # CI 기반 판정
    if ci_lower > mde:
        decision = "배포 (효과 확인)"
    elif ci_upper < -mde:
        decision = "배포 금지 (부정적 효과)"
    elif ci_upper < mde and ci_lower > -mde:
        decision = "배포 안 함 (효과 작음)"
    else:
        decision = "판단 보류 (CI가 MDE 경계 걸침)"

    return {
        'diff': diff, 'se': se, 'ci': (ci_lower, ci_upper),
        'p_value': p_value, 'decision': decision
    }

# 시뮬레이션: 작은 효과 + 대표본
np.random.seed(42)
sigma = 1.0
true_effect = 0.02  # 매우 작은 효과
mde = 0.05          # 비즈니스 기준

for n in [1_000, 50_000, 500_000]:
    treatment = np.random.normal(true_effect, sigma, n)
    control = np.random.normal(0, sigma, n)

    result = ci_based_decision(treatment, control, mde)

    print(f"\n--- n = {n:,} ---")
    print(f"  추정 효과: {result['diff']:.4f}")
    print(f"  95% CI: ({result['ci'][0]:.4f}, {result['ci'][1]:.4f})")
    print(f"  p-value: {result['p_value']:.2e}")
    print(f"  p-value 판정: {'유의' if result['p_value'] < 0.05 else '유의하지 않음'}")
    print(f"  CI 기반 판정: {result['decision']}")

이 코드의 핵심: \(n = 500{,}000\) 에서 p-값은 극도로 유의하지만, CI 기반 판정은 “효과가 MDE보다 작으므로 배포하지 않음”이다. 이것이 효과 크기와 \(n\) 을 분리하는 실무적 방법이다.

8.3 Step 3: 베이지안 사후 확률 계산

코드
import numpy as np
from scipy import stats

def bayesian_practical_significance(treatment, control, delta_threshold,
                                     prior_mu=0, prior_sigma=1.0):
    """베이지안 사후 확률: P(delta > threshold | data)"""
    n_t, n_c = len(treatment), len(control)
    obs_diff = treatment.mean() - control.mean()
    obs_var = treatment.var(ddof=1)/n_t + control.var(ddof=1)/n_c

    # 정규-정규 conjugate (known variance approximation)
    prior_var = prior_sigma**2
    posterior_var = 1 / (1/prior_var + 1/obs_var)
    posterior_mu = posterior_var * (prior_mu/prior_var + obs_diff/obs_var)
    posterior_sd = np.sqrt(posterior_var)

    # P(delta > threshold | data)
    prob_practical = 1 - stats.norm.cdf(delta_threshold,
                                         loc=posterior_mu, scale=posterior_sd)

    return posterior_mu, posterior_sd, prob_practical

# 비교: n에 따른 베이지안 vs 빈도주의 행동
np.random.seed(42)
true_effect = 0.02  # 진짜 효과 (threshold보다 작음)
threshold = 0.05    # 실무적 기준

print(f"{'n':>10} {'p-value':>12} {'P(d>0.05|D)':>15} {'빈도주의':>15} {'베이지안':>15}")
print("-" * 72)

for n in [500, 5_000, 50_000, 500_000]:
    treatment = np.random.normal(true_effect, 1.0, n)
    control = np.random.normal(0, 1.0, n)

    # 빈도주의 p-value
    diff = treatment.mean() - control.mean()
    se = np.sqrt(2/n)
    z = diff / se
    p_val = 2 * (1 - stats.norm.cdf(abs(z)))

    # 베이지안 사후 확률
    _, _, prob_prac = bayesian_practical_significance(
        treatment, control, threshold)

    freq_verdict = "유의" if p_val < 0.05 else "비유의"
    bayes_verdict = "의미 있음" if prob_prac > 0.95 else \
                    "불확실" if prob_prac > 0.5 else "의미 없음"

    print(f"{n:>10,} {p_val:>12.2e} {prob_prac:>15.4f} {freq_verdict:>15} {bayes_verdict:>15}")

이 코드의 핵심: 진짜 효과(0.02)가 실무 기준(0.05)보다 작을 때, p-값은 \(n\) 이 커지면 유의해지지만, 베이지안 사후 확률 \(P(\delta > 0.05 \mid \text{data})\) 는 0으로 수렴한다. 데이터가 많을수록 “효과가 기준에 못 미친다”는 결론이 강화된다.


9 요약: 공통 원리와 실무 지침

9.1 핵심 원리

p-값의 구조적 한계는 검정통계량이 \(d\sqrt{n}\) 형태를 가진다는 데서 비롯된다. \(n\) 을 제거하고 \(d\) (또는 그에 상응하는 효과 크기)만으로 판단하는 것이 모든 대안 지표의 공통 원리이다.

지표 핵심 질문 \(n\) 과의 관계
p-값 효과가 0이 아닌가? \(n\) 이 커지면 항상 유의
Cohen’s \(d\) 효과가 표준편차 대비 얼마나 큰가? \(n\) 과 무관
MCID 환자가 느끼는 최소 의미 있는 차이인가? \(n\) 과 무관
NNT 1명의 추가 효과를 위해 몇 명을 치료해야 하는가? \(n\) 과 무관
HR/OR + CI 효과의 크기와 불확실성이 동시에 어떠한가? CI 폭이 줄지만 점추정은 안정
MDE 비즈니스적으로 감지할 가치가 있는 최소 효과인가? \(n\) 과 무관 (사전 결정)
Lift 대조군 대비 상대적 변화율은? \(n\) 과 무관 (기저값 상대 비율)
TOST 효과가 실무 기준보다 작다고 적극 주장할 수 있는가? 대표본일수록 동치 결론이 강화됨
\(P(\delta > \Delta \mid \text{data})\) 효과가 실무 기준을 넘을 확률은? 진짜 효과가 작으면 0으로 수렴

9.2 실무 지침

  1. 실험 설계 시: MDE(또는 MCID)를 먼저 정하고, 이를 감지하는 데 필요한 \(n\) 을 역산한다. “\(n\) 이 주어졌을 때 무엇이 유의한가?”가 아니라 “의미 있는 효과를 감지하려면 \(n\) 이 얼마나 필요한가?”가 올바른 순서이다.
  2. 결과 보고 시: p-값과 함께 반드시 효과 크기 + 신뢰구간을 보고한다. p < 0.001이라고만 보고하면 독자는 효과의 크기를 알 수 없다.
  3. 대표본일 때: p-값은 무시하고, CI와 사전 정의된 실무 기준의 위치 관계로 판단한다. 이미 과잉 검정력 상태이므로 p-값은 정보를 제공하지 않는다.
  4. 소표본일 때: p-값이 여전히 유용하다 – 검정력이 부족한 환경에서는 p-값이 “데이터에 신호가 있는가?”를 탐지하는 정당한 도구이다. 문제는 대표본이지 p-값 자체가 아니다.

10 관련 주제

선행 지식

후속 주제

Subscribe

Enjoy this blog? Get notified of new posts by email: