생명표와 Kaplan-Meier 추정 — 수식 유도와 직관

Woodward Ch.5.3~5.4 — Cohort Life Tables & KM Estimation

코호트 생명표(actuarial method)와 Kaplan-Meier 추정량의 수식을 유도하고, Greenwood 공식으로 표준오차를 구하며, 신뢰구간 산출까지 본다. 두 방법의 관계, censoring 가정, 그리고 비례 위험 가정이 깨질 때의 함정을 추상 → 일상어 → 반사실 3 단계 직관으로 풀어낸다.

Experimentation
Epidemiology
저자

Kwangmin Kim

공개

2026년 05월 08일

1 시간 축에서 위험을 어떻게 추정하는가

가변 코호트(변동 추적·중도 이탈) 자료에서 단순 비율 분석은 정보 손실을 만든다 (Woodward, 2014, Ch.5.2). 이 절은 두 가지 비모수 추정 도구를 본다.

  1. Cohort Life Table (actuarial method) — 시간 축을 일정 구간으로 나누어 각 구간의 위험률 추정.
  2. Kaplan-Meier (KM) Estimator — 사건 발생 시점마다 위험률을 갱신하는 극한 형태.

두 방법은 같은 정보를 다른 단위로 정리한다. Life table 이 균등 구간 단위라면 KM 은 사건 시점 단위 (구간이 사건 발생 즉시 닫힘).

정의: 생존 함수 (Survival Function) 와 누적 발생 함수 (Cumulative Incidence)

\[ S(t) = P(T > t) \]

시점 \(t\) 까지 사건이 발생하지 않을 확률.

\[ F(t) = 1 - S(t) = P(T \le t) \]

시점 \(t\) 까지 사건이 발생할 누적 확률.

3 단계 직관:

  • 추상 정의: \(T\) 는 사건 시점의 무작위 변수. \(S(t)\) 는 그 분포의 생존 부분.
  • 일상어 비유: 100 명이 마라톤 출발선에서 출발. \(S(t) = 0.7\) 이면 시점 \(t\) 까지 70 명이 결승선을 통과하지 않은 채 살아남은 비율.
  • 반사실: 만약 모든 사람의 정확한 사건 시점이 관측되면 \(\hat S(t) = (n - \text{사건수}_t) / n\) 인 단순 통계량. 실제로는 censoring 이 있어 분모가 시간에 따라 감소.

2 Cohort Life Table — Actuarial Method

전통적 보험계리 방법. 시간 축을 일정 구간 \([0, t_1), [t_1, t_2), \ldots\) 로 나눈다.

2.1 표 구성

각 구간 \(j = 1, \ldots, J\) 에 대해 다음 양을 기록.

기호 의미
\(n_j\) 구간 \(j\) 시작 시점에 위험 상태인 사람 수
\(d_j\) 구간 \(j\) 동안 사건 발생 수
\(w_j\) 구간 \(j\) 동안 censoring 수 (이탈)
\(n_j' = n_j - w_j / 2\) 조정된 위험 인구 (이탈자가 평균 구간 중간에 이탈한다고 가정)
\(q_j = d_j / n_j'\) 조건부 사건 확률
\(p_j = 1 - q_j\) 조건부 생존 확률
\(\hat S(t_j) = \prod_{k \le j} p_k\) 누적 생존 함수

2.2 핵심 보정 — \(w_j / 2\) 의 의미

직관 3 단계: \(w_j / 2\) 의 의미
  • 추상: 이탈자 \(w_j\) 명이 구간 \([t_{j-1}, t_j)\) 안에서 균등 분포 → 평균적으로 구간의 절반을 위험에 노출. 그래서 분모에 \(w_j\) 의 절반만 차감.
  • 일상어 비유: 한 해 직장에 평균 6 개월 머문 직원의 효과는 1 명이 아니라 0.5 person-year 로 카운트. 평균 점유 기간을 분모에 반영.
  • 반사실: 만약 이탈자가 모두 구간 시작 직후 이탈한다면 보정은 \(w_j\) 전체 차감 (그들은 실질적으로 위험에 노출되지 않음). 균등 가정이 깨지면 보정이 부정확.

2.3 Life Table 의 한계

한계 영향
구간 폭 선택의 임의성 폭이 너무 크면 시간 분해능 낮음
균등 이탈 가정 이탈 분포가 비균등이면 편향
사건 시점의 정보 손실 구간 내 사건 시점을 무시

이 한계의 직접 해결이 KM 이다.

3 Kaplan-Meier Estimator

KM 은 구간 폭을 사건 시점 사이로 줄인 극한 형태다 (Kaplan & Meier, 1958; Woodward, 2014, Ch.5.4).

정의: KM 추정량

사건 발생 시점을 \(t_1 < t_2 < \cdots < t_K\) 라 하자. 시점 \(t_i\) 에서

  • \(d_i\): 시점 \(t_i\) 에 사건 발생 수.
  • \(n_i\): 시점 \(t_i\) 직전까지 위험 인구.

\[ \hat S(t) = \prod_{t_i \le t} \left( 1 - \frac{d_i}{n_i} \right) \]

3.1 수식의 의미 — 곱 형식 분해

각 사건 시점 \(t_i\) 에서 살아남을 조건부 확률: \[ P(T > t_i \mid T > t_{i-1}) = 1 - \frac{d_i}{n_i} \]

\(P(T > t)\) 를 분해: \[ P(T > t_K) = P(T > t_1) \cdot P(T > t_2 \mid T > t_1) \cdots P(T > t_K \mid T > t_{K-1}) \]

각 조건부 확률을 표본 비율로 추정 → 곱하면 KM.

직관 3 단계: 곱 형식의 본질
  • 추상: \(P(\text{전체 생존}) = \prod P(\text{단계별 생존})\). 시간 축의 곱셈 분해.
  • 일상어 비유: 게임에서 5 단계를 모두 통과할 확률 = 단계 1 통과 × 단계 2 통과(단계 1 통과 가정) × … × 단계 5 통과(단계 4 통과 가정).
  • 반사실: 만약 단계 간 독립이 아니라면 곱 형식이 깨진다. 사건이 서로 독립적인 마르코프 가정이 깔려 있다.

3.2 Censoring 처리

KM 의 천재성은 censoring 을 자연스럽게 처리한다는 점. 이탈자 \(i\) 가 시점 \(c_i\) 에 censoring 되면, \(c_i\) 이후 시점의 위험 인구 \(n\) 에서 제외된다. 사건 카운트에는 들어가지 않는다.

가정 위반: Independent Censoring

KM 의 핵심 가정 — censoring 은 사건 발생 위험과 독립.

3 단계 직관:

  • 추상: \(P(C > t \mid X) \perp P(T > t \mid X)\) — censoring 시점과 사건 시점이 조건부 독립.
  • 일상어 비유: 마라톤 도중 GPS 가 끊긴 사건이 그 등산객의 결승선 도착 가능성과 무관 (예: 배터리 방전).
  • 반사실: 만약 등산객이 정상 도달이 어려워서 GPS 를 끄는 거라면, censoring 이 사건 위험과 상관 → KM 이 사건 확률을 과소 추정. 이 경우 IPW(inverse probability of censoring weighting) 또는 sensitivity analysis 필요.

3.3 Step Function 시각화

S(t)
1.0 │■■■■                            ← 사건 없는 구간 평평
    │    ■■■■                        ← 첫 사건 (t=2): 한 단계 ↓
0.8 │        ■■■                     ← 다음 사건 (t=4)
    │           ■■■■■                ← censoring 만 있는 구간 평평
0.6 │                ■■■■■           ← 다음 사건
    │                     ■■■■
0.4 │                         ■■
    └────────────────────────────→ t
       0  2  4  6  8 10 12 14 16

3.4 1-S(t) 곡선 — 누적 발생률

같은 정보를 위쪽으로 보면 누적 사건 발생 확률 곡선: \[ \hat F(t) = 1 - \hat S(t) \]

임상에서는 둘 다 자주 사용. 이익 관점은 \(S(t)\) (생존), 위험 관점은 \(1 - S(t)\) (사건 누적).

4 Greenwood’s Formula — 표준오차

KM 추정량의 분산을 추정하는 표준 도구.

정의: Greenwood 분산 공식

\[ \widehat{\text{Var}}(\hat S(t)) = \hat S(t)^2 \sum_{t_i \le t} \frac{d_i}{n_i (n_i - d_i)} \]

또는 동등하게: \[ \widehat{\text{Var}}(\log \hat S(t)) = \sum_{t_i \le t} \frac{d_i}{n_i (n_i - d_i)} \]

4.1 수식의 직관 — 왜 이 형태인가

각 단계의 조건부 생존 확률 \(\hat p_i = 1 - d_i / n_i\) 의 분산은 이항 분포에서: \[ \text{Var}(\hat p_i) = \frac{d_i (n_i - d_i)}{n_i^3} \]

또는 동등하게 \(\text{Var}(\log \hat p_i) \approx d_i / [n_i (n_i - d_i)]\) (델타 방법).

\(\hat S(t) = \prod \hat p_i\) 의 로그가 합 → 합의 분산은 분산의 합 (단계 간 독립 가정). \[ \text{Var}(\log \hat S(t)) = \sum \text{Var}(\log \hat p_i) = \sum \frac{d_i}{n_i (n_i - d_i)} \]

4.2 직관 3 단계 — Greenwood 의 합산 구조

  • 추상: \(\log \hat S\) 의 분산이 단계별 \(\log \hat p_i\) 분산의 합. 각 단계의 불확실성이 누적.
  • 일상어 비유: 5 단계 게임에서 통과율 \(\hat p_i\) 각각의 추정 오차가 독립이면, 전체 통과율 추정의 오차는 단계별 오차의 합. 후반 단계로 갈수록 표본이 작아져 오차 ↑.
  • 반사실: 시간이 지나면 \(n_i\) 가 줄어들어 \(d_i / [n_i(n_i - d_i)]\) 가 커짐 → KM 곡선의 후반부가 더 wide CI. 그래서 KM 은 추적 후반부에 신뢰성 ↓.

5 신뢰구간 — 두 가지 방법

5.1 1. Plain (Greenwood) CI

\[ \hat S(t) \pm 1.96 \sqrt{\widehat{\text{Var}}(\hat S(t))} \]

문제: \(\hat S\) 가 0~1 사이로 제약되지만 CI 는 그 경계를 넘어갈 수 있음.

5.2 2. Log-Log Transform CI

\[ \log\left(-\log \hat S(t)\right) \pm 1.96 \cdot \text{SE}\left(\log(-\log \hat S(t))\right) \]

이를 역변환하면 항상 0~1 안에 머무는 CI. 표준 권장.

직관: 왜 log-log 변환인가
  • 추상: \(\hat S \in (0, 1)\). \(\log(-\log \hat S) \in \mathbb{R}\) 로 매핑되어 정규 근사가 더 안전.
  • 일상어 비유: 0~1 사이 비율을 직접 다루면 경계에서 정규 분포가 잘 안 맞음. 변환 후 정규 분포로 다루기 쉬운 영역으로 옮김.
  • 반사실: \(\hat S = 0.95\), SE = 0.05 인 경우 plain CI = (0.85, 1.05) — 1 초과. Log-log CI 는 (0.83, 0.99) 같이 안전한 범위.

6 두 곡선 비교 — Pointwise vs Simultaneous

KM 곡선의 CI 가 점별(pointwise) 인지 동시(simultaneous) 인지 구분 중요.

종류 의미
Pointwise CI 각 시점에 95% 의 확률로 진성 \(S(t)\) 를 포함
Simultaneous (Hall-Wellner) 전 시간 축에서 동시에 95% 확률로 \(S(t)\) 를 포함

시각화 시: 두 KM 곡선이 한 시점에서만 분리되어 보인다면 pointwise 만으로는 결론 부족. 전반적 차이는 log-rank 검정 (Section 5.5, B13) 로 확인.

7 코드 예시 — KM + 표준오차 + CI

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

np.random.seed(42)
n = 500

# 가상 코호트
factor = np.random.binomial(1, 0.4, n)

# 진성 사건 시점 (factor=1 일 때 hazard 1.5 배)
true_T = np.random.exponential(scale=1.0/0.08, size=n)
true_T[factor == 1] /= 1.5

# Censoring (uniform 0~12 년)
C = np.random.uniform(0, 12, n)
T = np.minimum(true_T, C)
event = (true_T <= C).astype(int)

df = pd.DataFrame({"T": T, "event": event, "factor": factor})

# KM by group
kmf_factor = KaplanMeierFitter()
kmf_nofactor = KaplanMeierFitter()

kmf_factor.fit(
    df.loc[df.factor == 1, "T"],
    event_observed=df.loc[df.factor == 1, "event"],
    label="Factor",
)
kmf_nofactor.fit(
    df.loc[df.factor == 0, "T"],
    event_observed=df.loc[df.factor == 0, "event"],
    label="Non-Factor",
)

# Greenwood SE 와 CI 자동 산출
print("Factor 군 5 년 생존:")
print(kmf_factor.survival_function_at_times(5.0))
print(f"95% CI: ({kmf_factor.confidence_interval_at_times(5.0).iloc[0, 0]:.3f}, "
      f"{kmf_factor.confidence_interval_at_times(5.0).iloc[0, 1]:.3f})")

print("\nNon-Factor 군 5 년 생존:")
print(kmf_nofactor.survival_function_at_times(5.0))
print(f"95% CI: ({kmf_nofactor.confidence_interval_at_times(5.0).iloc[0, 0]:.3f}, "
      f"{kmf_nofactor.confidence_interval_at_times(5.0).iloc[0, 1]:.3f})")

# 시각화
fig, ax = plt.subplots(figsize=(8, 5))
kmf_factor.plot_survival_function(ax=ax)
kmf_nofactor.plot_survival_function(ax=ax)
ax.set_ylabel("S(t)")
ax.set_xlabel("Time (years)")
ax.set_title("Kaplan-Meier curves with 95% pointwise CI")
plt.tight_layout()

해석: lifelines 의 KaplanMeierFitter 가 Greenwood 공식 + log-log CI 를 자동 산출. 시각화에서 음영 부분이 95% pointwise CI.

8 Life Table vs KM — 언제 어느 것을 쓰는가

측면 Life Table KM
시간 분해능 구간 단위 사건 시점 단위
사건 시점 정보 손실 보존
큰 표본 (사건 ↑) 매우 빠름 느림 (사건 시점마다 갱신)
작은 표본 구간 폭 결정 어려움 사건마다 갱신, 단계 식별 명확
Routine 자료 자연 (구간이 자료 보고 단위) 자료 변환 필요

현대 권장: KM 우선. 단, 대규모 routine 자료(예: 인구 통계)에서는 life table 이 효율적.

9 비교 사례 — SHHS 와 EGAT

직관: 두 코호트의 KM 곡선

SHHS (Tunstall-Pedoe et al., 1997): 11,629 명 추적, 9.1 년까지. KM 곡선이 흡연·콜레스테롤·혈압 카테고리별로 명확히 분리. 후반부(9 년 차)에 CI wide → 추적 후반의 표본 ↓로 정밀도 ↓.

EGAT (Sritara et al., 2003): 태국 전력청 직원, 12 년 추적. KM 곡선이 흡연 효과를 시각화. Healthy worker effect 때문에 절대 위험은 일반 인구보다 낮으나, 흡연 vs 비흡연의 RR 은 일반 인구와 유사.

두 코호트 모두 KM 의 시간 축 분리력이 단순 RR 보다 정보를 풍부하게 전달.

10 IT 대응 — Cohort Retention Curve

A/B 테스트와 IT 분석에서 KM 의 IT 판이 cohort retention curve 다.

도메인 변환
사건 시점 \(T\) 가입 후 처음 이탈 시점
Censoring 분석 시점에 아직 활성 사용자
\(S(t)\) 가입 후 \(t\) 일 retention
\(1 - S(t)\) 가입 후 \(t\) 일 누적 churn
# IT 응용 — 가입월별 retention 곡선
import pandas as pd
from lifelines import KaplanMeierFitter

# 가입월·이탈 여부·관찰 기간
df = pd.DataFrame({
    "tenure_days": [...],   # 가입 후 마지막 활동까지 일수
    "churned": [...],       # 1=이탈, 0=현재 활성 (censored)
    "channel": [...],       # 가입 채널
})

kmf = KaplanMeierFitter()
for ch in df.channel.unique():
    mask = df.channel == ch
    kmf.fit(df.loc[mask, "tenure_days"],
            event_observed=df.loc[mask, "churned"],
            label=f"Channel {ch}")
    kmf.plot_survival_function()

해석: IT 분석가가 흔히 그리는 “가입월별 retention” 표는 사실 KM 의 그리드 형태. KM 으로 재구성하면 차이의 통계적 유의성도 검정 가능.

11 결론 — Ch.5.3~5.4 의 메시지

도구 사용 시기 핵심 가정
Cohort life table 큰 표본, routine 자료 균등 이탈 분포
Kaplan-Meier 일반 코호트 Independent censoring
Greenwood KM 의 분산 단계 간 독립
Log-log CI 정규 근사가 약한 경계 (변환 후 정규성)

다음 글(B13) 에서는 KM 곡선 비교(log-rank), 그리고 KM 의 가장 중요한 가정 위반인 경쟁 위험(competing risks) 을 다룬다.

12 관련 주제

선행

후속

다른 카테고리

Subscribe

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