1 왜 감마 분포인가
정규 분포가 실수 전체에 걸친 대칭 현상을 모델링한다면, 감마 분포는 양수 값만 갖는 현상 — 대기 시간, 강수량, 수명, 소득 — 을 모델링한다. 하나의 분포가 아니라 형상 모수 \(\alpha\) 를 조절함으로써 지수 분포, 카이제곱 분포, 에를랑(Erlang) 분포를 통합하는 분포 가족(family)이다.
- 유연성: \(\alpha < 1\) (단조감소), \(\alpha = 1\) (지수), \(\alpha > 1\) (종 모양, 우편향) — 하나의 모수로 다양한 형태
- 지수족 소속: 충분통계량, MLE, 베이지안 켤레 사전분포 모두 닫힌 형식
- 닫힘성: 독립 감마 합 → 감마. 포아송 과정의 대기 시간이 정확히 감마를 따름
- 카이제곱·지수의 어머니 분포: 통계 추론에서 반복적으로 등장하는 두 분포가 모두 특수 케이스
2 감마 함수 (Gamma Function)
감마 분포를 정의하기 전에 정규화 상수가 되는 감마 함수를 먼저 이해한다.
\[ \Gamma(\alpha) = \int_0^\infty t^{\alpha-1} e^{-t} \, dt, \quad \alpha > 0 \]
\(\Gamma(\alpha)\) 를 말로 표현하면 “팩토리얼을 양의 실수 전체로 확장한 함수”이다.
피적분함수 \(t^{\alpha-1} e^{-t}\) 는 두 힘의 균형으로 이루어진다.
- \(t^{\alpha-1}\): \(t\) 가 커질수록 증가하는 힘
- \(e^{-t}\): \(t\) 가 커질수록 지수적으로 감소하는 힘
두 힘이 균형을 이루는 지점 \(t = \alpha - 1\) 근방에서 피적분함수가 봉우리를 가진다. \(\alpha\) 가 클수록 봉우리가 오른쪽으로 이동하고 적분값 \(\Gamma(\alpha)\) 가 커진다.
정수 \(\alpha = n\) 에서: 봉우리가 \(t = n-1\) 에 있고 적분하면 \((n-1)!\).
\(e^{-t}\) 항이 없으면 \(\int_0^\infty t^{\alpha-1} dt\) 는 발산한다. \(t^{\alpha-1}\) 항이 없으면(\(\alpha = 1\)) 단순한 지수 적분으로 \(\Gamma(1) = 1 = 0!\).
2.1 핵심 성질
재귀 관계 (Recursion):
\[ \Gamma(\alpha + 1) = \alpha \, \Gamma(\alpha), \quad \alpha > 0 \]
증명 (부분적분): \(u = t^\alpha\), \(dv = e^{-t} dt\) 로 놓으면:
\[ \Gamma(\alpha+1) = \int_0^\infty t^\alpha e^{-t} dt = \left[-t^\alpha e^{-t}\right]_0^\infty + \alpha \int_0^\infty t^{\alpha-1} e^{-t} dt = 0 + \alpha\,\Gamma(\alpha) \]
경계항은 \(t \to 0\) 과 \(t \to \infty\) 모두 0 이다. \(\square\)
이 관계는 팩토리얼 재귀 \(n! = n \cdot (n-1)!\) 의 연속 버전이다.
경계항이 0이 되는 이유: \(t \to \infty\) 일 때 \(t^\alpha\) 가 아무리 빠르게 커져도 \(e^{-t}\) 가 더 빠르게 0으로 수렴하여 \(t^\alpha e^{-t} \to 0\). \(t \to 0\) 일 때는 \(\alpha > 0\) 이므로 \(t^\alpha \to 0\).
이 재귀 덕분에 임의의 \(\alpha > 0\) 에 대한 \(\Gamma(\alpha)\) 를 \(0 < \alpha \le 1\) 구간의 값만으로 분해할 수 있다.
예: \(\Gamma(5.3) = 4.3 \times 3.3 \times 2.3 \times 1.3 \times \Gamma(0.3)\).
이 재귀가 없으면 각 \(\alpha\) 에 대해 정의 적분을 새로 계산해야 한다.
정수에서의 값: \(\Gamma(1) = \int_0^\infty e^{-t} dt = 1\) 이므로 재귀 적용하면:
\[ \Gamma(n) = (n-1)!, \quad n = 1, 2, 3, \ldots \]
반정수: \(w = t^{1/2}\) 치환과 가우시안 적분 \(\int_{-\infty}^\infty e^{-z^2/2} dz = \sqrt{2\pi}\) 를 이용하면:
\[ \Gamma\!\left(\tfrac{1}{2}\right) = \int_0^\infty t^{-1/2} e^{-t} dt = \sqrt{\pi} \]
재귀로부터: \(\Gamma(3/2) = (1/2)\Gamma(1/2) = \sqrt{\pi}/2\).
| \(\alpha\) | \(\Gamma(\alpha)\) |
|---|---|
| 1 | 1 = 0! |
| 2 | 1 = 1! |
| 3 | 2 = 2! |
| 4 | 6 = 3! |
| 1/2 | \(\sqrt{\pi}\) |
| 3/2 | \(\sqrt{\pi}/2\) |
| 5/2 | \(3\sqrt{\pi}/4\) |
3 감마 분포 정의
핵심 아이디어: \(f(t) = t^{\alpha-1} e^{-t} / \Gamma(\alpha)\) 는 이미 PDF의 조건 \(f \ge 0\), \(\int f = 1\) 을 만족한다 (피적분함수가 양수이고, 정규화 상수가 \(\Gamma(\alpha)\) 이므로). 여기에 척도 모수 \(\beta\) 를 도입하기 위해 \(X = \beta T\) 변환 (Casella & Berger, 2002, Ch.3.3) 을 적용한다.
\(X \sim \text{Gamma}(\alpha, \beta)\) 이면:
\[ f(x \mid \alpha, \beta) = \frac{1}{\Gamma(\alpha)\,\beta^\alpha}\, x^{\alpha-1} e^{-x/\beta}, \quad x > 0 \]
- \(\alpha > 0\): 형상 모수(shape parameter) — 분포의 뾰족함·치우침을 결정
- \(\beta > 0\): 척도 모수(scale parameter) — 분포의 퍼짐(scale)을 결정
모수화 주의: rate parameter \(\lambda = 1/\beta\) 를 사용하는 표기도 흔하다 (scipy, Stan 등). 소프트웨어·교재마다 확인이 필요하다.
\[f(x \mid \alpha, \beta) = \underbrace{\frac{1}{\Gamma(\alpha)\,\beta^\alpha}}_{\text{정규화 상수}} \cdot \underbrace{x^{\alpha-1}}_{\text{형상 항}} \cdot \underbrace{e^{-x/\beta}}_{\text{감쇠 항}}, \quad x > 0\]
- 정규화 상수 \(1/(\Gamma(\alpha)\beta^\alpha)\): 전체 면적을 1로 만드는 역할이다. 분포의 형태는 건드리지 않고 크기만 조정한다.
- 형상 항 \(x^{\alpha-1}\): \(\alpha = 1\) 이면 \(x^0 = 1\) 로 사라진다(지수 분포). \(\alpha > 1\) 이면 작은 \(x\) 에서 밀도가 낮다 — “\(\alpha - 1\) 번의 선행 사건이 있어야 한다”는 대기 구조다. \(\alpha < 1\) 이면 \(x \to 0\) 에서 밀도가 발산한다.
- 감쇠 항 \(e^{-x/\beta}\): 시간이 길어질수록 밀도가 지수적으로 감소한다. \(\beta\) 가 크면 감소가 느리다 — 평균 대기 시간이 길다.
- 두 항의 경쟁: \(x^{\alpha-1}\) 은 \(x\) 가 커질수록 밀도를 높이고, \(e^{-x/\beta}\) 는 낮춘다. 이 균형점이 최빈값 \((\alpha-1)\beta\) 이다. 이 두 항 중 하나만 있으면 단조 감소만 생기고 종 모양은 생기지 않는다.
3.1 PDF의 형태
\(\alpha\) 값에 따라 분포의 형태가 크게 달라진다:
| \(\alpha\) 범위 | 형태 | 대표 분포 |
|---|---|---|
| \(0 < \alpha < 1\) | \(x=0\) 에서 발산, 단조 감소 | — |
| \(\alpha = 1\) | 단조 감소 | 지수 분포 |
| \(\alpha > 1\) | 우편향 단봉 | 에를랑, 카이제곱 |
| \(\alpha \to \infty\) | 정규 분포에 수렴 | — |
최빈값(mode): \(\alpha > 1\) 이면 \(x^* = (\alpha-1)\beta\).
4 평균과 분산 유도 — 커널 기법
Casella & Berger(2002, Ch.3.3)의 핵심 테크닉: 적분을 다른 PDF의 커널로 인식하여 계산한다.
커널 적분 공식: 감마 PDF의 정규화 조건에서,
\[ \int_0^\infty x^{a-1} e^{-x/b} dx = \Gamma(a)\, b^a \quad (a > 0,\ b > 0) \]
커널 기법의 핵심은 “이 피적분함수는 어떤 PDF의 정규화되지 않은 버전인가?”를 묻는 것이다.
\(\text{Gamma}(a, b)\) 의 PDF는 \(\frac{1}{\Gamma(a) b^a} x^{a-1} e^{-x/b}\) 이고, 이 PDF의 전체 적분은 1이다.
따라서: \(\int_0^\infty x^{a-1} e^{-x/b} dx = \Gamma(a) b^a\).
평균을 구할 때 \(\int x \cdot x^{\alpha-1} e^{-x/\beta} dx = \int x^\alpha e^{-x/\beta} dx\) 가 등장한다. 지수가 \(\alpha \to \alpha+1\) 로 올라간 감마 커널이므로 결과는 \(\Gamma(\alpha+1) \beta^{\alpha+1}\) 이다. 분모 \(\Gamma(\alpha)\beta^\alpha\) 와 약분하면 \(\Gamma(\alpha+1)/\Gamma(\alpha) \cdot \beta = \alpha\beta\).
이 방법이 강력한 이유: 치환적분이나 반복 부분적분 없이 “형태 인식”만으로 적분 결과를 즉시 얻는다.
4.1 평균 \(E[X]\)
\[ E[X] = \frac{1}{\Gamma(\alpha)\beta^\alpha} \int_0^\infty x \cdot x^{\alpha-1} e^{-x/\beta} dx = \frac{1}{\Gamma(\alpha)\beta^\alpha} \int_0^\infty x^\alpha e^{-x/\beta} dx \]
피적분함수는 \(\text{Gamma}(\alpha+1, \beta)\) 의 커널이다:
\[ = \frac{1}{\Gamma(\alpha)\beta^\alpha} \cdot \Gamma(\alpha+1)\,\beta^{\alpha+1} = \frac{\alpha\,\Gamma(\alpha)\,\beta}{\Gamma(\alpha)} = \alpha\beta \]
4.2 분산 \(\text{Var}(X)\)
\(E[X^2]\) 계산: 피적분함수가 \(\text{Gamma}(\alpha+2, \beta)\) 의 커널:
\[ E[X^2] = \frac{\Gamma(\alpha+2)\,\beta^{\alpha+2}}{\Gamma(\alpha)\,\beta^\alpha} = \frac{(\alpha+1)\alpha\,\Gamma(\alpha)\,\beta^2}{\Gamma(\alpha)} = \alpha(\alpha+1)\beta^2 \]
\[ \text{Var}(X) = E[X^2] - (E[X])^2 = \alpha(\alpha+1)\beta^2 - \alpha^2\beta^2 = \alpha\beta^2 \]
5 적률생성함수 (MGF) 유도
Casella & Berger(2002, Example 2.3.8)의 유도:
\[ M_X(t) = \frac{1}{\Gamma(\alpha)\beta^\alpha} \int_0^\infty e^{tx} x^{\alpha-1} e^{-x/\beta} dx = \frac{1}{\Gamma(\alpha)\beta^\alpha} \int_0^\infty x^{\alpha-1} e^{-x\left(\frac{1}{\beta} - t\right)} dx \]
\(t < 1/\beta\) 이면 \(\frac{1}{\beta} - t > 0\) 이므로 유효 척도 모수를 \(\beta^* = \frac{\beta}{1-\beta t}\) 로 정의하면:
\[ = \frac{1}{\Gamma(\alpha)\beta^\alpha} \int_0^\infty x^{\alpha-1} e^{-x/\beta^*} dx = \frac{1}{\Gamma(\alpha)\beta^\alpha} \cdot \Gamma(\alpha)(\beta^*)^\alpha \]
\[ \boxed{M_X(t) = \left(\frac{1}{1 - \beta t}\right)^\alpha, \quad t < \frac{1}{\beta}} \]
MGF를 \((1 - \beta t)^{-\alpha}\) 로 읽으면 두 모수가 분리되어 보인다.
- \(\beta\) (척도): MGF가 발산하는 임계점 \(t = 1/\beta\) 를 결정한다. \(\beta\) 가 크면 더 작은 \(t\) 에서 발산 — 분포의 꼬리가 더 무겁고 평균·분산이 크다.
- \(\alpha\) (형상): 지수의 크기. 독립 합에서 자연스럽게 더해진다: \((1-\beta t)^{-\alpha_1} \cdot (1-\beta t)^{-\alpha_2} = (1-\beta t)^{-(\alpha_1+\alpha_2)}\). MGF의 곱이 지수의 합으로 나타나는 것이 닫힘성의 수학적 표현이다.
- 적분 발산 이유 (\(t \ge 1/\beta\)): \(e^{tx}\) 의 성장이 \(e^{-x/\beta}\) 의 감쇠를 상쇄하여 전체 적분이 수렴하지 않는다.
\(t \ge 1/\beta\) 이면 적분이 발산하므로 MGF가 존재하지 않는다.
MGF로부터 적률 확인:
\[ M_X'(t)\big|_{t=0} = \frac{\alpha\beta}{(1-\beta t)^{\alpha+1}}\bigg|_{t=0} = \alpha\beta = E[X] \quad \checkmark \]
6 성질
6.1 닫힘성 (Closure under Addition)
\(X_i \sim \text{Gamma}(\alpha_i, \beta)\) 독립이면:
\[ \sum_{i=1}^n X_i \sim \text{Gamma}\!\left(\sum_{i=1}^n \alpha_i,\ \beta\right) \]
증명: MGF의 곱 \(M_{\sum X_i}(t) = \prod (1-\beta t)^{-\alpha_i} = (1-\beta t)^{-\sum\alpha_i}\). \(\square\)
핵심: 척도 모수 \(\beta\) 가 동일해야 한다.
6.2 스케일링
\(c > 0\) 이면 \(cX \sim \text{Gamma}(\alpha, c\beta)\). 형상은 유지되고 척도만 변한다.
7 특수 케이스
7.1 지수 분포 (Exponential Distribution): \(\alpha = 1\)
\[ X \sim \text{Gamma}(1, \beta) \iff f(x) = \frac{1}{\beta} e^{-x/\beta},\ x > 0 \]
\(E[X] = \beta\), \(\text{Var}(X) = \beta^2\), \(M_X(t) = (1-\beta t)^{-1}\).
지수 분포는 감마 분포 가족에서 \(\alpha=1\) 인 단일 모수 분포이다. 개별 포스트에서 무기억성(memoryless property) 등을 상세히 다룬다.
7.2 카이제곱 분포 (Chi-squared Distribution): \(\alpha = \nu/2\), \(\beta = 2\)
\[ X \sim \text{Gamma}(\nu/2, 2) \iff X \sim \chi^2(\nu) \]
\[ f(x \mid \nu) = \frac{1}{\Gamma(\nu/2)\, 2^{\nu/2}}\, x^{\nu/2-1} e^{-x/2}, \quad x > 0 \]
\(E[X] = \nu\), \(\text{Var}(X) = 2\nu\), \(M_X(t) = (1-2t)^{-\nu/2}\).
\(Z_1, \ldots, Z_\nu \sim N(0,1)\) 독립이면 \(\sum Z_i^2 \sim \chi^2(\nu)\). 표본 분산의 분포, 검정 통계량에서 핵심적으로 등장한다.
7.3 에를랑 분포 (Erlang Distribution): \(\alpha = k\) (양의 정수)
\[ X \sim \text{Gamma}(k, \beta), \quad k \in \mathbb{Z}^+ \]
포아송 과정에서 rate \(\lambda = 1/\beta\) 로 \(k\) 번째 사건이 발생하기까지의 대기 시간이 정확히 \(\text{Erlang}(k, \lambda) = \text{Gamma}(k, 1/\lambda)\) 를 따른다.
\[ \text{Gamma}(\alpha, \beta) \begin{cases} \alpha = 1 \quad &\Rightarrow \text{Exp}(\beta) \\ \alpha = \nu/2,\ \beta = 2 \quad &\Rightarrow \chi^2(\nu) \\ \alpha = k \in \mathbb{Z}^+ \quad &\Rightarrow \text{Erlang}(k, 1/\beta) \end{cases} \]
8 감마-포아송 관계
Casella & Berger(2002, Example 3.3.1)에서 증명하는 중요한 관계:
\(X \sim \text{Gamma}(\alpha, \beta)\) 이고 \(\alpha\) 가 양의 정수이면, 임의의 \(x > 0\) 에 대해:
\[ P(X \le x) = P(Y \ge \alpha), \quad Y \sim \text{Poisson}(x/\beta) \]
직관: rate \(\lambda = 1/\beta\) 의 포아송 과정에서 시각 \(x\) 이전에 사건이 \(\alpha\) 번 이상 발생할 확률 = 감마 CDF. 포아송 과정의 대기 시간(감마)과 사건 횟수(포아송) 사이의 이중성(duality)이다.
9 와이블 분포와의 관계 (Weibull Distribution)
\(X \sim \text{Exp}(\beta)\) 이면 \(Y = X^{1/\gamma}\) 는 와이블 분포를 따른다:
\[ f_Y(y \mid \gamma, \beta) = \frac{\gamma}{\beta} y^{\gamma-1} e^{-y^\gamma/\beta}, \quad y > 0,\ \gamma > 0 \]
\(\gamma = 1\) 이면 지수 분포로 환원된다. 와이블 분포는 생존 분석(survival analysis)에서 위험함수(hazard function)가 단조 증가·감소하는 경우를 모델링한다.
10 모수화 주의사항
감마 분포는 소프트웨어·교재마다 모수화가 다르다:
| 표기 | 모수 | E[X] | scipy 인수 |
|---|---|---|---|
| \(\text{Gamma}(\alpha, \beta)\) (scale) | shape \(\alpha\), scale \(\beta\) | \(\alpha\beta\) | gamma(a=α, scale=β) |
| \(\text{Gamma}(\alpha, \lambda)\) (rate) | shape \(\alpha\), rate \(\lambda=1/\beta\) | \(\alpha/\lambda\) | gamma(a=α, scale=1/λ) |
R의 rgamma(n, shape, rate) 와 rgamma(n, shape, scale) 은 서로 역수 관계이다. Stan의 gamma(alpha, beta) 는 rate 모수화이다. scipy의 gamma(a, scale) 은 scale 모수화이다. 코드를 쓸 때마다 문서를 확인한다.
11 코드 예시
11.1 Step 1: 순수 Python — 감마 함수·PDF·MGF 직접 구현
import math
# 감마 함수 (재귀 성질 확인)
def my_gamma(alpha, tol=1e-10):
"""수치 적분으로 Γ(alpha) 계산"""
# 심프슨 규칙 (0~100 구간, 큰 t에서 0에 가까우므로 충분)
n, b = 10000, 30
h = b / n
xs = [i * h for i in range(n + 1)]
ys = [(x**(alpha-1) * math.exp(-x)) if x > 0 else 0.0 for x in xs]
s = ys[0] + ys[-1]
s += 4 * sum(ys[i] for i in range(1, n, 2))
s += 2 * sum(ys[i] for i in range(2, n-1, 2))
return s * h / 3
# 재귀 성질 검증: Γ(α+1) = α·Γ(α)
print("=== 감마 함수 재귀 성질 검증 ===")
for alpha in [0.5, 1.0, 2.0, 3.5]:
g_a = math.gamma(alpha)
g_a1 = math.gamma(alpha + 1)
ratio = g_a1 / g_a
print(f"α={alpha}: Γ(α+1)/Γ(α) = {ratio:.6f} (이론: {alpha:.6f})")
# 특수값 확인
print(f"\nΓ(1/2) = {math.gamma(0.5):.8f} (이론: √π = {math.sqrt(math.pi):.8f})")
print(f"Γ(5) = {math.gamma(5):.1f} (이론: 4! = 24)")
# 감마 분포 PDF
def gamma_pdf(x, alpha, beta):
if x <= 0:
return 0.0
return (x**(alpha-1) * math.exp(-x/beta)) / (math.gamma(alpha) * beta**alpha)
# MGF
def gamma_mgf(t, alpha, beta):
if t >= 1/beta:
return float('inf')
return (1 - beta*t)**(-alpha)
# E[X] = M'(0) 수치 미분으로 확인
h = 1e-6
alpha, beta = 3.0, 2.0
mgf_deriv = (gamma_mgf(h, alpha, beta) - gamma_mgf(-h, alpha, beta)) / (2*h)
print(f"\n=== Gamma({alpha}, {beta}) MGF 검증 ===")
print(f"E[X] from MGF = {mgf_deriv:.6f} (이론: α·β = {alpha*beta})")
# 형상 모수별 최빈값
print(f"\n=== 형상 모수별 최빈값 (beta={beta}) ===")
for a in [0.5, 1.0, 2.0, 4.0, 8.0]:
mode = (a - 1) * beta if a > 1 else 0.0
mean = a * beta
print(f"α={a:4.1f}: mode={mode:5.1f}, mean={mean:5.1f}")=== 감마 함수 재귀 성질 검증 ===
α=0.5: Γ(α+1)/Γ(α) = 0.500000 (이론: 0.500000)
α=1.0: Γ(α+1)/Γ(α) = 1.000000 (이론: 1.000000)
α=2.0: Γ(α+1)/Γ(α) = 2.000000 (이론: 2.000000)
α=3.5: Γ(α+1)/Γ(α) = 3.500000 (이론: 3.500000)
Γ(1/2) = 1.77245385 (이론: √π = 1.77245385)
Γ(5) = 24.0 (이론: 4! = 24)
=== Gamma(3.0, 2.0) MGF 검증 ===
E[X] from MGF = 6.000000 (이론: α·β = 6.0)
=== 형상 모수별 최빈값 (beta=2.0) ===
α= 0.5: mode= 0.0, mean= 1.0
α= 1.0: mode= 0.0, mean= 2.0
α= 2.0: mode= 2.0, mean= 4.0
α= 4.0: mode= 6.0, mean= 8.0
α= 8.0: mode= 14.0, mean= 16.0
11.2 Step 2: scipy.stats — 특수 케이스 통합 검증
import numpy as np
from scipy import stats
# 감마 · 지수 · 카이제곱이 하나의 분포족임을 확인
alpha, beta = 3.0, 2.0
np.random.seed(42)
N = 100_000
# Gamma(α, β)
gamma_samples = np.random.gamma(shape=alpha, scale=beta, size=N)
# Exp(β) = Gamma(1, β)
exp_samples = np.random.exponential(scale=beta, size=N)
gamma1_samples = np.random.gamma(shape=1, scale=beta, size=N)
# Chi2(ν) = Gamma(ν/2, 2)
nu = 6
chi2_samples = np.random.chisquare(df=nu, size=N)
gamma_chi2_samples = np.random.gamma(shape=nu/2, scale=2.0, size=N)
print("=== Gamma vs 특수 케이스 통계량 비교 ===")
print(f"\nGamma({alpha}, {beta}):")
print(f" 표본 평균={gamma_samples.mean():.4f} (이론: {alpha*beta})")
print(f" 표본 분산={gamma_samples.var():.4f} (이론: {alpha*beta**2})")
print(f"\nExp({beta}) vs Gamma(1, {beta}):")
print(f" Exp 평균={exp_samples.mean():.4f}, 분산={exp_samples.var():.4f}")
print(f" Gamma1 평균={gamma1_samples.mean():.4f}, 분산={gamma1_samples.var():.4f}")
print(f" 이론: 평균={beta}, 분산={beta**2}")
print(f"\nChi2({nu}) vs Gamma({nu/2}, 2):")
print(f" Chi2 평균={chi2_samples.mean():.4f}, 분산={chi2_samples.var():.4f}")
print(f" Gamma 평균={gamma_chi2_samples.mean():.4f}, 분산={gamma_chi2_samples.var():.4f}")
print(f" 이론: 평균={nu}, 분산={2*nu}")
# KS 검정: Chi2(6)과 Gamma(3, 2)가 같은 분포인지
ks_stat, p_val = stats.ks_2samp(chi2_samples, gamma_chi2_samples)
print(f"\nKS test Chi2({nu}) vs Gamma({nu/2}, 2): stat={ks_stat:.4f}, p={p_val:.4f} ({'동일' if p_val > 0.05 else '다름'})")=== Gamma vs 특수 케이스 통계량 비교 ===
Gamma(3.0, 2.0):
표본 평균=5.9993 (이론: 6.0)
표본 분산=12.0041 (이론: 12.0)
Exp(2.0) vs Gamma(1, 2.0):
Exp 평균=1.9982, 분산=4.0094
Gamma1 평균=2.0042, 분산=3.9891
이론: 평균=2.0, 분산=4.0
Chi2(6) vs Gamma(3.0, 2):
Chi2 평균=5.9969, 분산=12.0145
Gamma 평균=6.0009, 분산=12.0036
이론: 평균=6, 분산=12
KS test Chi2(6) vs Gamma(3.0, 2): stat=0.0040, p=0.3802 (동일)
11.3 Step 3: 닫힘성과 포아송 과정 연결
import numpy as np
from scipy import stats
np.random.seed(0)
N = 50_000
# ── 닫힘성 검증: Gamma(α1,β) + Gamma(α2,β) ~ Gamma(α1+α2, β) ──
alpha1, alpha2, beta = 2.0, 3.0, 1.5
X1 = np.random.gamma(alpha1, beta, N)
X2 = np.random.gamma(alpha2, beta, N)
S = X1 + X2
ks_stat, p_val = stats.kstest(S, 'gamma', args=(alpha1+alpha2, 0, beta))
print(f"닫힘성: Gamma({alpha1},{beta}) + Gamma({alpha2},{beta}) ~ Gamma({alpha1+alpha2},{beta})")
print(f" KS test: stat={ks_stat:.5f}, p={p_val:.4f} ({'OK' if p_val>0.05 else 'FAIL'})")
print(f" 합 표본 평균={S.mean():.4f} (이론: {(alpha1+alpha2)*beta:.1f})")
# ── 포아송 과정: k번째 사건까지의 대기시간 = Gamma(k, 1/λ) ──
lam = 3.0 # 단위 시간당 평균 사건 수 (rate)
k = 4 # k번째 사건까지의 대기 시간
# 시뮬레이션: 지수 분포 간격의 합 (Erlang)
wait_times = []
for _ in range(N):
intervals = np.random.exponential(1/lam, k) # k개 간격
wait_times.append(intervals.sum())
wait_times = np.array(wait_times)
# 이론: Gamma(k, 1/λ)
ks_stat, p_val = stats.kstest(wait_times, 'gamma', args=(k, 0, 1/lam))
print(f"\n포아송 과정 (λ={lam}): {k}번째 사건까지 대기시간 ~ Gamma({k}, 1/λ={1/lam:.3f})")
print(f" KS test: stat={ks_stat:.5f}, p={p_val:.4f} ({'OK' if p_val>0.05 else 'FAIL'})")
print(f" 표본 평균={wait_times.mean():.4f} (이론: k/λ = {k/lam:.4f})")
print(f" 표본 분산={wait_times.var():.4f} (이론: k/λ² = {k/lam**2:.4f})")
# ── 감마-포아송 관계: P(Gamma ≤ x) = P(Poisson ≥ α) ──
alpha_int = 3 # 정수 shape
beta_p = 2.0
x_val = 5.0
gamma_cdf = stats.gamma.cdf(x_val, a=alpha_int, scale=beta_p)
# P(Y ≥ α) where Y ~ Poisson(x/β)
poisson_prob = 1 - stats.poisson.cdf(alpha_int - 1, mu=x_val/beta_p)
print(f"\n감마-포아송 관계: X ~ Gamma({alpha_int}, {beta_p}), Y ~ Poisson({x_val/beta_p})")
print(f" P(X ≤ {x_val}) = {gamma_cdf:.6f}")
print(f" P(Y ≥ {alpha_int}) = {poisson_prob:.6f}")
print(f" 동일한가: {'YES' if abs(gamma_cdf - poisson_prob) < 1e-6 else 'NO'}")닫힘성: Gamma(2.0,1.5) + Gamma(3.0,1.5) ~ Gamma(5.0,1.5)
KS test: stat=0.00368, p=0.5291 (OK)
합 표본 평균=7.5026 (이론: 7.5)
포아송 과정 (λ=3.0): 4번째 사건까지 대기시간 ~ Gamma(4, 1/λ=0.333)
KS test: stat=0.00414, p=0.4004 (OK)
표본 평균=1.3340 (이론: k/λ = 1.3333)
표본 분산=0.4465 (이론: k/λ² = 0.4444)
감마-포아송 관계: X ~ Gamma(3, 2.0), Y ~ Poisson(2.5)
P(X ≤ 5.0) = 0.456190
P(Y ≥ 3) = 0.456190
동일한가: YES
12 응용 분야
| 분야 | 활용 | 구체적 예시 |
|---|---|---|
| 대기 행렬 이론 | \(k\) 번째 고객 도착까지 대기 시간 | 콜센터, 패킷 전송 |
| 신뢰성 공학 | 부품의 수명 분포 | 다단계 직렬 시스템 |
| 베이지안 통계 | 포아송 rate의 켤레 사전분포 | \(\lambda \mid \alpha,\beta \sim \text{Gamma}(\alpha, 1/\beta)\) |
| 의료 통계 | 생존 시간 (에를랑) | 특정 단계 치료 후 생존 |
| 기상·수문 | 강수량, 홍수 최대치 | 연간 최대 강수량 |
| 보험 수리 | 총 손해액 분포 | 손해 건수(포아송) × 건당 손해(지수) |
13 성질 요약
| 성질 | 값 |
|---|---|
| 지지 | \((0, \infty)\) |
| 평균 \(E[X]\) | \(\alpha\beta\) |
| 분산 \(\text{Var}(X)\) | \(\alpha\beta^2\) |
| 왜도(skewness) | \(2/\sqrt{\alpha}\) |
| 첨도(excess kurtosis) | \(6/\alpha\) |
| MGF \(M_X(t)\) | \((1-\beta t)^{-\alpha}\), \(t < 1/\beta\) |
| 최빈값 | \((\alpha-1)\beta\) (\(\alpha > 1\)), \(0\) (\(\alpha \le 1\)) |
| 지수족 여부 | O |
| 닫힘성 | 척도 동일한 독립 합 |
14 관련 주제
선행 지식
후속 주제 (특수 케이스 개별 포스트)
관련 개념