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).
\(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 \]
성공 확률이 \(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) \]
\(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는 \((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)
\(Y \sim \text{Binomial}(n, p)\) 이면, \(n \to \infty\) 에서:
\[ \frac{Y - np}{\sqrt{np(1-p)}} \xrightarrow{d} N(0, 1) \]
이 변환은 세 단계로 이해할 수 있다:
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 관련 주제
선행 지식
- 베르누이 분포 — 이항의 구성 단위
- 경우의 수와 조합론 — 이항계수, 이항 정리
- 기대값과 분산 — 선형성, 독립 합의 분산
- 적률생성함수 — MGF의 유일성과 합의 MGF
후속 주제
관련 개념