이항 분포 (Binomial Distribution)

Casella & Berger Ch.3.2 — 베르누이 합, 이항 정리, 정규 근사, 포아송 극한, MLE

이항 분포는 독립 베르누이 시행의 성공 횟수를 모형화하는 핵심 이산 분포이다. PMF의 조합론적 유도, 평균·분산·MGF 증명, 정규 근사(CLT)와 포아송 극한, 지수족 표현, MLE와 피셔 정보량, A/B 테스트와 품질 관리의 실무 응용을 체계적으로 다룬다.

Statistics
저자

Kwangmin Kim

공개

2026년 03월 28일

1 이항 분포란 무엇인가

이항 분포(Binomial Distribution)는 동일한 성공 확률 \(p\) 를 갖는 \(n\) 번의 독립 베르누이 시행에서 성공 횟수를 모형화하는 분포이다. “동전을 10번 던져 앞면이 몇 번 나오는가”, “100명 중 몇 명이 전환하는가” — 이 질문의 답이 이항 분포를 따른다.

이항 분포가 통계학에서 차지하는 위치는 특별하다:

  • 베르누이의 합: 가장 단순한 분포(베르누이)의 독립 합으로 구성된다
  • 이항 정리: PMF의 정규화가 이항 정리(Binomial Theorem)의 직접적 결과이다
  • 정규 근사: CLT에 의해 \(n\) 이 크면 정규 분포로 근사된다 — 역사적으로 CLT의 첫 사례이다
  • 포아송 극한: \(n \to \infty\) , \(p \to 0\) , \(np = \lambda\) 이면 포아송으로 수렴한다
  • GLM의 반응 분포: 로지스틱 회귀의 반응 변수가 이항 분포를 따른다

2 정의

정의: 이항 분포

\(n\) 번의 독립 베르누이 \((p)\) 시행에서 성공 횟수 \(Y = \sum_{i=1}^{n} X_i\) 는 이항 \((n, p)\) 분포를 따른다:

\[ P(Y = y \mid n, p) = \binom{n}{y} p^y (1-p)^{n-y}, \quad y = 0, 1, \ldots, n \]

여기서 \(0 \leq p \leq 1\) , \(n\) 은 양의 정수이다 (Casella & Berger, 2002, Ch.3).

직관: PMF \(\binom{n}{y} p^y (1-p)^{n-y}\) 의 세 조각

\(p^y\): 성공 \(y\) 번이 이 순서대로 연속으로 일어날 원시 확률이다.
\((1-p)^{n-y}\): 실패 \(n-y\) 번이 이 순서대로 연속으로 일어날 원시 확률이다.
\(\binom{n}{y}\): 성공 \(y\) 번을 \(n\) 번 시행 중 어느 위치에 배치할지 고르는 경우의 수이다.

이 세 항의 곱이 “순서에 관계없이 \(n\) 번 중 정확히 \(y\) 번 성공”하는 확률이다.

항을 하나씩 제거하면 어떻게 되는가:

  • \(\binom{n}{y}\) 가 없으면: 특정 순서(예: 처음 \(y\) 번만 성공) 하나의 확률만 계산된다. 다른 배치 방식이 모두 누락된다.
  • \(p^y\) 가 없으면: 성공의 기여가 사라져 확률이 \((1-p)^{n-y}\) 만 남는다. 성공 횟수와 무관한 이상한 값이 된다.
  • \((1-p)^{n-y}\) 가 없으면: 실패 시행이 확률 1로 처리되어 실패가 공짜인 셈이 된다.

2.1 PMF의 조합론적 유도

\(n\) 번 시행에서 정확히 \(y\) 번 성공하는 특정 순서 하나의 확률은 \(p^y(1-p)^{n-y}\) 이다 (독립성). 이 확률은 성공이 어느 시행에서 발생했는지에 무관하고, 몇 번 발생했는지에만 의존한다. 성공 \(y\) 번을 \(n\) 번 시행에 배치하는 방법은 \(\binom{n}{y}\) 가지이므로, 이를 곱하면 PMF가 완성된다.

2.2 정규화 확인: 이항 정리

\[ \sum_{y=0}^{n} \binom{n}{y} p^y (1-p)^{n-y} = (p + (1-p))^n = 1^n = 1 \]

이항 정리(Binomial Theorem): 임의의 실수 \(a, b\) 와 음이 아닌 정수 \(n\) 에 대해 \((a+b)^n = \sum_{i=0}^{n}\binom{n}{i}a^i b^{n-i}\) . 이 정리의 이름이 곧 분포의 이름이다.

2.3 베르누이와의 관계

\(n = 1\) 이면 \(\binom{1}{y}p^y(1-p)^{1-y} = p^y(1-p)^{1-y}\) 로 베르누이 분포와 정확히 일치한다. 이항 분포는 베르누이 분포의 자연스러운 확장이다.


3 평균과 분산

3.1 기대값

\(Y = \sum_{i=1}^{n} X_i\) 이고 각 \(X_i \sim \text{Bernoulli}(p)\) 가 독립이므로:

\[ E[Y] = \sum_{i=1}^{n} E[X_i] = np \]

직관: 기대값 \(E[Y] = np\)

성공 확률이 \(p\) 인 시행을 \(n\) 번 하면, 평균적으로 \(np\) 번 성공한다.

\(n\) 번 시행을 \(n\) 명의 독립 참여자로 상상하면, 각 참여자가 확률 \(p\) 로 성공에 기여하므로 총 기대 기여는 \(np\) 이다. 기대값의 선형성이 이 직관을 수식으로 보증한다.

구체적 예시: 불량률 5%인 생산 라인에서 200개를 검사하면 평균 \(200 \times 0.05 = 10\) 개가 불량이다. 특정 순서나 패턴 없이 단순히 “각 제품이 독립적으로 5% 확률로 불량”이라는 사실만으로 이 기댓값이 결정된다.

기대값의 선형성은 독립성을 요구하지 않는다. 따라서 이 결과는 시행 간 의존성이 있어도 \(E[X_i] = p\) 이기만 하면 성립한다.

3.2 분산

독립성에 의해:

\[ \text{Var}(Y) = \sum_{i=1}^{n} \text{Var}(X_i) = np(1-p) \]

직관: 분산 \(\text{Var}(Y) = np(1-p)\)

\(p(1-p)\) 는 한 번의 베르누이 시행에서 결과가 얼마나 불확실한지를 측정한다.

  • \(p = 0\) 또는 \(p = 1\): 결과가 확정되어 \(p(1-p) = 0\) — 불확실성 없음
  • \(p = 0.5\): 성공과 실패가 반반이어서 \(p(1-p) = 0.25\) 최대 — 가장 불확실

\(n\) 번 독립 시행은 이 불확실성을 \(n\) 배로 쌓는다. 그 결과가 \(np(1-p)\) 이다.

반사실 시나리오: 시행 간에 의존성이 있다면(예: 첫 시행이 성공하면 다음 성공 확률이 높아진다면) 분산은 \(np(1-p)\) 보다 커진다. 독립성 가정이 분산을 이 “최소한의 정확한” 값으로 고정시킨다.

분산의 행동:

  • \(p = 0.5\) 에서 \(\text{Var}(Y) = n/4\) 로 최대: 성공과 실패가 동등할 때 가장 불확실
  • \(p \to 0\) 또는 \(p \to 1\) 이면 분산 감소: 결과가 한쪽으로 확정될수록 변동이 줄어든다
  • \(n\) 에 비례: 시행 횟수가 많을수록 절대적 변동은 커진다. 단, 비율 \(Y/n\) 의 분산은 \(p(1-p)/n\) 으로 감소한다

4 적률생성함수 (MGF)

4.1 유도

독립 확률변수의 합의 MGF는 각 MGF의 곱이므로:

\[ M_Y(t) = \prod_{i=1}^{n} M_{X_i}(t) = \prod_{i=1}^{n} [(1-p) + pe^t] = [(1-p) + pe^t]^n \]

직관: MGF \(M_Y(t) = [(1-p) + pe^t]^n\) 의 구조

단일 베르누이 시행의 MGF는 \((1-p) + pe^t\) 이다. 이를 분해하면:

  • \((1-p) \cdot 1 = (1-p)e^{0 \cdot t}\): 실패(결과 0)에 가중치 \((1-p)\)
  • \(p \cdot e^t = p \cdot e^{1 \cdot t}\): 성공(결과 1)에 가중치 \(p\)

\(n\) 번의 독립 시행이므로 각 시행의 MGF를 곱한다 — 이것이 \(n\) 제곱이 되는 이유이다.

\(t = 0\) 을 대입하면 \([(1-p) + p]^n = 1^n = 1\) 이 되어 정규화가 자동으로 확인된다. 이 단순한 대입 하나로 PMF 전체의 합이 1임이 검증된다.

4.2 MGF에서 적률 복원

\[ M_Y'(t) = n[(1-p) + pe^t]^{n-1} \cdot pe^t \]

\[ M_Y'(0) = n \cdot 1^{n-1} \cdot p = np = E[Y] \quad \checkmark \]

이차 도함수에서 \(E[Y^2]\) 를 구하고 \(\text{Var}(Y) = E[Y^2] - (E[Y])^2 = np(1-p)\) 를 확인할 수 있다.

4.3 MGF의 유일성

이항 분포의 MGF \([(1-p) + pe^t]^n\) 은 분포를 유일하게 결정한다. 따라서 어떤 확률변수의 MGF가 이 형태이면 그 변수는 이항 분포를 따른다.


5 이항 분포의 합

\(Y_1 \sim \text{Binomial}(n_1, p)\)\(Y_2 \sim \text{Binomial}(n_2, p)\)독립이면:

\[ Y_1 + Y_2 \sim \text{Binomial}(n_1 + n_2, p) \]

MGF 증명: \(M_{Y_1+Y_2}(t) = M_{Y_1}(t) \cdot M_{Y_2}(t) = [(1-p)+pe^t]^{n_1+n_2}\) 으로, 이항 \((n_1+n_2, p)\) 의 MGF와 일치한다.

이 성질은 동일한 \(p\) 를 가진 독립 실험의 결과를 합산할 수 있음을 보장한다. 단, \(p\) 가 같아야 한다는 조건이 핵심이다.


6 재귀 관계

이항 PMF는 인접한 값 사이에 간단한 관계를 갖는다:

\[ \frac{P(Y = y)}{P(Y = y-1)} = \frac{\binom{n}{y}}{\binom{n}{y-1}} \cdot \frac{p}{1-p} = \frac{n - y + 1}{y} \cdot \frac{p}{1-p} \]

즉:

\[ P(Y = y) = \frac{(n-y+1)p}{y(1-p)} \cdot P(Y = y-1) \]

이 재귀식은 \(P(Y = 0) = (1-p)^n\) 에서 시작하여 순차적으로 모든 확률을 효율적으로 계산할 수 있게 한다. 특히 \(n\) 이 클 때 이항계수를 직접 계산하는 것보다 수치적으로 안정적이다.

최빈값(mode): \(P(Y=y)/P(Y=y-1) \geq 1\)\(y\) 의 범위를 구하면, 최빈값은 \(\lfloor (n+1)p \rfloor\) 또는 \((n+1)p - 1\) (\((n+1)p\) 가 정수일 때 두 개의 mode)임을 알 수 있다.


7 지수족 표현

고정된 \(n\) 에 대해, 이항 분포는 지수족에 속한다:

\[ \binom{n}{y}p^y(1-p)^{n-y} = \binom{n}{y}(1-p)^n \exp\left[y \cdot \log\frac{p}{1-p}\right] \]

구성 요소 이항 분포
자연 모수 \(\eta\) \(\log\frac{p}{1-p}\) (로그 오즈)
충분통계량 \(T(y)\) \(y\) (성공 횟수)
기저 측도 \(h(y)\) \(\binom{n}{y}\)
정규화 \(c(p)\) \((1-p)^n\)

충분통계량이 \(\sum y_i\) (총 성공 횟수)라는 것은, 관측된 성공의 총 수가 \(p\) 에 관한 모든 정보를 담고 있다는 뜻이다.


8 정규 근사 (CLT)

정리: 드무아브르-라플라스 정리 (De Moivre-Laplace CLT)

\(Y \sim \text{Binomial}(n, p)\) 이면, \(n \to \infty\) 에서:

\[ \frac{Y - np}{\sqrt{np(1-p)}} \xrightarrow{d} N(0, 1) \]

직관: 정규 근사 표준화 \(\frac{Y - np}{\sqrt{np(1-p)}}\)

이 변환은 세 단계로 이해할 수 있다:

1단계 — 중심 이동: \(Y - np\) 는 평균을 0으로 맞춘다. 성공 횟수에서 “예상 성공 횟수”를 뺀 초과분이다.

2단계 — 스케일 조정: \(\sqrt{np(1-p)}\) 로 나누면 표준편차를 1로 맞춘다. 이로써 \(n\)\(p\) 가 달라도 모두 같은 기준 척도로 비교할 수 있다.

3단계 — 분포 수렴: \(n\) 이 클수록 개별 시행의 불규칙성이 평균화된다. 수많은 독립적 기여의 합은 그 출신 분포와 관계없이 정규 분포에 가까워진다 (CLT).

이 정리가 없었다면 \(n = 1000\), \(p = 0.3\) 일 때 \(P(280 \leq Y \leq 320)\) 을 구하려면 이항 확률 41개를 모두 더해야 한다. 정규 근사 덕분에 표준 정규표 하나로 해결된다.

이 정리는 CLT의 최초 형태(1733, De Moivre; 1812, Laplace)이다. 현대적 CLT는 임의의 유한 분산 분포로 일반화된 것이다.

8.1 실무적 근사 기준

“언제 정규 근사를 써도 되는가?”에 대한 전통적 기준:

기준 조건 비고
전통적 \(np \geq 5\) 이고 \(n(1-p) \geq 5\) 교과서 기본
보수적 \(np \geq 10\) 이고 \(n(1-p) \geq 10\) 비대칭 보정
연속성 보정 \(P(Y \leq y) \approx \Phi\left(\frac{y + 0.5 - np}{\sqrt{np(1-p)}}\right)\) 이산 → 연속 보정

\(p\) 가 극단적(0 또는 1 근처)이면 기준을 만족시키기 위해 \(n\) 이 매우 커야 한다. 이 경우 포아송 근사가 더 적절할 수 있다.


9 포아송 근사

정리: 이항 → 포아송 수렴

\(n \to \infty\) , \(p \to 0\) , \(np = \lambda\) (고정)이면:

\[ \binom{n}{y}p^y(1-p)^{n-y} \to \frac{e^{-\lambda}\lambda^y}{y!} \]

9.1 증명 (재귀 관계 기반)

이항의 재귀식에서 \(p = \lambda/n\) 을 대입하면:

\[ \frac{P(Y=y)}{P(Y=y-1)} = \frac{(n-y+1)}{y} \cdot \frac{p}{1-p} = \frac{(n-y+1)\lambda}{y(n-\lambda)} \]

\(n \to \infty\) 이면:

\[ \frac{(n-y+1)\lambda}{y(n-\lambda)} \to \frac{\lambda}{y} \]

이는 포아송의 재귀식 \(P(X=y)/P(X=y-1) = \lambda/y\) 와 일치한다.

초기값: \(P(Y=0) = (1-\lambda/n)^n \to e^{-\lambda}\) (자연 상수의 정의).

따라서 모든 \(y\) 에서 이항 확률이 포아송 확률로 수렴한다. \(\square\)

9.2 근사의 정확도

\(n\) \(p\) \(\lambda = np\) \(P_{\text{Bin}}(Y=3)\) \(P_{\text{Poi}}(X=3)\) 오차
20 0.10 2 0.1901 0.1804 5.1%
100 0.02 2 0.1823 0.1804 1.0%
1000 0.002 2 0.1806 0.1804 0.1%

\(n\) 이 크고 \(p\) 가 작을수록 근사 정확도가 높아진다.


10 MLE와 추론

10.1 최대우도추정

\(Y \sim \text{Binomial}(n, p)\) 에서 관측값 \(y\) 가 주어졌을 때:

\[ \hat{p}_{MLE} = \frac{y}{n} \]

이는 표본 비율이며, \(\hat{p}\) 의 비편향성과 분산은 베르누이 MLE의 결과를 그대로 계승한다:

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

10.2 피셔 정보량

단일 이항 관측에 대한 피셔 정보량:

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

이는 \(n\) 개 독립 베르누이의 정보량 합이다. \(\text{Var}(\hat{p}) = 1/I(p) = p(1-p)/n\) 으로 크래머-라오 하한에 도달한다.


11 응용 분야

분야 활용 구체적 예시
A/B 테스트 전환율 비교 \(n\) 명 중 전환 \(y\) 명의 비율 차이 검정
임상시험 반응률 추정 100명 환자 중 반응자 수
품질 관리 불량률 관리 생산 라인에서 \(n\) 개 검사, 불량 \(y\)
유전학 멘델 비율 검정 \(n\) 개체 중 우성 형질 비율이 3/4인지 검정
여론 조사 지지율 추정 1000명 중 후보 A 지지자 수
신뢰성 공학 시스템 가용성 \(n\) 개 컴포넌트 중 작동하는 수

12 코드 예시

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

import math

# ----- 이항 PMF 직접 구현 -----
def binom_pmf(y, n, p):
    return math.comb(n, y) * p**y * (1-p)**(n-y)

# ----- 재귀 방식 구현 (수치적으로 더 안정적) -----
def binom_pmf_recursive(n, p):
    """P(Y=0)부터 순차 계산하여 전체 PMF 반환"""
    probs = [0.0] * (n + 1)
    probs[0] = (1 - p) ** n
    for y in range(1, n + 1):
        probs[y] = probs[y-1] * (n - y + 1) / y * p / (1 - p)
    return probs

# 비교
n, p = 20, 0.3
probs_direct = [binom_pmf(y, n, p) for y in range(n+1)]
probs_recur = binom_pmf_recursive(n, p)

print(f"{'y':>3} | {'직접':>12} | {'재귀':>12} | {'차이':>10}")
print("-" * 45)
for y in range(n+1):
    print(f"{y:3d} | {probs_direct[y]:12.8f} | {probs_recur[y]:12.8f} | "
          f"{abs(probs_direct[y]-probs_recur[y]):.2e}")

# ----- 평균, 분산, 최빈값 -----
mean = n * p
var = n * p * (1 - p)
mode = math.floor((n + 1) * p)
print(f"\nE[Y] = {mean:.4f}")
print(f"Var(Y) = {var:.4f}")
print(f"Mode = {mode}")

# ----- 포아송 근사 비교 -----
print("\n이항 → 포아송 근사 (n=1000, p=0.005, lambda=5):")
n_large, p_small, lam = 1000, 0.005, 5.0
print(f"{'y':>3} | {'Binomial':>12} | {'Poisson':>12} | {'상대오차':>10}")
print("-" * 50)
for y in range(11):
    b = binom_pmf(y, n_large, p_small)
    poi = math.exp(-lam) * lam**y / math.factorial(y)
    rel_err = abs(b - poi) / b * 100 if b > 0 else 0
    print(f"{y:3d} | {b:12.8f} | {poi:12.8f} | {rel_err:8.4f}%")

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

import numpy as np
from scipy import stats

# ----- 기본 사용법 -----
n, p = 20, 0.3
dist = stats.binom(n, p)

print(f"E[Y] = {dist.mean():.4f} (이론: {n*p})")
print(f"Var(Y) = {dist.var():.4f} (이론: {n*p*(1-p)})")
print(f"P(Y <= 5) = {dist.cdf(5):.4f}")
print(f"0.95 분위수 = {dist.ppf(0.95)}")
# ----- 정규 근사 정확도 비교 -----
import numpy as np
from scipy import stats

n, p = 30, 0.3
binom_dist = stats.binom(n, p)
norm_dist = stats.norm(n*p, np.sqrt(n*p*(1-p)))

print(f"이항(n={n}, p={p}) vs 정규 근사:")
print(f"{'y':>3} | {'정확':>10} | {'근사':>10} | {'연속성보정':>12}")
for y in [3, 6, 9, 12, 15]:
    exact = binom_dist.cdf(y)
    approx = norm_dist.cdf(y)
    approx_cc = norm_dist.cdf(y + 0.5)  # 연속성 보정
    print(f"{y:3d} | {exact:10.4f} | {approx:10.4f} | {approx_cc:12.4f}")
# ----- A/B 테스트: 두 비율 비교 -----
import numpy as np
from scipy import stats

# 그룹 A: 1000명 중 120명 전환, 그룹 B: 1000명 중 145명 전환
n_a, y_a = 1000, 120
n_b, y_b = 1000, 145

p_a, p_b = y_a / n_a, y_b / n_b
p_pool = (y_a + y_b) / (n_a + n_b)

# Z-검정 (정규 근사)
se = np.sqrt(p_pool * (1 - p_pool) * (1/n_a + 1/n_b))
z_stat = (p_b - p_a) / se
p_value = 2 * (1 - stats.norm.cdf(abs(z_stat)))

print(f"그룹 A: {p_a:.3f}, 그룹 B: {p_b:.3f}")
print(f"차이: {p_b - p_a:.3f}")
print(f"Z = {z_stat:.3f}, p-value = {p_value:.4f}")

# 이항 정확 검정 (scipy)
# 그룹 B의 전환 수가 그룹 A의 비율에서 나올 확률
binom_p = stats.binom_test(y_b, n_b, p_a, alternative='two-sided')
print(f"이항 정확 검정 p-value: {binom_p:.4f}")

12.3 R 코드

# R에서의 이항 분포
n <- 20; p <- 0.3

# 기본 함수
cat("P(Y=6):", dbinom(6, n, p), "\n")
cat("P(Y<=6):", pbinom(6, n, p), "\n")
cat("0.95 분위수:", qbinom(0.95, n, p), "\n")

# 시뮬레이션
set.seed(42)
samples <- rbinom(10000, size=n, prob=p)
cat("표본 평균:", mean(samples), "(이론:", n*p, ")\n")
cat("표본 분산:", var(samples), "(이론:", n*p*(1-p), ")\n")

# 비율 비교 검정
prop.test(c(120, 145), c(1000, 1000))

# 정확 이항 검정
binom.test(145, 1000, p=0.12, alternative="two.sided")

13 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

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