지수 분포로 생존시간과 사건 간격 모델링하기
지수 분포의 메모리리스 속성, 상수 위험률, 검열 데이터를 포함한 MLE 추정과 생존 분석 진단 방법을 정리한다.
2026-08-14 · 최초 발행 2024-04-29
사건이 일어난 뒤에도 위험이 같다는 가정
지수 분포(Exponential Distribution)는 시간 간격과 생존시간을 표현할 때 자주 쓰는 연속 확률분포다. 평균, 분산, 생존함수, 위험함수가 단일 매개변수 λ로 정리되며, 대기·도착·고장 간격처럼 과거 경과시간이 현재 위험을 바꾸지 않는 상황에 맞는다.
이 모형의 전제는 위험률이 시간에 따라 일정하다는 것이다. 마모나 학습 효과가 두드러지는 데이터라면 이 가정부터 점검해야 한다.
- 확률밀도함수(pdf): f(t) = λ e^(−λt), t ≥ 0, λ > 0
- 누적분포함수(cdf): F(t) = 1 − e^(−λt)
- 생존함수(Survival): S(t) = P(T > t) = e^(−λt)
- 위험함수(Hazard): h(t) = f(t)/S(t) = λ(상수)
- 평균, 분산: E[T] = 1/λ, Var(T) = 1/λ²
- 메모리리스(Memoryless): P(T > s+t | T > s) = P(T > t)
λ는 “건/시간”처럼 사건 발생률로 해석한다. 1/λ는 평균 대기시간, 평균 고장 간격, 평균 도착 간격에 해당한다. 위험률이 일정하다는 가정은 마모나 학습 효과가 없거나 미미한 프로세스에서 특히 자연스럽다.
λ가 시간축을 바꾸는 방식
평균은 E[T] = 1/λ이므로 λ가 커질수록 평균 시간은 짧아진다. 시간 단위를 일관되게 맞추는 일도 중요하다. 예를 들어 λ=0.2/시간이면 평균은 5시간이고, 중앙값은 (ln2)/λ ≈ 3.466시간이다.
시간을 T’=cT로 변환하면 λ’=λ/c가 된다. 같은 현상을 분·시간·일 단위로 옮겨 표현할 때 이 관계를 사용한다.
메모리리스 가정이 맞지 않는 경우
지수 분포는 연속분포 중 유일하게 메모리리스 속성을 가진다. 시스템의 “나이”가 위험률에 영향을 주지 않는다는 뜻이다.
초기 고장(Infant mortality)이 있거나 시간이 갈수록 마모(Wear-out)가 누적되는 시스템에는 이 전제가 맞지 않을 수 있다. 이 경우 Weibull 같은 대안을 검토한다.
상수 위험률은 포아송 과정의 사건 간 간격, 메모리 없는 대기시간과 도착시간에 적합하다. 반대로 시간에 따라 위험률이 증가하거나 감소하는 징후, 누적위험 곡선의 비선형성은 부적합 신호다.
검열 데이터를 포함한 추정과 진단
완전 관측 데이터에서 MLE는 λ̂ = n / Σt_i다. 우측 검열(right censoring)이 포함되면 사건 지시자 δ_i를 사용해 λ̂ = (Σδ_i) / (Σt_i)로 계산한다. 여기서 δ_i∈{0,1}이다.
분산 근사는 Var(λ̂) ≈ λ̂² / (Σδ_i)이며, 평균(1/λ)의 신뢰구간에는 델타 방법을 적용한다. 베이지안 접근에서는 감마 사전(Gamma(α,β))이 공액이며, 사후 분포는 Gamma(α+Σδ_i, β+Σt_i)가 된다.
모형은 추정치만으로 판단하지 않는다. KS/AD 테스트, 지수 Q-Q 플롯, 누적위험(-ln Ŝ(t))의 선형성을 함께 확인한다. Weibull이나 로그정규 분포와 AIC/BIC를 비교하고, Cox–Snell 잔차와 마틴게일 잔차로 체계적 편차를 찾을 수 있다.
운영 데이터에서의 사용 범위
IT 운영과 신뢰성 분석에서는 장애 간격과 복구시간(MTBF/MTTR), 알림과 티켓 도착률을 모델링할 수 있다. M/M/1, M/M/k 큐잉 가정에서는 SLA와 대기시간 예측, 오토스케일링 파라미터 튜닝에도 연결된다.
제품과 비즈니스 분석에서는 구독 유지나 이탈까지의 시간, 온보딩 후 단기 이탈 위험을 다룬다. A/B 테스트에서는 이벤트까지 걸린 시간을 비교하고, 지수 회귀(Exponential regression)로 공변량의 영향을 추정할 수 있다.
네트워크와 보안에서는 요청·세션 도착 간격 추정, 임계치 기반 이상 징후 탐지, 공격 시도 간격의 단순 근사를 통한 방어 리소스 계획에 활용된다. 임상·생명통계에서는 기준 위험률이 상수일 때 파라메트릭 생존분석의 베이스라인이 되며, 검열 데이터를 간편하게 처리하는 소표본 초기 분석용 모델로 제안할 수 있다.
입력부터 적합도 판단까지
관측 시간 t_i와 사건 지시자 δ_i(발생=1, 우측 검열=0)를 준비하고, 시간 단위·측정 정밀도·데이터 품질 지표를 함께 확인한다.
전처리 단계에서는 음수와 결측을 제거하고, 단위를 정규화하며, 중복을 처리한다. 이후 λ̂ = (Σδ_i)/(Σt_i)를 계산하고 신뢰구간을 도출한다. Q-Q 플롯, 누적위험 선형성, 대안 모형의 AIC 비교까지 마치면 추정치 λ̂, 평균 1/λ̂, 중앙값 (ln2)/λ̂, S(t)=e^(−λ̂ t), CI와 적합도 요약을 출력할 수 있다.
Σt_i=0이거나 유효 표본이 부족해 Σδ_i=0이면 추정 불가 경고가 필요하다. δ의 합이 매우 작은 극단적 검열은 불확실성 확대를 뜻하며, 시간 단위가 섞여 있으면 재스케일해야 한다.
위험률 형태에 따른 분포 선택
| 분포 | 위험함수 h(t) | 메모리리스 | 적합 시나리오 | 운영 편의 |
|---|---|---|---|---|
| 지수(Exponential) | 상수 | 예 | 포아송 간격, 무기억 과정 | 해석 단순, 추정 용이 |
| 와이블(Weibull, k<1) | 감소 | 아니오 | 초기 고장 지배 | 유연성 높음, 해석 중간 |
| 와이블(Weibull, k>1) | 증가 | 아니오 | 마모/노후화 | 예방정비 의사결정 유리 |
| 로그정규(Log-normal) | 비단조 | 아니오 | 멀티플리케이티브 지연 | 꼬리 두꺼움 반영 |
지수 분포는 파라미터가 1개이고 폐형식으로 계산할 수 있어 추정과 해석이 단순하다. 대신 위험률 상수 가정이 경직적이므로, 맞지 않는 데이터에 적용하면 편향이 생길 수 있다. Weibull과 로그정규 분포는 위험률 형태를 더 유연하게 다루지만 복잡성도 커진다.
식으로 확인하는 생존 확률
- λ = 0.2/시간 → 평균 = 1/0.2 = 5시간, 중앙값 = (ln 2)/0.2 ≈ 3.466시간
- S(10) = e^(−0.2×10) = e^(−2) ≈ 0.1353
우측 검열 MLE와 신뢰구간 코드
Python 3.10+, numpy>=1.23, scipy>=1.9 (선택), matplotlib(시각화 선택)을 전제로 한다.
import numpy as np
from math import log, sqrt
from scipy.stats import norm
# 예시 데이터: 관측 시간 t, 사건 지시자 delta (1=사건, 0=우측 검열)
t = np.array([2.1, 3.4, 5.0, 1.2, 6.7, 4.3, 9.0, 7.5, 8.2, 10.0])
delta = np.array([1, 1, 0, 1, 1, 1, 0, 1, 1, 0])
# MLE 추정치 (우측 검열 포함)
events = delta.sum()
time_at_risk = t.sum()
if events == 0 or time_at_risk <= 0:
raise ValueError("유효 사건 수 또는 시간 합이 0임. 추정 불가")
lam_hat = events / time_at_risk # λ̂
mean_hat = 1.0 / lam_hat
median_hat = np.log(2.0) / lam_hat
# 점근적 95% CI (정규 근사, Fisher 정보 I(λ)=Σδ/λ^2)
se_lam = lam_hat / sqrt(events)
z = norm.ppf(0.975)
lam_ci = (max(lam_hat - z*se_lam, 1e-12), lam_hat + z*se_lam)
# 평균(1/λ)의 CI (델타 방법: Var(1/λ) ≈ (1/λ^4) Var(λ))
se_mean = se_lam / (lam_hat**2)
mean_ci = (max(mean_hat - z*se_mean, 0.0), mean_hat + z*se_mean)
print(f"lambda_hat={lam_hat:.4f} 95%CI=({lam_ci[0]:.4f}, {lam_ci[1]:.4f})")
print(f"mean_hat={mean_hat:.4f} 95%CI=({mean_ci[0]:.4f}, {mean_ci[1]:.4f})")
print(f"median_hat={median_hat:.4f}")
λ̂는 Σδ / Σt로 구한다. 사건 수가 많아질수록 표준오차는 감소하며, 평균과 중앙값은 λ̂의 역수와 스케일 관계로 계산할 수 있다.
생존 분석 파이프라인
지수 분포는 추정을 단순화해 분석 시간을 줄이고, 파라미터 1개로 소표본에서도 안정적인 MLE 도출을 돕는다. 큐잉과 SLA 모델 계산도 단순해져 비용·용량 계획을 신속하게 다룰 수 있다. 해석이 쉬워 의사결정 커뮤니케이션에 유리하며, 대안 분포를 비교하는 기준선 모델이 된다.