1 기하 분포란 무엇인가
기하 분포(Geometric Distribution)는 독립 베르누이 시행에서 첫 번째 성공이 발생하는 시행 번호를 모형화하는 분포이다. 음이항 분포에서 \(r = 1\) 인 가장 단순한 특수 경우이며, 가장 기본적인 “대기 시간(waiting time)” 분포이다 (Casella & Berger, 2002, Ch.3).
기하 분포의 핵심 특징은 무기억성(memoryless property)이다:
- 이산 분포 중 유일하게 무기억성을 만족하는 분포이다
- 연속 세계에서 이에 대응하는 분포가 지수 분포이다
- “이미 \(t\) 번 실패했다”는 정보가 미래의 성공 확률에 아무 영향을 주지 않는다
2 정의
기하 분포는 두 가지 관례(convention)가 있다. 이 포스트에서는 Casella & Berger를 따라 “시행 번호” 형태를 기본으로 사용한다.
2.1 형태 1: 첫 성공이 발생하는 시행 번호
\[ P(X = x \mid p) = p(1-p)^{x-1}, \quad x = 1, 2, 3, \ldots \]
\(X\) 는 첫 번째 성공이 발생하는 시행 번호이다. 최솟값은 \(X = 1\) (첫 시행에서 바로 성공).
\((1-p)^{x-1}\): 처음 \(x-1\) 번 모두 실패할 확률이다.
\(p\): \(x\) 번째 시행에서 성공할 확률이다.
두 항의 곱이 “정확히 \(x\) 번째에 처음 성공”하는 확률이다. 이 사건은 앞의 \(x-1\) 번은 반드시 모두 실패해야 하고, \(x\) 번째는 반드시 성공해야 하기 때문에 다른 형태가 있을 수 없다.
\(x\) 가 커질수록 \((1-p)^{x-1}\) 이 기하급수적으로 작아지므로, 첫 성공이 늦어질수록 확률이 급감한다. 이것이 분포 이름의 유래이다 — PMF 값들이 공비 \((1-p)\) 인 등비수열(geometric sequence)을 이룬다.
반사실 시나리오: 만약 시행이 독립적이지 않다면(예: 실패할수록 다음 성공 확률이 달라진다면) 이 단순한 곱셈 형태가 성립하지 않는다. 독립성이 이 PMF의 핵심 전제이다.
2.2 형태 2: 첫 성공 전 실패 횟수
\(Y = X - 1\) 로 정의하면:
\[ P(Y = y \mid p) = p(1-p)^y, \quad y = 0, 1, 2, \ldots \]
\(Y\) 는 첫 성공 전 실패 횟수이다. 이 형태는 음이항 분포 \(\text{NegBin}(r=1, p)\) 와 정확히 일치한다.
두 형태의 차이는 단순히 1만큼의 이동(shift)이며 본질적으로 동일하다.
2.3 정규화 확인
등비급수: \(|a| < 1\) 이면 \(\sum_{x=1}^{\infty} a^{x-1} = \frac{1}{1-a}\)
\[ \sum_{x=1}^{\infty} p(1-p)^{x-1} = p \cdot \frac{1}{1-(1-p)} = p \cdot \frac{1}{p} = 1 \quad \checkmark \]
“기하(geometric)”라는 이름은 PMF가 공비 \((1-p)\) 인 등비급수(geometric series)를 이루기 때문이다.
3 CDF와 생존 함수
3.1 생존 함수 (꼬리 확률)
\(P(X > n)\) 은 “처음 \(n\) 번 모두 실패할 확률”이므로:
\[ P(X > n) = (1-p)^n \]
이 결과는 무기억성 증명의 핵심이 된다.
3.2 CDF
\[ F(x) = P(X \leq x) = 1 - (1-p)^{\lfloor x \rfloor}, \quad x \geq 1 \]
CDF는 \((1-p)^n\) 이 기하급수적으로 감소하므로, 큰 값이 관측될 확률이 급격히 줄어든다. 이것이 “기하급수적 감소(geometric decay)”이다.
4 평균과 분산
4.1 기대값
음이항의 공식에서 \(r = 1\) , \(E[X] = E[Y] + 1\) :
\[ E[X] = \frac{1}{p} \]
직접 유도: 등비급수의 미분을 이용한다.
\[ E[X] = \sum_{x=1}^{\infty} xp(1-p)^{x-1} = p \sum_{x=1}^{\infty} x(1-p)^{x-1} \]
\(\sum_{x=1}^{\infty} xq^{x-1} = \frac{d}{dq}\sum_{x=0}^{\infty} q^x = \frac{d}{dq}\frac{1}{1-q} = \frac{1}{(1-q)^2}\) ( \(q = 1-p\) )이므로:
\[ E[X] = p \cdot \frac{1}{p^2} = \frac{1}{p} \]
직관: 성공 확률이 \(p\) 이면 평균적으로 \(1/p\) 번 시행해야 한 번 성공한다. 동전 앞면( \(p=0.5\) )은 평균 2번, 주사위 6( \(p=1/6\) )은 평균 6번 굴려야 나온다.
4.2 분산
\(E[X(X-1)]\) 을 이계 미분 트릭으로 구한다. \(q = 1-p\) 로 놓으면:
\[ \begin{aligned} E[X(X-1)] &= \sum_{x=1}^{\infty} x(x-1) p q^{x-1} = pq \sum_{x=2}^{\infty} x(x-1) q^{x-2} \\ &= pq \cdot \frac{d^2}{dq^2} \sum_{x=1}^{\infty} q^x = pq \cdot \frac{d^2}{dq^2} \frac{q}{1-q} \\ &= pq \cdot \frac{2}{(1-q)^3} = pq \cdot \frac{2}{p^3} = \frac{2q}{p^2} \end{aligned} \]
따라서:
\[ \begin{aligned} E[X^2] &= E[X(X-1)] + E[X] = \frac{2q}{p^2} + \frac{1}{p} \\ \text{Var}(X) &= E[X^2] - (E[X])^2 = \frac{2q}{p^2} + \frac{1}{p} - \frac{1}{p^2} = \frac{1-p}{p^2} \end{aligned} \]
\(\text{Var}(X) = (1-p) \cdot \frac{1}{p^2} = (1-p) \cdot E[X]^2\) 로 쓸 수 있다.
즉, 분산은 평균의 제곱에 \((1-p)\) 를 곱한 것이다.
- \(p = 1\): 항상 첫 시행에 성공. \(E[X] = 1\), \(\text{Var}(X) = 0\) — 불확실성 없음.
- \(p = 0.5\): \(E[X] = 2\), \(\text{Var}(X) = 2\) — 분산이 평균과 같다.
- \(p = 0.01\): \(E[X] = 100\), \(\text{Var}(X) = 9900\) — 분산이 평균보다 99배 크다.
드문 사건일수록 첫 성공 시점의 변동이 폭발적으로 커진다. 평균적으로 100번 기다리지만, 어떤 때는 10번 만에 성공하고 어떤 때는 500번을 기다려야 할 수도 있다.
\(p\) 가 작을수록(성공이 드물수록) 분산이 커진다. 이는 직관과 일치한다 — 드문 사건의 발생 시점은 예측하기 어렵다.
5 적률생성함수 (MGF)
\[ M_X(t) = \sum_{x=1}^{\infty} e^{tx} p(1-p)^{x-1} = pe^t \sum_{x=1}^{\infty} [(1-p)e^t]^{x-1} = \frac{pe^t}{1-(1-p)e^t} \]
분자 \(pe^t\): 첫 시행에서 바로 성공(확률 \(p\))하고 그 시행의 \(e^t\) 기여가 합쳐진 것이다.
분모 \(1-(1-p)e^t\): 등비급수 \(\sum_{x=1}^{\infty} [(1-p)e^t]^{x-1}\) 의 수렴 조건에서 나온다. \((1-p)e^t < 1\), 즉 \(t < -\log(1-p)\) 일 때만 MGF가 존재한다. 이는 기하 분포가 두꺼운 오른쪽 꼬리를 가지기 때문이다 — 충분히 큰 \(t\) 에서는 급수가 발산한다.
\(t = 0\) 대입: \(pe^0 / (1-(1-p)e^0) = p / (1-(1-p)) = p/p = 1\) — 정규화 자동 확인.
미분하여 \(E[X]\): \(M_X'(0) = 1/p\) 가 도출된다.
단, \((1-p)e^t < 1\) , 즉 \(t < -\log(1-p)\) 에서 존재한다.
6 무기억성 (Memoryless Property)
기하 분포의 가장 중요한 성질이다.
양의 정수 \(s > t\) 에 대해:
\[ P(X > s \mid X > t) = P(X > s - t) \]
6.1 증명
\[ P(X > s \mid X > t) = \frac{P(X > s \text{ and } X > t)}{P(X > t)} = \frac{P(X > s)}{P(X > t)} = \frac{(1-p)^s}{(1-p)^t} = (1-p)^{s-t} = P(X > s-t) \]
\(\square\)
핵심은 생존 함수 \(P(X > n) = (1-p)^n\) 이 지수 함수 형태라는 것이다.
\(\frac{(1-p)^s}{(1-p)^t} = (1-p)^{s-t}\) — 지수 함수의 지수 법칙이 정확히 조건부 확률에서 과거를 약분시킨다.
지수 함수만이 이 약분 성질을 갖는다: \(f(s)/f(t) = f(s-t)\) 를 만족하는 함수는 \(f(n) = a^n\) 뿐이다. 이것이 기하 분포의 유일성 증명의 핵심이다.
실생활 비유: 동전을 10번 던져 모두 뒷면이 나왔다. 11번째 앞면이 나올 확률은 여전히 \(p = 0.5\) 이다. 동전에는 “기억”이 없다. 이전 결과가 아무리 쌓여도 다음 시행은 처음과 동일한 확률로 시작한다. 이 성질이 바로 무기억성이다.
6.2 무기억성의 의미
“이미 \(t\) 번 실패했다”는 사실이 앞으로의 대기 시간 분포에 아무 영향을 미치지 않는다. 과거가 미래를 예측하는 데 무용하다.
“이미 10번 연속 실패했으니 이번에는 성공할 것이다”는 잘못된 직관이다. 무기억성에 의해, 10번 실패 후의 성공 확률은 여전히 \(p\) 이다. 이전 실패가 미래 성공 확률을 높이지 않는다. 이것이 도박사의 오류의 수학적 근거이다.
6.3 무기억성의 유일성
\(\{1, 2, 3, \ldots\}\) 위의 이산 분포 중 무기억성을 만족하는 분포는 기하 분포가 유일하다.
증명 개요: \(P(X > s \mid X > t) = P(X > s-t)\) 에서 \(g(n) = P(X > n)\) 으로 놓으면 \(g(s) = g(t) \cdot g(s-t)\) 이다. 이 함수 방정식의 양의 정수 위 해는 \(g(n) = a^n\) ( \(0 < a < 1\) )뿐이다. 이를 PMF로 변환하면 \(P(X = x) = (1-a)a^{x-1}\) , 즉 \(p = 1-a\) 인 기하 분포이다. \(\square\)
연속 세계에서 동일한 논리가 지수 분포의 유일성을 증명한다. 함수 방정식 \(g(s+t) = g(s)g(t)\) 의 연속 해가 \(g(t) = e^{-\lambda t}\) 뿐이기 때문이다.
7 지수 분포와의 대응
기하 분포는 “이산 지수 분포”이다:
| 성질 | 기하 (이산) | 지수 (연속) |
|---|---|---|
| 표본공간 | \(\{1, 2, 3, \ldots\}\) | \((0, \infty)\) |
| 모수 | 성공 확률 \(p\) | 발생률 \(\lambda\) |
| PMF/PDF | \(p(1-p)^{x-1}\) | \(\lambda e^{-\lambda x}\) |
| 기대값 | \(1/p\) | \(1/\lambda\) |
| 분산 | \((1-p)/p^2\) | \(1/\lambda^2\) |
| 무기억성 | 유일한 이산 분포 | 유일한 연속 분포 |
| 생존 함수 | \((1-p)^n\) | \(e^{-\lambda t}\) |
\(p\) 가 작으면 \((1-p)^n \approx e^{-pn}\) 이므로, 기하 \((p)\) 의 생존 함수가 지수 \((\lambda = p)\) 의 생존 함수에 근사한다.
8 쿠폰 수집 문제 (Coupon Collector’s Problem)
기하 분포의 고전적 응용이다.
\(N\) 종류의 쿠폰이 있고, 매번 하나를 무작위(균등)로 받는다. 모든 종류를 수집하려면 평균 몇 개가 필요한가?
\(i-1\) 종류를 이미 가지고 있을 때, 새로운 종류를 얻을 확률은 \(p_i = (N-i+1)/N\) 이다. 새 종류를 얻기까지의 대기 시간 \(T_i \sim \text{Geometric}(p_i)\) 이다.
총 대기 시간:
\[ T = \sum_{i=1}^{N} T_i \]
\[ E[T] = \sum_{i=1}^{N} \frac{1}{p_i} = \sum_{i=1}^{N} \frac{N}{N-i+1} = N \sum_{k=1}^{N} \frac{1}{k} = N \cdot H_N \]
여기서 \(H_N = \sum_{k=1}^N 1/k\) 은 조화급수(harmonic series)이다. \(H_N \approx \ln N + \gamma\) (오일러-마스케로니 상수 \(\gamma \approx 0.5772\) )이므로:
\[ E[T] \approx N \ln N + \gamma N \]
예시: 포켓몬 스티커 150종을 모으려면 평균 \(150 \times H_{150} \approx 150 \times 5.59 \approx 839\) 개가 필요하다. 처음에는 새 스티커를 쉽게 얻지만, 마지막 몇 종을 모으는 데 대부분의 시간이 소요된다.
9 응용 분야
| 분야 | 활용 | 구체적 예시 |
|---|---|---|
| 신뢰성 공학 | 고장까지 시간 | 전구가 최소 30일 작동할 확률 |
| 품질 관리 | 첫 불량까지 생산 수 | 불량률 0.1%일 때 첫 불량까지 평균 1000개 |
| 네트워크 | 재전송 | 패킷 전송 성공까지 필요한 시도 수 |
| 게임 이론 | 드롭 확률 | 희귀 아이템 드롭까지의 시도 수 |
| A/B 테스트 | 조기 종료 | 유의한 결과를 얻기까지의 검정 횟수 |
| 해시 탐사 | 빈 슬롯 탐색 | 충돌 해결에 필요한 탐사 횟수 |
9.1 전구 수명 예시 (Casella & Berger)
전구가 어떤 날에 고장날 확률이 \(p = 0.001\) 이면:
\[ P(X > 30) = (1-0.001)^{30} = 0.999^{30} \approx 0.970 \]
30일 이상 작동할 확률이 약 97%이다. 무기억성에 의해, 이미 100일을 작동한 전구가 추가 30일 이상 작동할 확률도 동일하게 97%이다. 이 “노화 없음(lack of aging)” 성질은 기하 분포가 노화 효과가 있는 수명 모형에는 부적절함을 의미한다.
10 코드 예시
10.1 Step 1: 순수 Python 구현 (원리 이해)
import math
# ----- 기하 분포 기본 성질 -----
p = 0.2
mean = 1 / p
var = (1 - p) / p**2
print(f"Geometric(p={p})")
print(f"E[X] = {mean:.4f}")
print(f"Var(X) = {var:.4f}")
# PMF와 CDF
print(f"\n{'x':>3} | {'P(X=x)':>10} | {'P(X<=x)':>10} | {'P(X>x)':>10}")
print("-" * 50)
cum = 0.0
for x in range(1, 21):
pmf = p * (1-p)**(x-1)
cum += pmf
surv = (1-p)**x
print(f"{x:3d} | {pmf:10.6f} | {cum:10.6f} | {surv:10.6f}")
# ----- 무기억성 검증 -----
t, s = 5, 12
lhs = (1-p)**s / (1-p)**t # P(X>s|X>t)
rhs = (1-p)**(s-t) # P(X>s-t)
print(f"\n무기억성 검증 (t={t}, s={s}):")
print(f" P(X>{s}|X>{t}) = {lhs:.8f}")
print(f" P(X>{s-t}) = {rhs:.8f}")
print(f" 일치: {abs(lhs - rhs) < 1e-12}")
# ----- 쿠폰 수집 문제 -----
def coupon_expected(N):
return N * sum(1.0/k for k in range(1, N+1))
for N in [6, 50, 150, 365]:
e = coupon_expected(N)
print(f"쿠폰 {N}종 수집: 평균 {e:.1f}개 필요 (비율: {e/N:.2f}배)")10.2 Step 2: scipy/numpy 구현 (실무 활용)
import numpy as np
from scipy import stats
# ----- scipy 기하 분포 -----
# scipy: geom(p) — X = 시행 번호 (1, 2, 3, ...)
p = 0.2
dist = stats.geom(p)
print(f"E[X] = {dist.mean():.4f}")
print(f"Var(X) = {dist.var():.4f}")
print(f"P(X > 10) = {1 - dist.cdf(10):.4f} (이론: {(1-p)**10:.4f})")# ----- 쿠폰 수집 시뮬레이션 -----
import numpy as np
def simulate_coupon(N, n_sim=10000):
counts = []
for _ in range(n_sim):
collected = set()
total = 0
while len(collected) < N:
collected.add(np.random.randint(0, N))
total += 1
counts.append(total)
return np.array(counts)
np.random.seed(42)
for N in [6, 50, 150]:
result = simulate_coupon(N, 10000)
theory = N * sum(1/k for k in range(1, N+1))
print(f"N={N:3d}: 시뮬레이션 평균={result.mean():.1f}, "
f"이론값={theory:.1f}, "
f"시뮬레이션 중앙값={np.median(result):.1f}")# ----- 기하 vs 지수 분포 비교 -----
import numpy as np
from scipy import stats
p = 0.05 # 작은 p에서 기하 ≈ 이산 지수
lam = p
# 생존 함수 비교
print(f"{'n':>5} | {'기하 P(X>n)':>14} | {'지수 P(T>n)':>14} | {'차이':>10}")
for n in [10, 20, 50, 100]:
geom_surv = (1 - p)**n
exp_surv = np.exp(-lam * n)
print(f"{n:5d} | {geom_surv:14.6f} | {exp_surv:14.6f} | {abs(geom_surv-exp_surv):.2e}")10.3 R 코드
# R에서의 기하 분포
p <- 0.2
# R의 dgeom/pgeom/rgeom은 "실패 수" 형태 (y = 0, 1, 2, ...)
# 시행 번호 형태는 y+1
cat("E[실패수]:", (1-p)/p, "\n")
cat("E[시행수]:", 1/p, "\n")
# 시뮬레이션
set.seed(42)
failures <- rgeom(10000, prob=p) # 실패 수
trials <- failures + 1 # 시행 번호
cat("표본 평균 (시행수):", mean(trials), "\n")
cat("표본 분산 (시행수):", var(trials), "\n")
# 무기억성 시각적 확인
# 조건부 P(X > s | X > t)가 P(X > s-t)와 같은지
t_val <- 5
conditional <- (1-p)^(1:20) # P(X > n | X > t)의 패턴
unconditional <- (1-p)^(1:20) # P(X > n)
cat("무기억성: 조건부와 무조건부가 동일한지 -", all.equal(conditional, unconditional), "\n")11 관련 주제
선행 지식
후속 주제
관련 개념
- 연속균등 분포 — 무기억성 부재와의 대비
- 포아송 분포 — 사건 간 간격의 기하 분포
- Monte Carlo Simulation — 쿠폰 수집 시뮬레이션