1 11.1 Introduction — 추적 자료의 본질
추적 (cohort 또는 intervention) 자료는 두 가지 본질 차원을 갖는다:
- 시간 차원: 사건 발생까지의 시간 \(T\).
- Censoring: 모든 사람이 사건을 경험하지 않음 — 일부는 추적 종료 시점에 사건 미발생 (\(\delta = 0\)).
이 두 차원이 logistic regression 의 단순 binary 분석으로는 부족하다 (Woodward, 2014, Ch.11.1).
1.1 두 종류의 회귀 모형
Parametric (모수적): - 생존 시간의 분포를 명시적 가정 (Exponential, Weibull 등). - \(h(t)\) 의 형태가 모수로 정해짐. - 가정 충족 시 효율 ↑, 외삽 가능.
Semiparametric (반모수적): - 대표: Cox proportional hazards model. - \(h_0(t)\) (baseline hazard) 형태 가정 X — 비모수. - \(\beta\) (covariate 효과) 만 모수. - 분포 가정 회피 — robust.
3 단계 직관:
- 추상 정의: Parametric 은 “전체 함수의 형태 + 모수” 가정. Semiparametric 은 “효과 부분만 모수, baseline 자유”.
- 일상어 비유: 수학 시험 답안 — Parametric 은 “공식 사용 + 변수 대입” (정해진 공식). Semiparametric 은 “결과 순위 + 변수 효과 추정” (공식 자유).
- 반사실 시나리오: 진성 hazard 가 Weibull 이면 Weibull PH 가 Cox 보다 효율 ↑ (10~20%). 형태 미지면 Cox 가 안전. 실무 디폴트는 Cox.
2 11.2 — 생존 시간의 기본 함수
2.1 11.2.1 Survival Function \(S(t)\)
\(T\) 가 사건 발생 시점이라면:
\[S(t) = P(T > t)\]
시점 \(t\) 까지 사건이 발생하지 않을 확률.
성질: - \(S(0) = 1\) (시작 시 모두 생존). - \(S(\infty) = 0\) (충분히 긴 시간 후 모두 사건 — 단 cure model 예외). - 단조 감소. - 우연속 (right-continuous).
2.2 직관 — Survival 의 의미
- 추상 정의: 시점 \(t\) 에 무작위 1 명이 사건 미발생일 확률 0.7.
- 일상어 비유: 학교 입학생 100 명 중 졸업까지 남는 비율. \(S(t) = 0.7\) → “이 시점까지 70 명 남아있음”.
- 반사실 시나리오: 만약 사건이 흔하면 (예: 대학 졸업) \(S(t)\) 가 빠르게 ↓. 희귀하면 (예: 평생 흡연 폐암) \(S(t)\) 가 천천히 ↓. 그래프의 기울기가 위험률을 시사.
임상 의의: - “5 년 생존율 80%” → \(S(5\text{ yr}) = 0.80\). - 환자에게 직관적 보고 가능. - 비교 (treatment vs control) 시 두 KM 곡선의 시각적 거리가 효과의 직관적 표현.
2.3 CDF 와의 관계
\[F(t) = P(T \le t) = 1 - S(t)\]
- \(S(t)\): 이익 관점 (생존 확률).
- \(F(t)\): 위험 관점 (누적 사건 확률).
같은 정보, 다른 강조.
3 단계 직관:
- 추상 정의: \(F(t) + S(t) = 1\). 두 함수가 보완.
- 일상어 비유: 컵에 든 물 — “절반 차” vs “절반 비어”. 같은 사실, 다른 표현.
- 반사실 시나리오: 환자에게 보고 시 양 쪽 모두 사용 — “5 년 생존 80%” + “5 년 누적 사망 20%”. 두 표현이 다른 인지적 효과.
2.4 11.2.2 Hazard Function \(h(t)\)
\[h(t) = \lim_{\Delta t \to 0} \frac{P(t \le T < t + \Delta t \mid T \ge t)}{\Delta t}\]
시점 \(t\) 까지 살아남은 자에 대한 즉각적 사건 발생 비율 (instantaneous failure rate).
핵심 차이: - \(f(t)\): 사건이 시점 \(t\) 에서 발생할 확률 밀도 (모든 사람 기준). - \(h(t)\): 사건이 시점 \(t\) 에서 발생할 비율 (\(t\) 까지 무사한 사람 기준).
2.5 직관 — 조건부 비율의 의미
- 추상 정의: \(h(t) = f(t)/S(t)\). \(f\) 가 분자 (사건 발생 강도), \(S\) 가 분모 (위험에 노출된 자).
- 일상어 비유: 보험 회사가 80 세 가입자에게 매기는 보험료 — 80 세까지 살아남은 사람 중 다음 1 년 사망 확률 (조건부) 이 결정. 신생아 사망률과 다른 측도.
- 반사실 시나리오: 만약 \(h(t) = 0.05/\text{yr}\) 라면 — “80 세까지 무사한 사람의 향후 1 년 사망률 5%”. 누적 위험 (\(H(t) = \int h\)) 과 다른 의미.
왜 hazard 가 임상에 중요한가: - 환자의 “현재 시점의 위험률” — 현재 의사 결정에 직접. - 두 군의 hazard ratio 가 모형 단위 (Cox 의 \(\beta\)) 와 직접 연결. - 시간에 따른 위험 변화 패턴 파악.
2.6 Bathtub Curve — 인간 사망의 hazard 패턴
Woodward 의 idealised plot:
hazard
↑
│ ╲ ╱
│ ╲ ╱
│ ╲ ╱
│ ╲___________________ ╱
└────────────────────────────→ age
0 10 20 30 40 50 60 70 80
3 단계 시기:
- 유아기 (0~5 세): 높은 hazard. 선천성 질환·감염병 사망률 ↑.
- 청·중년기 (5~50 세): 낮고 거의 일정. 사고·자살의 약간 변동.
- 노년기 (50+ 세): 시간 따라 ↑. 노화·만성 질환 누적.
전형 bathtub 패턴.
3 단계 직관:
- 추상 정의: \(h(t)\) 가 \(t\) 에 따라 비단조. 단순 모수 (exponential, Weibull) 모형으로 적합 어려움.
- 일상어 비유: 자동차의 고장률 — 신차 (제조 결함), 안정 운행, 노후 (마모) 의 3 단계.
- 반사실 시나리오: 만약 hazard 가 일정 (exponential 가정) 으로 모형하면 인간 사망 적합 부적절. 부분 인구 (예: 20~40 세) 만 분석으로 가정 충족 가능. 또는 Weibull (단조) 또는 piecewise 모형.
2.7 Hazard 의 단위
\(h(t)\) 의 단위 = 1 / (시간 단위). 예:
- 1 년당 hazard \(h = 0.02/\text{yr}\) — 한 해에 2% 사망.
- 1 일당 hazard \(h = 0.02 / 365 = 5.5 \times 10^{-5}/\text{day}\).
3 단계 직관:
- 추상 정의: Hazard 는 비율 (rate) — 단위 시간 당. 확률 (0~1) 아님.
- 일상어 비유: 자동차 사고율 — “1 년에 1.5 회 사고” 같은 비율. 확률 아니므로 1 초과 가능 (이론적).
- 반사실 시나리오: 짧은 시간 단위 (예: 1 일) 에서는 \(h(t) \cdot dt \approx P(\text{event in } dt)\) 로 확률 근사. 긴 시간 단위에서는 누적 hazard 사용해야.
보고 시 단위 명시: - “Hazard ratio = 1.5” (단위 무관 비율). - “Hazard = 0.02 / yr” (단위 명시).
2.8 11.2.3 누적 위험 함수 \(H(t)\)
\[H(t) = \int_0^t h(u)\, du\]
\(0\) 에서 \(t\) 까지의 hazard 누적.
핵심 관계: \[S(t) = e^{-H(t)} \quad \Leftrightarrow \quad H(t) = -\log S(t)\]
2.9 4 가지 함수의 동치성
f(t) ←───── d/dt ─────→ F(t)
↓
CDF / 1 - S
↓
S(t) ←─── exp(-H) ───→ H(t)
↓ ↑
f(t)/S(t) = h(t) → ∫ → H(t)
5 함수가 모두 서로 변환 가능 — 하나의 정보, 5 가지 표현.
- 추상 정의: \(f\) 가 가장 기본 (분포의 정의), \(h\) 가 가장 임상적 (즉각 비교).
- 일상어 비유: 같은 도시의 인구 분포를 (1) 연령별 인구수, (2) 누적 비율, (3) 연령별 사망률, (4) 누적 사망 위험 으로 표현. 같은 자료, 다른 분석 도구.
- 반사실 시나리오: 만약 \(S(t)\) 만 추정하면 시점별 위험 패턴 (감소 → 일정 → 증가) 못 본다. \(H(t)\) 의 기울기 변화 (= \(h(t)\)) 가 패턴 시각화.
2.10 4 함수의 사용 분업
| 함수 | 활용 |
|---|---|
| \(S(t)\) | 환자 보고, KM 곡선 시각화 |
| \(F(t) = 1 - S(t)\) | 누적 사건 발생 보고 |
| \(h(t)\) | 시점별 위험 비교, Cox 모형 |
| \(H(t)\) | 모형 진단 (NA estimator), Weibull plot |
| \(f(t)\) | 이론 분석, 분포 적합 |
3 Glioblastoma 사례 — Example 11.1
Cisplatin 치료 시작부터 사망까지의 주 단위:
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
모두 사건 발생 — censoring 없음.
KM 추정: - 27 주에 약 50% (median survival). - 120 주에 0.
3 단계 직관:
- 추상 정의: 사건이 흔하고 censoring 0 — 분석이 단순.
- 일상어 비유: 교실의 학생들이 모두 시험을 응시하는 경우 — 모든 자료 활용.
- 반사실 시나리오: 만약 일부가 추적 손실 (censored) 이면 KM 의 정직한 처리. 또는 administrative censoring (연구 종료) 도 같은 방식.
3.1 KM 추정의 산출
KM 추정량: \[\hat S(t) = \prod_{t_i \le t} \left(1 - \frac{d_i}{n_i}\right)\]
각 사건 시점의 조건부 생존 확률을 곱.
| \(t\) | \(n_t\) | \(e_t\) | \(\hat S(t)\) |
|---|---|---|---|
| 10 | 27 | 1 | \(26/27 = 0.9630\) |
| 12 | 26 | 1 | \(0.9630 \cdot 25/26 = 0.9259\) |
| 13 | 25 | 1 | \(0.9259 \cdot 24/25 = 0.8889\) |
| 15 | 24 | 1 | \(0.8519\) |
| 16 | 23 | 1 | \(0.8148\) |
| 20 | 22 | 2 | \(0.7407\) |
| 24 | 20 | 2 | \(0.6667\) |
| 26 | 18 | 2 | \(0.5926\) |
| 27 | 16 | 1 | \(0.5556\) |
| … | … | … | … |
해석: - 16 주까지 81.5% 생존. - 27 주까지 55.6%. - 73 주에 14.8%.
Hazard 의 spiky 패턴: KM hazard \(\hat h_t = e_t/(n_t \cdot u_t)\) 가 사건 빈도 + 위험 인구에 따라 극단적 변화 (사건 없는 구간 0, 빈번한 구간 ↑).
4 코드 예시 — KM + Hazard 시각화
import numpy as np
import pandas as pd
from lifelines import KaplanMeierFitter, NelsonAalenFitter
import matplotlib.pyplot as plt
# Glioblastoma 자료
times = [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 = [1] * len(times) # 모두 사건 발생
# KM (S(t))
kmf = KaplanMeierFitter()
kmf.fit(times, events, label="Glioblastoma")
# NA (H(t))
naf = NelsonAalenFitter()
naf.fit(times, events, label="Glioblastoma")
# 시각화
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# S(t)
kmf.plot_survival_function(ax=axes[0])
axes[0].set_title("Survival function S(t)")
axes[0].set_xlabel("Time (weeks)")
axes[0].set_ylabel("S(t)")
# 1 - S(t) = F(t)
axes[1].plot(kmf.survival_function_.index,
1 - kmf.survival_function_.values.flatten())
axes[1].set_title("Cumulative density F(t)")
axes[1].set_xlabel("Time (weeks)")
axes[1].set_ylabel("F(t) = 1 - S(t)")
# H(t)
naf.plot_cumulative_hazard(ax=axes[2])
axes[2].set_title("Cumulative hazard H(t)")
axes[2].set_xlabel("Time (weeks)")
axes[2].set_ylabel("H(t)")
plt.tight_layout()해석: 같은 자료의 3 가지 시각. \(S(t)\) 가 감소, \(F(t)\) 가 증가, \(H(t)\) 가 누적 증가. \(H(t) = -\log S(t)\) 관계 자동 충족.
5 A/B 테스트의 Survival 함수 활용
A/B 테스트에서 시간 차원이 있는 분석에 survival function 자연 적용.
A/B 테스트의 retention curve = 사용자의 가입 후 이탈까지의 시간 분석.
- \(T\): 가입 후 이탈까지의 일수.
- \(\delta\): 이탈 여부 (분석 시점에 활성 = censored).
KM 곡선이 retention curve. 두 군 (A vs B) 비교 시 log-rank test 가 통계 유의성 검정.
3 단계 직관:
- 추상 정의: A/B 의 결과를 단순 binary (이탈 yes/no) 가 아닌 시간 차원 보존 분석 → 정보 효율 ↑.
- 일상어 비유: 학생 자퇴율 분석 — “1 년 자퇴율” 이항 분석 vs “자퇴까지 시간” 시계열 분석. 후자가 풍부.
- 반사실 시나리오: 만약 logistic 으로만 분석하면 추적 길이 차이 (조기 가입 vs 후기 가입) 의 정보 손실. KM + Cox 가 정직.
6 Bathtub 의 IT 판 — 사용자 lifecycle
hazard (이탈)
↑
│ ╲ (가입 직후 이탈 — 1 일~1 주: onboarding 실패)
│ ╲
│ ╲
│ ─────────── (안정기: 6 개월~2 년)
│ ╱
│ ╱ (장기 사용자의 churn: 권태·경쟁사)
└──────────────────────────────────────→ tenure
0d 7d 30d 90d 1yr 2yr 3yr
3 단계 직관:
- 추상 정의: 사용자 hazard 가 비단조 — 단순 exponential 부적합. 단계별 분석 또는 Weibull 권장.
- 일상어 비유: 결혼 이혼율의 시간 패턴 — 신혼 (소수 이혼), 안정기, 장기 (권태로운 ↑).
- 반사실 시나리오: 단계 무시 후 평균 hazard 만 보면 onboarding 위험 + 장기 churn 위험 모두 평탄화. 단계별 분석 (e.g., piecewise hazard) 이 정직. :::
7 결론
생존·위험·누적위험 함수가 시간-사건 분석의 세 기둥. 4 함수 (\(S, F, f, h, H\)) 가 모두 서로 변환 가능하나 활용 분업이 다름. Bathtub 곡선 같은 비단조 패턴이 모수 모형의 한계를 시사 — Cox PH 의 강점.
다음 글 (H-WOO11-2) 에서 hazard 추정의 4 가지 방법 (KM, Person-time, Actuarial, Nelson-Aalen) 의 수식과 활용을 깊이 본다.
8 관련 주제
- Survival·Cox 회귀 개관
- 1111-11-11, 위험 함수 추정 4 방법
- 1111-11-11, 모수적 모형 (Exp/Weibull)
Phase B 크로스링크
- 생존 분석·Cox PH (Schulz) — 임상 시각
- 생명표·KM (B12) — 기본 추정
Statistics 크로스링크
Time-to-Event 통합 정리