지수 분포로 생존시간과 사건 간격 모델링하기

지수 분포의 메모리리스 속성, 상수 위험률, 검열 데이터를 포함한 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로 구한다. 사건 수가 많아질수록 표준오차는 감소하며, 평균과 중앙값은 λ̂의 역수와 스케일 관계로 계산할 수 있다.

생존 분석 파이프라인

Σδ_i=0 또는 Σt_i=0검열 과다(δ합 작음)통과적합 양호적합 불량입력: 시간 t_i, 사건지시자δ_i, 단위/품질메타전처리: 단위정규화, 음수/결측제거, 중복합치품질 점검오류 반환: 표본/시간 부족 경고경고: 불확실성 확대, 보수적해석추정: λ̂=(Σδ)/(Σt), CI 산출진단: Q-Q, 누적위험 선형성,대안(AIC/BIC)산출: S(t)=e^(−λ̂ t),평균/중앙값, 리스크지표대안 모형: Weibull/로그정규,공변량 회귀보고/적용:SLA/정책/실험디자인 반영

지수 분포는 추정을 단순화해 분석 시간을 줄이고, 파라미터 1개로 소표본에서도 안정적인 MLE 도출을 돕는다. 큐잉과 SLA 모델 계산도 단순해져 비용·용량 계획을 신속하게 다룰 수 있다. 해석이 쉬워 의사결정 커뮤니케이션에 유리하며, 대안 분포를 비교하는 기준선 모델이 된다.

지수 분포생존 분석위험률통계검열 데이터