베르누이 분포 (Bernoulli Distribution)

Casella & Berger Ch.3.2 — 이진 결과의 수학적 기초, 지수족, MLE, 엔트로피, GLM 연결

베르누이 분포는 성공/실패 두 가지 결과만 갖는 가장 단순한 확률 분포이다. PMF, 적률, MGF, 지수족 표현을 수학적으로 도출하고, MLE와 피셔 정보량, 엔트로피, 로지스틱 회귀와의 연결, A/B 테스트 실무 응용을 체계적으로 다룬다.

Statistics
저자

Kwangmin Kim

공개

2026년 03월 28일

1 베르누이 분포란 무엇인가

베르누이 분포(Bernoulli Distribution)는 결과가 정확히 두 가지인 실험을 모형화하는 가장 단순한 확률 분포이다. 동전 던지기의 앞/뒤, A/B 테스트의 전환/비전환, 임상시험의 반응/무반응 — 이 모든 상황의 수학적 뼈대가 베르누이 분포이다.

단순하지만, 통계학의 거대한 구조물들이 베르누이 분포 위에 세워져 있다:

  • 이항 분포: \(n\) 개의 독립 베르누이 시행의 합
  • 기하 분포: 첫 번째 성공까지의 시행 수
  • 음이항 분포: \(r\) 번째 성공까지의 실패 수
  • 로지스틱 회귀: 베르누이 분포의 성공 확률 \(p\) 를 공변량의 함수로 모형화
  • 교차 엔트로피 손실: 딥러닝 분류 모형의 기본 손실함수

제임스 베르누이(Jacob Bernoulli, 1655–1705)의 이름을 딴 이 분포는 그의 유고작 Ars Conjectandi (1713)에서 체계화되었다.


2 정의

정의: 베르누이 분포

확률변수 \(X\) 가 베르누이 \((p)\) 분포를 따르면:

\[ X = \begin{cases} 1 & \text{확률 } p \quad (\text{성공}) \\ 0 & \text{확률 } 1 - p \quad (\text{실패}) \end{cases} \]

여기서 \(0 \leq p \leq 1\) 이다. PMF는 하나의 식으로 표현할 수 있다:

\[ P(X = x \mid p) = p^x (1-p)^{1-x}, \quad x \in \{0, 1\} \]

직관: PMF \(p^x(1-p)^{1-x}\) 가 왜 이 형태인가

\(x = 1\) (성공)일 때: \(p^1 (1-p)^0 = p\). 성공 확률 그대로이다. \(x = 0\) (실패)일 때: \(p^0 (1-p)^1 = 1-p\). 실패 확률 그대로이다.

지수 \(x\)\(1-x\) 가 서로를 스위치처럼 켜고 끈다: \(x=1\) 이면 \(p\) 항을 “켜고” \((1-p)\) 항을 “끄고”, \(x=0\) 이면 반대가 된다. 두 가지 경우를 하나의 식으로 통합하는 수학적 압축이다.

이 형태가 중요한 이유: - 이항 분포 PMF \(\binom{n}{y}p^y(1-p)^{n-y}\) 에서 \(n=1\) 로 놓으면 정확히 이 식이 된다. - 지수족 표현 \(\exp\left[x \cdot \log\frac{p}{1-p}\right] \cdot (1-p)\) 으로 변환하면 MLE의 충분통계량 \(\sum x_i\) 와 로지스틱 회귀의 로짓 연결이 자연스럽게 도출된다. - 이 항이 없으면: 두 경우를 별도로 처리해야 하고, 일반화가 불가능해진다.

정규화 확인: \(P(X=0) + P(X=1) = (1-p) + p = 1\) . \(\checkmark\)

\(p^x(1-p)^{1-x}\) 이라는 표현이 처음에는 인위적으로 보이지만, 이 형태가 이항 분포 \(\binom{n}{y}p^y(1-p)^{n-y}\) 에서 \(n = 1\) 인 특수한 경우와 정확히 일치하며, 지수족 표현으로 이어지는 핵심 구조이다.

2.1 CDF

\[ F(x) = \begin{cases} 0 & \text{if } x < 0 \\ 1 - p & \text{if } 0 \leq x < 1 \\ 1 & \text{if } x \geq 1 \end{cases} \]

단 두 개의 점프를 가진 계단함수이다. \(x = 0\) 에서 \(1-p\) 만큼, \(x = 1\) 에서 \(p\) 만큼 점프한다.


3 평균, 분산, 적률

3.1 기대값

\[ E[X] = 0 \cdot (1-p) + 1 \cdot p = p \]

기대값이 성공 확률 \(p\) 그 자체라는 것은 직관적이다. \(n\) 번 독립 시행 시 성공 횟수의 기대값 \(np\) 는 여기서 자연스럽게 도출된다.

3.2 분산

\[ E[X^2] = 0^2 \cdot (1-p) + 1^2 \cdot p = p \]

\[ \text{Var}(X) = E[X^2] - (E[X])^2 = p - p^2 = p(1-p) \]

분산의 행동: \(\text{Var}(X) = p(1-p)\)\(p\) 에 대한 아래로 볼록한 이차함수이다.

  • \(p = 0\) 또는 \(p = 1\) 이면 \(\text{Var}(X) = 0\): 결과가 확정적이므로 불확실성 없음
  • \(p = 0.5\) 에서 최대값 \(\text{Var}(X) = 0.25\): 성공과 실패가 동등할 때 가장 불확실

이 성질은 A/B 테스트 표본 크기 계산에서 “최악의 경우”로 \(p = 0.5\) 를 가정하는 근거이다.

3.3 고차 적률

\(X \in \{0, 1\}\) 이므로 \(X^k = X\) 가 모든 양의 정수 \(k\) 에 대해 성립한다. 따라서:

\[ E[X^k] = p \quad \text{for all } k \geq 1 \]

이 성질은 베르누이 분포가 가진 극단적인 단순성의 결과이다. 모든 적률이 동일한 분포는 매우 드물다.

직관: 분산 \(p(1-p)\) 의 물리적 의미

성공 확률 \(p\) 가 극단적(0 또는 1에 가까울)일수록 결과가 거의 확정적이므로 분산이 작다.

  • \(p = 0.01\): 거의 항상 실패. 결과를 예측하기 쉬워 분산이 작다 (\(\approx 0.0099\)).
  • \(p = 0.5\): 성공과 실패가 동등. 가장 예측하기 어려워 분산이 최대 (\(= 0.25\)).
  • \(p = 0.99\): 거의 항상 성공. 결과를 예측하기 쉬워 분산이 작다 (\(\approx 0.0099\)).

형태적 이해: \(p(1-p)\)\(p\) 에 대한 아래로 볼록한 이차함수이다. 대칭축이 \(p = 0.5\) 이고, 양 끝(0과 1)에서 0이 된다.

A/B 테스트 표본 크기 계산에서의 함의: 사전에 \(p\) 를 모를 때 분산이 최대인 \(p = 0.5\) 를 가정하면 가장 많은 표본이 필요하다. 실제 \(p\) 가 극단적이면 표본이 덜 필요하지만, 보수적으로 \(p = 0.5\) 를 쓰는 것이 일반적이다.


4 적률생성함수 (MGF)

\[ M_X(t) = E[e^{tX}] = (1-p) \cdot e^{t \cdot 0} + p \cdot e^{t \cdot 1} = (1-p) + pe^t \]

모든 실수 \(t\) 에 대해 존재한다.

MGF에서 적률 복원:

\[ M_X'(t) = pe^t \implies M_X'(0) = p = E[X] \quad \checkmark \]

\[ M_X''(t) = pe^t \implies M_X''(0) = p = E[X^2] \quad \checkmark \]

이항 분포 MGF와의 연결: 이항 \((n, p)\) 의 MGF는 \([(1-p) + pe^t]^n\) 이다. 이는 독립 베르누이의 MGF를 \(n\) 번 곱한 것으로, “독립 확률변수의 합의 MGF = 각 MGF의 곱”이라는 일반 성질의 직접적 적용이다.


5 지수족 표현

베르누이 분포는 지수족(exponential family)에 속한다. 이 사실은 추정 이론에서 핵심적인 역할을 한다.

PMF를 지수족 표준 형태로 변환한다:

\[ \begin{aligned} p^x(1-p)^{1-x} &= (1-p) \cdot \left(\frac{p}{1-p}\right)^x \\[6pt] &= (1-p) \cdot \exp\left[x \cdot \log\frac{p}{1-p}\right] \end{aligned} \]

지수족 표준 형태 \(h(x) \cdot c(\theta) \cdot \exp[\eta(\theta) \cdot T(x)]\) 와 대응시키면:

구성 요소 베르누이 분포 의미
\(\eta(\theta)\) (자연 모수) \(\log\frac{p}{1-p}\) 로그 오즈(log-odds)
\(T(x)\) (충분통계량) \(x\) 관측값 자체
\(h(x)\) \(1\) 기저 측도
\(c(\theta)\) \(1-p = \frac{1}{1+e^\eta}\) 정규화 상수
로그 오즈와 로지스틱 회귀

자연 모수 \(\eta = \log\frac{p}{1-p}\) 가 바로 로그 오즈(logit)이다. 로지스틱 회귀는 이 자연 모수를 선형 예측자의 함수로 모형화한다:

\[ \log\frac{p}{1-p} = \mathbf{x}^\top \boldsymbol{\beta} \]

이것이 GLM에서 베르누이 분포의 정준 연결함수(canonical link function)가 로짓인 이유이다. 정준 연결을 사용하면 충분통계량이 단순해지고 MLE의 수렴 성질이 보장된다.


6 최대우도추정 (MLE)

6.1 단일 관측

\(X_1, X_2, \ldots, X_n \overset{\text{iid}}{\sim} \text{Bernoulli}(p)\) 에서 우도함수:

\[ L(p) = \prod_{i=1}^{n} p^{x_i}(1-p)^{1-x_i} = p^{\sum x_i}(1-p)^{n - \sum x_i} \]

로그우도:

\[ \ell(p) = \left(\sum_{i=1}^n x_i\right) \log p + \left(n - \sum_{i=1}^n x_i\right) \log(1-p) \]

미분하여 0으로 놓으면:

\[ \frac{d\ell}{dp} = \frac{\sum x_i}{p} - \frac{n - \sum x_i}{1-p} = 0 \]

\[ \hat{p}_{MLE} = \frac{\sum_{i=1}^n x_i}{n} = \bar{X} \]

MLE는 표본 비율(sample proportion)이다. 이 결과는 직관적으로도 자연스럽다 — \(n\) 번 시행 중 성공 횟수의 비율이 성공 확률의 최선의 추정치이다.

6.2 편향과 분산

\[ E[\hat{p}] = p \quad \text{(비편향)} \]

\[ \text{Var}(\hat{p}) = \frac{p(1-p)}{n} \]

표본 크기 \(n\) 이 커지면 추정량의 분산이 \(1/n\) 속도로 감소한다.


7 피셔 정보량

피셔 정보량(Fisher Information)은 모수 \(p\) 에 대해 데이터가 담고 있는 정보의 양을 측정한다.

\[ I(p) = -E\left[\frac{d^2 \ell}{dp^2}\right] \]

로그우도의 이차 도함수:

\[ \frac{d^2 \ell}{dp^2} = -\frac{x}{p^2} - \frac{1-x}{(1-p)^2} \]

기대값을 취하면:

\[ I(p) = \frac{1}{p} + \frac{1}{1-p} = \frac{1}{p(1-p)} \]

해석:

  • \(p = 0.5\) 일 때 \(I(p) = 4\) 로 최솟값: 성공과 실패가 동등하면 각 관측이 제공하는 \(p\) 에 대한 정보가 가장 적다
  • \(p \to 0\) 또는 \(p \to 1\) 이면 \(I(p) \to \infty\): 극단적 \(p\) 에서는 적은 관측으로도 많은 정보를 얻는다
직관: 피셔 정보량 \(I(p) = \frac{1}{p(1-p)}\) 와 분산의 역수 관계

\(I(p) = \frac{1}{\text{Var}(X)}\) 이다. 베르누이 분포에서 분산과 정보량은 정확히 역수 관계이다.

  • 분산이 크다 \(=\) 결과가 불확실 \(=\) 한 번의 관측에서 \(p\) 에 대해 배울 것이 적다 \(=\) 정보량이 작다.
  • 분산이 작다 \(=\) 결과가 예측 가능 \(=\) 한 번의 관측에서 \(p\) 를 빠르게 학습 \(=\) 정보량이 크다.

구체적 예시: - \(p = 0.5\): \(I(p) = 4\) 로 최솟값. 동전을 100번 던져야 \(p \approx 0.5\) 라고 어느 정도 확신할 수 있다. - \(p = 0.99\): \(I(p) = 100\) 으로 크다. 희귀한 실패가 한 번 관측되면 \(p\) 에 대한 정보가 폭발적으로 증가한다.

크래머-라오 하한과의 연결: 비편향 추정량의 분산은 \(1/(nI(p))\) 이하로 줄일 수 없다. MLE \(\bar{X}\) 의 분산 \(p(1-p)/n\) 이 정확히 이 하한이므로, 베르누이 MLE는 이론적으로 가능한 최선의 추정량이다.

크래머-라오 하한과의 연결: 비편향 추정량 \(\hat{p}\) 의 분산은 \(\text{Var}(\hat{p}) \geq \frac{1}{nI(p)} = \frac{p(1-p)}{n}\) 을 만족해야 한다. MLE \(\bar{X}\) 의 분산이 정확히 이 하한과 일치하므로, 베르누이 MLE는 유효 추정량(efficient estimator)이다.


8 엔트로피

베르누이 분포의 섀넌 엔트로피:

\[ H(X) = -p\log p - (1-p)\log(1-p) \]

이를 이진 엔트로피 함수(binary entropy function) \(H_b(p)\) 라 한다.

  • \(p = 0\) 또는 \(p = 1\): \(H_b = 0\) (결과가 확정적, 불확실성 없음)
  • \(p = 0.5\): \(H_b = \log 2 \approx 0.693\) 나트 \(= 1\) 비트 (최대 불확실성)
교차 엔트로피 손실과의 연결

딥러닝에서 이진 분류의 손실함수인 이진 교차 엔트로피(binary cross-entropy):

\[ \mathcal{L} = -\frac{1}{n}\sum_{i=1}^n \left[y_i \log \hat{p}_i + (1-y_i)\log(1-\hat{p}_i)\right] \]

이는 베르누이 분포의 음의 로그우도를 \(n\) 으로 나눈 것과 정확히 동일하다. 즉, 교차 엔트로피 최소화 = MLE이다. 딥러닝의 손실함수가 통계학의 추정 이론에 직접 기반하고 있다.


9 왈드 신뢰구간과 정확 신뢰구간

9.1 왈드 신뢰구간 (Normal Approximation)

CLT에 의해 \(\hat{p} \approx N(p, p(1-p)/n)\) 이므로:

\[ \hat{p} \pm z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]

이 구간은 \(n\hat{p}\)\(n(1-\hat{p})\) 가 모두 충분히 클 때(보통 \(\geq 5\) ) 잘 작동한다.

9.2 왈드 구간의 한계

\(p\) 가 0 또는 1에 가깝거나 \(n\) 이 작을 때 왈드 구간은 커버리지가 명목 수준에 미달한다. 대안으로:

  • 윌슨 구간(Wilson interval): \(\tilde{p} = \frac{x + z^2/2}{n + z^2}\) 기반, 더 안정적
  • 클로퍼-피어슨 구간(Clopper-Pearson): 이항 분포 기반 정확 구간, 보수적
\(\hat{p} = 0\) 또는 \(\hat{p} = 1\) 문제

모든 관측이 성공( \(\hat{p} = 1\) ) 또는 모든 관측이 실패( \(\hat{p} = 0\) )이면 왈드 구간의 폭이 0이 된다. 이 경우 “성공 확률은 정확히 0(또는 1)”이라고 주장하게 되는데, 이는 비합리적이다. 이 상황에서는 정확 구간이나 베이지안 구간( \(\text{Beta}(x+1, n-x+1)\) 의 신용 구간)을 사용해야 한다.


10 응용 분야

분야 활용 구체적 예시
A/B 테스트 전환율 비교 버튼 색상 변경 후 클릭 여부 (0/1) 모형화
임상시험 반응률 추정 신약 투여 후 반응/무반응 이진 결과
품질 관리 불량률 추정 제품이 규격 합격/불합격
신호 탐지 이진 채널 비트 전송에서 오류/정상
자연어처리 텍스트 분류 리뷰가 긍정/부정인지 판별
역학 유병률 추정 감염 여부 (양성/음성)
금융 부도 예측 대출자의 상환/부도 여부

11 코드 예시

11.1 Step 1: 순수 Python 구현 (원리 이해)

import math

# ----- 베르누이 분포 기본 성질 -----
p = 0.3

# PMF
print(f"P(X=0) = {1-p:.4f}")
print(f"P(X=1) = {p:.4f}")

# 적률
mean = p
var = p * (1 - p)
print(f"E[X] = {mean:.4f}")
print(f"Var(X) = {var:.4f}")

# MGF
def bernoulli_mgf(t, p):
    return (1 - p) + p * math.exp(t)

# MGF에서 평균 수치 확인
h = 1e-8
mgf_deriv = (bernoulli_mgf(h, p) - bernoulli_mgf(-h, p)) / (2 * h)
print(f"MGF'(0) = {mgf_deriv:.6f} (이론값: {p})")

# ----- MLE -----
data = [1, 0, 1, 1, 0, 0, 1, 0, 1, 1]  # n=10
n = len(data)
p_hat = sum(data) / n
print(f"\nMLE: p_hat = {p_hat:.4f}")
print(f"Var(p_hat) = {p_hat * (1-p_hat) / n:.4f}")

# ----- 피셔 정보량 -----
fisher_info = 1 / (p_hat * (1 - p_hat)) if 0 < p_hat < 1 else float('inf')
cramer_rao = 1 / (n * fisher_info)
print(f"피셔 정보량 I(p) = {fisher_info:.4f}")
print(f"크래머-라오 하한 = {cramer_rao:.4f}")

# ----- 이진 엔트로피 -----
def binary_entropy(p):
    if p == 0 or p == 1:
        return 0.0
    return -p * math.log(p) - (1-p) * math.log(1-p)

print(f"\n이진 엔트로피:")
for p_val in [0.0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.0]:
    print(f"  H({p_val}) = {binary_entropy(p_val):.4f} nats"
          f" = {binary_entropy(p_val)/math.log(2):.4f} bits")

11.2 Step 2: scipy/numpy 구현 (실무 활용)

import numpy as np
from scipy import stats

# ----- scipy 베르누이 분포 -----
p = 0.3
dist = stats.bernoulli(p)

print(f"E[X] = {dist.mean():.4f}")
print(f"Var(X) = {dist.var():.4f}")
print(f"H(X) = {dist.entropy():.4f} nats")

# 난수 생성
np.random.seed(42)
samples = dist.rvs(size=10000)
print(f"\n표본 비율: {samples.mean():.4f} (이론값: {p})")
# ----- 왈드 vs 윌슨 vs 클로퍼-피어슨 신뢰구간 비교 -----
import numpy as np
from scipy import stats

def wald_ci(x, n, alpha=0.05):
    p_hat = x / n
    z = stats.norm.ppf(1 - alpha/2)
    se = np.sqrt(p_hat * (1 - p_hat) / n)
    return p_hat - z * se, p_hat + z * se

def wilson_ci(x, n, alpha=0.05):
    z = stats.norm.ppf(1 - alpha/2)
    denom = 1 + z**2 / n
    p_tilde = (x + z**2 / 2) / (n + z**2)
    se = z * np.sqrt(x * (n - x) / n**3 + z**2 / (4 * n**2)) / denom
    return p_tilde - se, p_tilde + se

def clopper_pearson_ci(x, n, alpha=0.05):
    lo = stats.beta.ppf(alpha/2, x, n - x + 1) if x > 0 else 0.0
    hi = stats.beta.ppf(1 - alpha/2, x + 1, n - x) if x < n else 1.0
    return lo, hi

# 예시: n=20, x=2 (p_hat = 0.1) — 작은 표본, 극단적 비율
n, x = 20, 2
print(f"n={n}, x={x}, p_hat={x/n:.3f}")
print(f"왈드:            {wald_ci(x, n)}")
print(f"윌슨:            {wilson_ci(x, n)}")
print(f"클로퍼-피어슨:   {clopper_pearson_ci(x, n)}")

# n=20, x=0 — 왈드 구간의 문제점
n, x = 20, 0
print(f"\nn={n}, x={x}, p_hat={x/n:.3f}")
print(f"왈드:            {wald_ci(x, n)}  (폭 = 0, 비합리적)")
print(f"윌슨:            {wilson_ci(x, n)}")
print(f"클로퍼-피어슨:   {clopper_pearson_ci(x, n)}")
# ----- 교차 엔트로피 = 음의 로그우도 확인 -----
import numpy as np

np.random.seed(42)
n = 1000
p_true = 0.3
y = np.random.binomial(1, p_true, size=n)

# 다양한 p_hat에서 음의 로그우도 = 교차 엔트로피
p_range = np.linspace(0.01, 0.99, 200)
nll = [-np.mean(y * np.log(p) + (1 - y) * np.log(1 - p)) for p in p_range]

p_mle = y.mean()
nll_mle = -np.mean(y * np.log(p_mle) + (1 - y) * np.log(1 - p_mle))

print(f"MLE: p_hat = {p_mle:.4f}")
print(f"MLE에서의 교차 엔트로피: {nll_mle:.4f}")
print(f"이론적 최소 엔트로피 H(p_true): "
      f"{-(p_true*np.log(p_true) + (1-p_true)*np.log(1-p_true)):.4f}")

11.3 R 코드

# R에서의 베르누이 분포
p <- 0.3

# 기본 통계량
cat("E[X] =", p, "\n")
cat("Var(X) =", p * (1-p), "\n")

# 난수 생성 (rbinom으로 n=1 이항 = 베르누이)
set.seed(42)
samples <- rbinom(10000, size=1, prob=p)
cat("표본 비율:", mean(samples), "\n")

# 정확 이항 검정 (베르누이 MLE + 신뢰구간)
binom.test(sum(samples), length(samples), p=0.3)

# prop.test: 왈드 유형 검정
prop.test(sum(samples), length(samples), p=0.3, correct=FALSE)

12 베르누이에서 파생되는 분포 계보

Bernoulli(p)
├── 합산: X₁ + X₂ + ... + Xₙ → Binomial(n, p)
│   ├── n→∞, p→0, np=λ → Poisson(λ)
│   └── CLT → Normal(np, np(1-p))
├── 첫 성공까지: → Geometric(p)
│   └── r번째 성공까지: → Negative Binomial(r, p)
└── GLM 연결: logit(p) = Xβ → Logistic Regression

베르누이 분포는 이 계보의 뿌리(root)이다. 모든 이산 카운트 분포는 베르누이 시행의 반복과 변형으로 유도할 수 있다.


13 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

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