위험 함수 추정 4 방법 — KM·Person-time·Actuarial·Nelson-Aalen

Woodward Ch.11.3 — Estimating the Hazard Function

Hazard 추정의 4 가지 비모수 방법 — Kaplan-Meier, Person-time, Actuarial, Nelson-Aalen — 의 수식 유도, 가정, 시각적 출력 차이를 추상 → 일상어 → 반사실 3 단계 직관으로 풀어낸다. 각 방법의 spiky vs smooth 패턴, 자료 구조 (자세한 사건 시점 vs 구간 자료) 별 적합성, 그리고 모형 진단으로의 NA 활용을 다룬다.

Experimentation
Modeling
저자

Kwangmin Kim

공개

2026년 05월 08일

1 4 가지 비모수 추정의 분업

정의: Hazard 추정 도구의 비교
방법 가정 출력 시각
Kaplan-Meier hazard 사건 시점 사이 hazard 일정 사건별 step Spiky
Person-time 구간 내 hazard 일정 구간별 평균 Smooth
Actuarial 균등 censoring 구간별 (life table) Routine 자료
Nelson-Aalen (NA) (없음) 누적 \(\hat H(t)\) Smooth (누적)

(Woodward, 2014, Ch.11.3).

1.1 분업의 직관

직관 3 단계: 4 방법의 본질 차이
  • 추상 정의: KM 은 사건 시점 단위, Person-time 은 구간 단위, Actuarial 은 life table 구간 단위 (with censoring 보정), NA 는 누적 형태.
  • 일상어 비유: 도시 인구 변화 측정 — 매일 (KM), 매월 (Person-time), 분기 (Actuarial), 누적 인구 변화 (NA). 같은 정보, 다른 시각화.
  • 반사실 시나리오: 자료 자세하면 KM 이 정밀, 구간 자료만 있으면 Actuarial. 모형 진단이 목적이면 NA. 하나의 답이 아닌 도구 선택.

2 11.3.1 Kaplan-Meier Hazard

정의: KM Hazard Estimator

각 사건 시점 \(t\) 에서:

\[\hat h_t = \frac{e_t}{n_t \cdot u_t}\]

  • \(e_t\): 시점 \(t\) 의 사건 수 (보통 1, 동률 사건 시 ↑).
  • \(n_t\): 시점 \(t\) 직전의 위험 인구.
  • \(u_t\): 다음 사건 시점까지의 시간 간격.

가정: hazard 가 사건 시점 사이 일정.

2.1 직관 — KM Hazard 의 spiky 패턴

직관 3 단계: 왜 spiky 인가
  • 추상 정의: \(u_t\) 가 분모 — 사건 사이 간격이 작으면 (사건 빈번) hazard ↑, 크면 (사건 드문 구간) hazard ↓. 결과: 양 극단을 오가는 패턴.
  • 일상어 비유: 매일 강수량 측정 — 비 안 오는 날 0, 폭우 날 ↑. 평균보다 극단을 보여줌.
  • 반사실 시나리오: 자료가 적으면 (예: 27 명 중 27 사건) noise 큼 — 진성 패턴 가림. 큰 표본 (수천 사건) 에서는 KM hazard 가 더 안정.

Glioblastoma 사례 (Example 11.1, Table 11.1):

\(t\) \(n_t\) \(e_t\) \(u_t\) \(\hat h_t\)
10 27 1 2 0.0185
12 26 1 1 0.0385
13 25 1 2 0.0200
15 24 1 1 0.0417
16 23 1 4 0.0109
20 22 2 4 0.0227
24 20 2 2 0.0500
26 18 2 1 0.1111
60 8 1 1 0.1250
61 7 1 1 0.1429

후반부 (60+ 주) 에서 \(n_t\) 작아져 \(\hat h_t\) 매우 변동.

2.2 KM Hazard 의 한계

가정 위반: Spiky 패턴의 해석 위험

가설: Glioblastoma 자료의 hazard plot 이 60~70 주에서 ↑ 보임 — 진성 hazard 패턴인가, noise 인가?

문제: - 후반부 표본 작음 → 분산 ↑. - 단일 사건이 hazard 폭증 시킴.

3 단계 직관:

  • 추상 정의: KM hazard 의 분산 \(\propto e_t/n_t^2\)\(n_t\) 작으면 noise.
  • 일상어 비유: 마지막 5 명의 학생 평균 점수 변동성 ↑. 진성 추세 vs noise 구분 어려움.
  • 반사실 시나리오: Smoothing (kernel, person-time) 으로 noise 감소. 또는 신뢰구간 시각화로 noise 영역 표시.

3 11.3.2 Person-time Estimation

정의: Person-time Hazard

시간을 구간 (예: 10 주) 으로 분할 후 각 구간의 person-time event rate:

\[\hat h_{\text{interval}} = \frac{e_{\text{interval}}}{\sum_i (\text{person-time}_i)}\]

분모: 구간 내 모든 person-time 합산.

3.1 직관 — 구간 평균의 안정성

직관 3 단계: Person-time 의 매끄러움
  • 추상 정의: 구간 내 사건들의 person-time 가중 평균 — KM hazard 의 평균. 분모 ↑ → 분산 ↓.
  • 일상어 비유: 일별 매출의 7 일 이동 평균 — 일별 변동 줄고 추세 명확.
  • 반사실 시나리오: 구간이 너무 크면 시간 변화 못 보고 (under-smooth), 너무 작으면 KM 과 비슷한 noise (over-smooth). Bias-variance trade-off — 구간 폭 선택이 핵심.

3.2 Glioblastoma 사례 — Example 11.2

사례: 10 주 구간 분할

[10, 20) 구간: - 사건 수 \(e = 5\) (10, 12, 13, 15, 16 주). - 사망자 person-weeks: \(0 + 2 + 3 + 5 + 6 = 16\). - 생존자 (20 주까지 무사) person-weeks: \(22 \times 10 = 220\). - 합 person-weeks: \(236\).

\[\hat h_{[10,20)} = \frac{5}{236} = 0.0212\]

같은 구간의 KM hazard 5 개 (0.0185, 0.0385, 0.0200, 0.0417, 0.0109) 의 평균 ≈ 0.026 — 약간 다름 (가중 방식 차이).

3 단계 직관:

  • 추상 정의: KM 이 사건 시점 단위, person-time 이 person-time 가중 합.
  • 일상어 비유: 매일 비 측정 vs 한 달 강수량 평균 — 둘 다 매월 강우 양 추정, 다른 정밀도.
  • 반사실 시나리오: Person-time 이 일반적으로 시각화에 우월. 단, 사건 시점의 정확한 타이밍 분석 (예: 즉각적 약 효과) 시 KM 우월.

3.3 구간 폭 선택

직관: 구간 폭의 결정
  • 너무 좁음 (예: 1 일): KM 과 거의 동일 — noisy.
  • 너무 넓음 (예: 1 년): 시간 변화 못 봄 — under-smooth.
  • 권장: 자료의 사건 빈도 기반 — 평균 사건 사이 간격의 5~10 배.

3 단계 직관:

  • 추상 정의: 구간이 사건 빈도와 비례하지 않으면 정보 손실.
  • 일상어 비유: 사진 셔터 속도 — 너무 빠르면 흐림, 너무 느리면 motion blur.
  • 반사실 시나리오: Cross-validation 또는 AIC 로 자료 기반 구간 폭 선택 가능.

4 11.3.3 Actuarial Estimation (Life Table)

정의: Actuarial Hazard

Life table 의 actuarial 근사 활용:

\[\hat h_t = \frac{e_t}{(n_t^* - \frac{1}{2} e_t) u_t}\]

  • \(n_t^*\): 구간 시작 위험 인구.
  • \(e_t\): 구간 내 사건 수.
  • \(u_t\): 구간 폭.
  • \(\frac{1}{2} e_t\): 평균적으로 사건 발생자가 구간 중간에 사건 발생 가정 → 분모 보정.

4.1 직관 — Half-event 보정

직관 3 단계: \(\frac{1}{2} e_t\) 의 의미
  • 추상 정의: 구간 내 사건 발생자가 평균적으로 구간 중간에 사건 발생 → 평균 person-time 기여 = 절반. 분모에서 \(\frac{1}{2} e_t\) 차감.
  • 일상어 비유: 한 해 동안 직장을 떠난 사람들의 평균 근속 기간을 6 개월로 가정 (균등 분포 가정).
  • 반사실 시나리오: 만약 사건이 구간 초반에 몰려 있으면 \(\frac{1}{2}\) 보정이 과대 → KM 이 더 정확. Actuarial 은 균등 가정 충족 시 우월.

4.2 SHHS 사례 — Example 11.3

사례: 첫 1 년 사망 hazard

스코티시 심장 건강 연구 (SHHS) 의 4398.5 명 baseline → 17 명 첫 1 년 사망.

\[\hat h_0 = \frac{17}{(4398.5 - 17/2)(365)} = 0.00001061 \text{ / day}\]

또는 \(u_0 = 1\) year: \[\hat h_0 = \frac{17}{4390} = 0.0039 \text{ / year}\]

해석: 첫 1 년 hazard 약 0.4% / yr. 모든 365 일에 동일 가정.

3 단계 직관:

  • 추상 정의: 큰 표본 + 짧은 추적 + 정확한 사건 시점 부재 — actuarial 이 적합.
  • 일상어 비유: 인구 통계의 매년 사망률 — 정확한 시점 없이 연 단위 사건 수 / 연 인구.
  • 반사실 시나리오: 자세한 사건 시점이 있으면 KM 이 더 정확. Actuarial 은 routine 자료 (매월 보고, 매년 통계) 에서 표준.

4.3 Woodward 의 권장

Actuarial 의 한계

Woodward 가 Ch.11 의 나머지에서 actuarial 을 다루지 않는다고 명시:

“We shall not consider actuarial methods in the remainder of this chapter because these are inferior when we have complete survival information.”

3 단계 직관:

  • 추상 정의: 자세한 사건 시점이 있으면 KM 이 actuarial 을 dominate.
  • 일상어 비유: 정밀 GPS vs 도시 단위 위치 보고 — GPS 가 더 정확하면 도시 보고 비효율.
  • 반사실 시나리오: Routine epidemiology (인구 통계) 에서는 actuarial 이 표준 — 자세한 자료 없음. 반대로 임상 연구는 KM.

5 11.3.4 Nelson-Aalen (NA) Cumulative Hazard

정의: Nelson-Aalen Estimator

\[\hat H(t) = \sum_{t_i \le t} \frac{e_i}{n_i}\]

각 사건 시점의 conditional event rate \(e_i/n_i\) 를 누적 합산.

5.1 KM 과 NA 의 관계

직관 3 단계: 두 추정의 동치
  • 추상 정의: \(H(t) = -\log S(t)\). NA 의 \(\hat H(t)\) 와 KM 의 \(-\log \hat S(t)\)거의 동등 (작은 표본 + 큰 사건수에서 약간 차이).
  • 일상어 비유: 같은 정보의 두 표현 — “남은 사람의 비율” 과 “잃은 위험의 누적”.
  • 반사실 시나리오: 표본이 작으면 두 추정 노이즈 ↑. 큰 표본에서 거의 일치.

Glioblastoma 사례:

NA at \(t = 10\): \(1/27 = 0.0370\). NA at \(t = 12\): \(0.0370 + 1/26 = 0.0755\). NA at \(t = 13\): \(0.0755 + 1/25 = 0.1155\).

KM-derived \(-\log \hat S(t = 13) = -\log(0.8889) = 0.1178\) — NA 와 매우 비슷.

5.2 NA 의 모형 진단 활용

직관: \(\log \hat H(t)\) vs \(\log t\) Plot

NA 의 가장 큰 가치 — Weibull 적합 검증.

만약 진성 분포가 Weibull 이면: \[h(t) = \lambda \gamma t^{\gamma-1}\] \[H(t) = \lambda t^\gamma\] \[\log H(t) = \log \lambda + \gamma \log t\]

\(\log H(t)\) vs \(\log t\) plot 이 직선 (기울기 \(\gamma\)).

3 단계 직관:

  • 추상 정의: Weibull 가정이 맞으면 log-log plot 직선. 곡선이면 Weibull 부적합.
  • 일상어 비유: 함수 형태의 시각 검증 — 산점도가 직선이면 가정 OK.
  • 반사실 시나리오: 곡선 형태 보이면 Weibull 외 모형 (Gompertz, log-logistic, 또는 Cox) 고려.

5.3 NA vs KM 의 후반부 차이

가정 점검: 후반부의 noise

표본 후반부 (작은 \(n_t\)) 에서:

  • KM \(\hat S(t)\) 가 0 으로 가까이 → \(-\log \hat S(t)\) 가 ↑↑ (대각선처럼 발산).
  • NA 가 더 안정 — 후반부 noise 가 누적에 흡수.

3 단계 직관:

  • 추상 정의: KM 의 곱 형식 vs NA 의 합 형식 — 합 형식이 outlier 에 robust.
  • 일상어 비유: 평균 vs 누적 합 — 마지막 큰 값의 영향이 평균 (% 변화) 에 더 큼.
  • 반사실 시나리오: 후반부 분석이 중요하면 NA 우선 — 모형 진단·외삽.

6 Cumulative Hazard 의 활용

활용 도구
모형 진단 \(\log \hat H(t)\) vs \(\log t\) plot (Weibull 검증)
복합 사건 (recurrent) NA 가 자연 처리
시간 의존 공변량 모형 NA 가 모형의 출발점
외삽 NA 의 trend 가 미래 예측

7 코드 예시 — 4 방법 비교

import numpy as np
import pandas as pd
from lifelines import KaplanMeierFitter, NelsonAalenFitter
import matplotlib.pyplot as plt

# Glioblastoma 자료
times = np.array([10, 12, 13, 15, 16, 20, 20, 24, 24, 26, 26, 27,
                  39, 42, 45, 45, 48, 52, 58, 60, 61, 62, 73, 75, 77, 104, 120])
events = np.ones_like(times)

# 1. KM Hazard (사건 사이 간격 일정 가정)
unique_times = np.unique(times)
n_t = []
e_t = []
u_t = []
for i, t in enumerate(unique_times):
    n_t.append((times >= t).sum())
    e_t.append(((times == t) & (events == 1)).sum())
    if i < len(unique_times) - 1:
        u_t.append(unique_times[i+1] - t)
    else:
        u_t.append(1)  # arbitrary
n_t = np.array(n_t)
e_t = np.array(e_t)
u_t = np.array(u_t)
km_hazard = e_t / (n_t * u_t)

# 2. Person-time Hazard (10 주 구간)
intervals = [(0, 10), (10, 20), (20, 30), (30, 40), (40, 50),
             (50, 60), (60, 70), (70, 80), (80, 100), (100, 130)]
pt_hazards = []
pt_centers = []
for lo, hi in intervals:
    in_interval = (times >= lo) & (times < hi)
    e = in_interval.sum()
    # Person-time: 사건자 + 생존자 (구간 끝까지)
    deaths_pt = (times[in_interval] - lo).sum()
    survivors_pt = (times >= hi).sum() * (hi - lo)
    pt = deaths_pt + survivors_pt
    if pt > 0:
        pt_hazards.append(e / pt)
        pt_centers.append((lo + hi) / 2)

# 3. NA cumulative
naf = NelsonAalenFitter()
naf.fit(times, events)

# 시각화
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# KM hazard (spiky)
axes[0].step(unique_times, km_hazard, where="post")
axes[0].set_title("KM hazard (spiky)")
axes[0].set_xlabel("Time (weeks)")

# Person-time hazard (smooth)
axes[1].plot(pt_centers, pt_hazards, marker="o")
axes[1].set_title("Person-time hazard (smooth)")
axes[1].set_xlabel("Time (weeks)")

# NA cumulative
naf.plot_cumulative_hazard(ax=axes[2])
axes[2].set_title("NA cumulative hazard")
axes[2].set_xlabel("Time (weeks)")

plt.tight_layout()

해석: 같은 자료의 3 가지 시각. KM 가 spiky, person-time 가 smooth, NA 가 누적 형태. 진성 패턴 (시간에 따른 hazard ↑) 이 person-time 과 NA 에서 명확.

8 A/B 테스트의 4 방법 활용

도구 A/B 테스트 활용
KM hazard 일별 사용자 churn rate (자세한 자료)
Person-time 주별 또는 월별 churn rate (smooth)
Actuarial 분기 보고 (인구 단위)
NA cumulative 누적 churn 의 retention curve
직관: 어느 방법이 A/B 에 적합
  • 추상 정의: A/B 의 자세한 자료 (각 사용자의 마지막 활동 일시) 가 있다면 KM 또는 person-time. Routine 분석은 NA cumulative.
  • 일상어 비유: 사용자의 일별 행동 분석 = KM. 주별 retention 보고 = person-time. 누적 retention curve = NA.
  • 반사실 시나리오: 짧은 추적 + 작은 표본이면 KM noisy. Person-time 이 의사 결정용 시각화에 유리.

9 결론

4 가지 hazard 추정 방법이 자료 구조와 분석 목적에 따라 분업. KM 이 사건 시점 정밀도 우선, Person-time 이 시각화 매끄러움, Actuarial 이 routine 자료, NA 가 모형 진단·외삽. 후반부의 noise 처리에서 NA 가 robust.

다음 글 (H-WOO11-3) 에서 모수적 분포 (Exponential, Weibull, Log-logistic, Gompertz) 의 적합 검증을 본다.

10 관련 주제

Phase B 크로스링크

Statistics 크로스링크

Subscribe

Enjoy this blog? Get notified of new posts by email: