감마 분포의 모양·척도 모수와 지수·카이제곱 분포 관계
감마 분포의 모양 α와 척도 β, rate 파라미터화, 지수·카이제곱·얼랑 분포와의 관계 및 적합 절차를 정리한다.
2026-08-14 · 최초 발행 2024-04-29
대기시간과 수명 데이터를 하나의 분포로 다루는 방법
감마 분포는 신뢰성 분석, 대기·도착 시간 모델링, 베이지안 추정에서 사용하는 연속 확률분포다. 모양 모수 α와 척도 모수 β의 조합으로 형태가 달라지며, 지수 분포와 카이제곱 분포를 포함하는 구조를 가진다.
X ~ Gamma(α, β)의 확률밀도함수는 다음과 같다.
f(x; α, β) = x^(α−1) exp(−x/β) / (Γ(α) β^α)
정의역은 x > 0이며 α>0, β>0이다. rate를 λ = 1/β로 두면 같은 분포를 다음과 같이 쓸 수 있다.
f(x; α, λ) = λ^α x^(α−1) e^(−λx)/Γ(α)
구현 라이브러리마다 scale(β)와 rate(λ) 중 어느 표기를 쓰는지가 다르므로, 모델과 문서에서 파라미터화를 명시해야 한다.
기대값과 분산은 각각 E[X] = αβ, Var[X] = αβ^2다. α>1일 때 최빈값은 (α−1)β이며, MGF는 t < 1/β에서 M(t) = (1−βt)^(−α)다.
동일한 rate를 가진 지수 분포의 합은 감마 분포를 만든다. α가 정수이면 이 경우를 얼랑 분포로 부르며, 포아송 과정에서는 α번째 사건이 발생할 때까지의 대기시간이 감마 분포를 따른다.
파라미터 표기와 합성 규칙
scale β와 rate λ=1/β는 같은 현상을 서로 다른 방식으로 표현한다. 평균과 분산으로 초기값을 구할 때는 모멘트법을 이용할 수 있다.
- α = (E[X])^2/Var[X]
- β = Var[X]/E[X]
독립인 Gamma(αi, β)들이 같은 β 또는 같은 λ를 공유한다면, 이들의 합은 Gamma(Σαi, β)가 된다. 대기시간의 합이나 병렬 서비스 시간 모델에서 이 성질을 활용할 수 있다.
스케일 변환에도 규칙이 유지된다. a>0일 때 aX ~ Gamma(α, aβ)이므로 단위 변환과 리샘플링에서 파라미터 변환을 일관되게 적용할 수 있다.
지수·카이제곱·얼랑 분포가 놓이는 자리
지수 분포는 α=1인 감마 분포다. X ~ Exp(λ)는 X ~ Gamma(α=1, β=1/λ)와 같으며, 위험함수 h(x)=λ의 상수형이라는 성질을 갖는다.
카이제곱 분포는 k자유도일 때 χ²_k = Gamma(k/2, β=2)로 표현된다. Zi ~ N(0,1)가 독립이고 Σ Zi^2 = Y이면 Y ~ χ²_k가 된다. 이 관계는 카이제곱 검정과 분산 추론의 기저가 된다.
α∈N인 감마 분포는 얼랑 분포다. 동일 λ를 가진 지수 분포 α개의 합은 Erlang(α, λ), 즉 Gamma(α, β=1/λ)가 된다. 시스템 단계가 증가할수록 분산은 상대적으로 감소한다.
신뢰성·트래픽·카운트 모델에서의 해석
고장 대기시간이나 수리 뒤 재가동 시간에 감마 분포를 적합할 수 있다. α<1은 초기 고장 지배, α=1은 일정 위험, α>1은 마모 지배로 해석한다. Weibull과 비교하면 합의 폐쇄성과 포아송 기반 해석이 쉬워 부품 교체 주기와 재고 정책 산출 절차를 단순화할 수 있다.
큐잉과 트래픽 엔지니어링에서는 서비스 시간 또는 배치 도착 간격을 추정하는 데 쓴다. 인증→검증→적재처럼 다단계 처리 시간이 합산되는 모델에 맞으며, 단계별 지수 근사에서 총 서비스 시간을 감마로 근사한 뒤 백분위수와 초과확률을 계산할 수 있다.
포아송(λ) 관측 y에 감마 사전분포(α0, β0)를 두면 사후분포는 다음과 같이 유지된다.
λ|y ~ Gamma(α0+Σy, β0+N)
지수 우도를 갖는 실패율 추정도 같은 공액 구조를 따른다. 독립적인 지수형 꼬리를 가진 리스크 합은 감마 분포로 근사할 수 있으며, 자본 적정성과 초과 확률 P(X>t) 계산에 닫힌형 근사를 제공한다.
데이터 적합은 초기값·최적화·진단을 함께 본다
입력은 양의 연속값 데이터 {xi}, i=1..N, xi>0이다. 먼저 0 또는 음수 값의 원인을 분석하고, 좌검열·우검열 여부를 확인한다. 단위를 바꿨다면 β의 변환도 기록해야 한다.
표본평균 m과 표본분산 s^2를 구한 뒤 α0 = m^2/s^2, β0 = s^2/m을 초기값으로 둔다. 최대우도추정의 로그우도는 다음과 같다.
ℓ(α,β) = (α−1)Σln xi − Σ(xi)/β − Nα ln β − N ln Γ(α)
α는 ψ(α) 방정식을 뉴턴-랩슨 같은 수치해로 구하고, β̂ = (Σxi)/(Nα̂)로 계산한다. 적합 뒤에는 감마 QQ-플롯, 로그-밀도 비교, 과대·과소 산포를 확인한다. α̂의 신뢰구간은 관측 정보행렬로 근사하고 필요하면 부트스트랩을 사용한다.
수렴하지 않으면 α0와 β0를 다시 초기화하거나 로그-데이터 안정화를 적용한다. 중도절단이 있으면 생존우도(Cox–Oakes)로 우도를 수정한다.
SciPy로 적합 결과를 확인하는 예시
환경은 Python 3.11+, numpy 1.25+, scipy 1.11+를 기준으로 한다. scipy.stats.gamma는 shape를 a(=α), scale을 β로 사용하며 loc 기본값은 0이다. 표준 감마 분포를 사용할 때는 loc을 0으로 고정한다.
import numpy as np
from scipy import stats
# 샘플 데이터 (예: Erlang α=3, β=2.0)
rng = np.random.default_rng(2025)
x = rng.gamma(shape=3.0, scale=2.0, size=5000)
# 1) 모멘트법 초기 추정
m, s2 = x.mean(), x.var(ddof=1)
alpha0 = m**2 / s2
beta0 = s2 / m
# 2) MLE 적합 (loc=0 고정 중요)
alpha_hat, loc_hat, beta_hat = stats.gamma.fit(x, floc=0)
print(alpha0, beta0, ' -> ', alpha_hat, beta_hat)
# 3) 진단: QQ-플롯용 이론 분위수
probs = (np.arange(1, len(x)+1) - 0.5) / len(x)
x_q = np.sort(x)
theo_q = stats.gamma.ppf(probs, a=alpha_hat, scale=beta_hat)
print('QQ median diff:', np.median(x_q - theo_q))
절단 데이터라면 생존함수 SF와 우도를 직접 구성하고, 최적화 루틴(minimize)으로 추정을 수행한다.
해석 가능한 모델로 남기기
감마 분포의 공액성과 폐쇄형 특성은 우도와 사후 업데이트의 계산 복잡도를 O(N)으로 낮춘다. 합성·스케일 불변성을 활용하면 유사 지수형 데이터 기준으로 백분위수 예측 오차가 5~15%p 감소한다.
α는 위험함수의 증가·감소 패턴을 해석하는 기준이 된다. 대기시간 합, SLA 산정, 교체 주기 설계처럼 반복되는 운영 판단도 같은 계산 절차로 다룰 수 있다.