경쟁 위험 (Competing Risks) 과 Joint Modeling

Woodward Ch.11.9 — Competing Risks & Joint Modeling

경쟁 위험 (competing risks) 의 정의·KM 의 한계 (independent censoring 위반)·CIF·Cause-specific vs Subdistribution Hazard·Fine-Gray 모형의 수식과 활용을 추상 → 일상어 → 반사실 3 단계 직관으로 풀어낸다. 임상·실험 분석에서의 응용도 함께 다룬다.

Experimentation
Modeling
저자

Kwangmin Kim

공개

2026년 05월 08일

1 경쟁 위험의 정의

정의: Competing Risks

관심 사건 외의 다른 사건이 같은 사람에서 발생하여 관심 사건을 영구히 차단 하는 상황 (Woodward, 2014, Ch.11.9).

예시: - 관심: 폐암 사망 / 경쟁: 심혈관 사망 (전자가 차단). - 관심: 첫 결혼 / 경쟁: 사망. - 관심: A/B 의 결제 / 경쟁: 이탈 (이탈자는 결제 불가). - 관심: 골절 / 경쟁: 비-골절 사망.

각 사람은 결국 여러 사건 중 하나만 경험.

1.1 Independent Censoring 가정의 위반

가정 위반: KM 의 핵심 가정

KM 의 가정 — censoring 시점이 사건 시점과 독립.

경쟁 위험은 이를 위반: - 심혈관 사망자는 폐암 사건 발생 불가 → “이 시점까지 폐암 미발생자” 의 자연 정의가 흔들림. - 단순 censoring 처리 시 폐암 누적 발생률 과대 추정.

3 단계 직관:

  • 추상 정의: \(T_{\text{관심}} \perp T_{\text{경쟁}}\) — 두 사건이 독립 가정. 같은 사람의 두 사건 모두 건강 상태에 의존하므로 일반적으로 종속.
  • 일상어 비유: 마라톤 결승선 통과 vs 부상 하산 — 둘 다 체력에 의존. 부상자를 censoring 으로 처리하면 결승률 부풀려.
  • 반사실 시나리오: 만약 두 사건이 정말 독립이면 KM OK. 실제로는 의학·IT 자료의 다수가 종속 → CIF 권장.

2 Naive 1 - KM 의 함정

가정 위반: Naive Approach

가설: 폐암 사망 자료에서 심혈관 사망을 censoring 처리. KM 으로 폐암 미발생 확률 \(\hat S_{\text{lung}}(t)\) 추정. 1 - KM 으로 “폐암 누적 발생 확률” 보고.

문제: 1 - KM 은 “심혈관 사망이 0 이라는 가정 하의 폐암 발생 확률” — 즉 가상 시나리오. 실제 자료에서의 누적 발생률 아님.

3 단계 직관:

  • 추상 정의: 1 - KM 가 conditional probability — “심혈관 사망 안 했다는 가정 하의 폐암 위험”.
  • 일상어 비유: 학생 100 명의 졸업률을 측정 — 자퇴자를 “그 시점까지 무사했다” 가정 처리 → 졸업률 부풀려짐.
  • 반사실 시나리오: 만약 심혈관 사망 0 이면 1 - KM 이 정확. 실제로는 항상 > 0 → CIF 가 정직.

3 Cumulative Incidence Function (CIF) — Aalen-Johansen

정의: CIF

원인 \(k\) 의 누적 발생 확률:

\[F_k(t) = P(T \le t, \text{cause} = k)\]

추정 (Aalen-Johansen): \[\hat F_k(t) = \sum_{t_i \le t} \hat S(t_i^-) \cdot \frac{d_{ki}}{n_i}\]

여기서: - \(\hat S(t_i^-) = \prod_{t_j < t_i} (1 - d_j / n_j)\) — 모든 원인 통합 KM (시점 \(t_i\) 직전). - \(d_{ki}\): 시점 \(t_i\) 의 원인 \(k\) 사건 수. - \(n_i\): \(t_i\) 직전 위험 인구.

성질: \(\sum_k F_k(t) + S(t) = 1\) (모든 사건 + 미발생자 = 1).

3.1 직관 — CIF 의 진성 발생률

직관 3 단계: CIF vs 1 - KM
  • 추상 정의: CIF 는 “시점 \(t\) 까지 원인 \(k\) 가 발생한 인구 비율” 의 직접 추정. 1 - KM 보다 작거나 같음.
  • 일상어 비유: 100 명 출발 → 시점 5 까지 70 명 무사 → 시점 5 에 원인 A 5 명, 원인 B 3 명 사망.
    • CIF_A(5) = 5/100 = 5%.
    • 1 - KM_A(5) ≈ 5/(100 - 3) = 5.2%.
    • 차이는 작아 보이지만 누적되면 큼.
  • 반사실 시나리오: 만약 경쟁 사건이 흔하면 1 - KM 의 과대 추정이 클 수 있음 (예: 노인 골반 골절 — 사망이 흔해 1 - KM 이 진성보다 ↑).

3.2 사례 — 골반 골절과 사망

사례: 70 세 여성 코호트

가설: 70 세 여성 1,000 명 5 년 추적.

  • 골반 골절 발생: 80 명.
  • 골절 없이 사망: 200 명.

Naive (1 - KM): \(1 - \hat S(5) \approx 80/(1000-200) = 10\%\) — 사망자를 censoring 처리.

CIF: \(\hat F_{\text{fracture}}(5) \approx 80/1000 = 8\%\).

차이 2%p — 사망이 골절을 차단하므로 진성 발생률이 KM 보다 낮음.

임상 활용: 환자에게 “5 년 안에 골절 위험” 보고 시 어느 수치가 정직한가? CIF.

3 단계 직관:

  • 추상 정의: 진성 누적 발생률 = 환자에게 직접 의미.
  • 일상어 비유: 보험 청구 발생률 — 사망자도 분모에 포함하여 진성 비율 계산.
  • 반사실 시나리오: 1 - KM 이 보고되면 환자가 위험 과대 평가. 의사 결정 왜곡.

4 Cause-Specific Hazard

정의: Cause-Specific Hazard

\[h_k^{cs}(t) = \lim_{\Delta t \to 0} \frac{P(t \le T < t + \Delta t, \text{cause} = k \mid T \ge t)}{\Delta t}\]

분모: 모든 사건 미발생자 (즉 시점 \(t\) 까지 어느 사건도 안 겪은 자).

모형: Cox-style cause-specific Cox PH.

\[h_k^{cs}(t \mid X) = h_{0k}^{cs}(t) \exp(\beta^T X)\]

각 원인별 별도 Cox 적합. 분석 시 다른 원인 = censoring 처리.

4.1 직관 — Etiology Focus

직관 3 단계: Cause-specific 의 활용
  • 추상 정의: “이 시점에 무사한 사람이 다음 순간 원인 \(k\) 를 겪을 즉각 비율” — 인과 메커니즘 (etiology) 분석 자연.
  • 일상어 비유: 약이 폐암 발생 메커니즘에 영향 vs 심혈관 메커니즘에 영향 → cause-specific HR 이 각각 답.
  • 반사실 시나리오: 약이 폐암 cause-specific HR ↓ 이지만 심혈관 cause-specific HR 무관 → 약은 폐암 메커니즘만 영향. CIF 만 보면 두 효과 결합돼 모호.

활용: - 인과 메커니즘 식별. - 약물 표적 분석. - 부작용 분석.

5 Subdistribution Hazard (Fine-Gray)

정의: Subdistribution Hazard

\[h_k^{sd}(t) = \lim_{\Delta t \to 0} \frac{P(t \le T < t + \Delta t, \text{cause} = k \mid T \ge t \text{ or } (T < t \wedge \text{cause} \ne k))}{\Delta t}\]

분모: 원인 \(k\) 미발생자 + 다른 원인으로 사건 발생자. 즉 다른 원인 사망자도 분모에 포함.

모형: Fine-Gray subdistribution Cox.

\[h_k^{sd}(t \mid X) = h_{0k}^{sd}(t) \exp(\beta^T X)\]

5.1 직관 — Prediction Focus

직관 3 단계: Subdistribution 의 의미
  • 추상 정의: “현재까지 원인 \(k\) 안 겪은 자 (다른 원인 사망자도 포함)” 의 즉각 사건 비율. 누적 발생 확률 (CIF) 의 직접 모형.
  • 일상어 비유: 인구 단위 예측 — “다음 순간 폐암 발병할 비율” — 심혈관 사망자도 분모에 (그들도 잠재적 폐암 위험).
  • 반사실 시나리오: 임상 의사가 환자에게 “5 년 안에 폐암 발생 위험” 예측 시 CIF 직접 모형 (Fine-Gray) 이 직관.

활용: - 환자 예측 (prognostic). - 의사 결정 도구. - Risk score (H-WOO13).

6 두 모형의 분업

Cause-specific vs Fine-Gray
측면 Cause-specific Cox Fine-Gray
분모 모든 사건 미발생자 원인 \(k\) 미발생자 (다른 원인 사망자 포함)
HR 해석 즉각적 발생 비율 누적 발생 확률 변화율
활용 Etiology (메커니즘) Prediction (예측)
다른 원인 Censored 처리 분모 잔존

3 단계 직관:

  • 추상 정의: 두 모형이 다른 질문에 답. Cause-specific = “왜 발생”, Fine-Gray = “언제 누적”.
  • 일상어 비유: 두 의사 — 한 의사는 약 메커니즘 (etiology), 다른 의사는 환자 예후 (prognosis). 다른 도구.
  • 반사실 시나리오: 한 모형만 보면 정보 손실. 두 모형 모두 보고가 표준.

7 Joint Modeling — 다중 결과의 동시 모형

정의: Joint Model

Survival outcome + 종단 (longitudinal) outcome 동시 모형.

예시: 환자의 항암 치료 반응 (longitudinal CD4) + 사망 (survival).

구조: \[\text{Longitudinal: } Y_{ij} = \alpha + \beta T_{ij} + \epsilon_{ij}\] \[\text{Survival: } h(t) = h_0(t) \exp(\gamma X + \eta Y(t))\]

여기서 \(Y(t)\) 는 longitudinal 결과의 시간 \(t\) 추정값.

7.1 활용 사례

사례: HIV 치료의 CD4 + 사망

가설: HIV 치료군 vs 대조군의 CD4 변화 + 사망 시간.

단순 분석: CD4 회귀 + Cox 별도 → 두 결과의 의존성 무시.

Joint model: CD4 의 진성 (latent) 값을 사망 hazard 의 covariate 로 → CD4 와 사망의 진성 관계 분석.

3 단계 직관:

  • 추상 정의: 두 결과의 latent process 공유 — 동시 추정으로 efficient.
  • 일상어 비유: 학생의 학습 과정 + 졸업 — 두 결과가 진성 능력에 의존. 따로 분석하면 정보 손실.
  • 반사실 시나리오: Joint 모형이 복잡하나 두 결과 모두 관심 시 표준. 한 결과만 관심이면 단순 모형 충분.

8 코드 예시 — CIF + Fine-Gray

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

np.random.seed(42)
n = 1000

# 가상: 두 원인 사망
df = pd.DataFrame({
    "T": np.random.exponential(scale=5, size=n),
    "cause": np.random.choice([1, 2], size=n, p=[0.4, 0.6]),
})
df.loc[df["T"] > 10, "cause"] = 0  # censored
df["T"] = np.minimum(df["T"], 10)

# CIF (Aalen-Johansen) for cause 1
ajf1 = AalenJohansenFitter()
ajf1.fit(durations=df["T"], event_observed=df["cause"], event_of_interest=1)

# Naive 1 - KM (treating cause 2 as censored)
event_cause1 = (df["cause"] == 1).astype(int)
kmf = KaplanMeierFitter()
kmf.fit(df["T"], event_cause1)
naive_cif = 1 - kmf.survival_function_

# 비교
fig, ax = plt.subplots(figsize=(10, 6))
ajf1.plot(ax=ax, label="CIF (Aalen-Johansen)")
naive_cif.plot(ax=ax, label="Naive 1 - KM (overestimate)")
ax.set_title("CIF vs Naive 1 - KM")
ax.set_xlabel("Time")
ax.set_ylabel("Cumulative incidence (cause 1)")
plt.legend()

해석: 두 추정의 차이가 경쟁 사건의 영향 — naive 가 항상 ≥ CIF.

9 A/B 테스트의 경쟁 위험

사례: A/B 의 결제 vs 이탈

A/B 테스트: - 관심 사건: 결제. - 경쟁 사건: 이탈 (이탈자는 결제 불가).

단순 분석: 이탈 = censoring → 결제 KM 분석. 과대 추정.

올바른 분석: - CIF (결제) — 이탈자 분모에 포함. - Cause-specific Cox: treatment 의 결제 hazard 효과. - Fine-Gray: treatment 의 결제 누적 확률 효과.

3 단계 직관:

  • 추상 정의: A/B 의 결제 lift 가 cause-specific (결제 메커니즘) vs subdistribution (누적 결제율) 다를 수 있음.
  • 일상어 비유: 약이 폐암 메커니즘 vs 누적 폐암 발생률 영향. 두 측도 다른 답.
  • 반사실 시나리오: 단순 KM 만 보면 이탈자 자료의 부분 정보 손실. CIF 가 정직.

10 Multistate Models — Competing Risk 의 일반화

정의: Multistate Model

여러 상태 사이의 전이 hazard 모형.

예시: - Healthy → Disease → Death. - Active → Churned → Reactivated.

각 전이의 hazard \(h_{ij}(t)\) 별도 모형.

직관 3 단계: Multistate 의 활용
  • 추상 정의: Competing risk 의 일반화. 상태 간 전이의 시간 분석.
  • 일상어 비유: 학생의 상태 (재학 → 졸업 → 취업 → 이직) — 각 전이 별도 분석.
  • 반사실 시나리오: 단일 hazard 만 보면 상태 변화 가림. Multistate 가 종합.

11 Q&A — 경쟁 위험 흔한 오해

Q1: KM 만으로 충분?

A: 경쟁 사건 흔하면 (> 5%) CIF 권장.

3 단계 직관:

  • 추상 정의: KM 의 1 - S 가 다른 사건 0 가정 — 가상 시나리오.
  • 일상어 비유: 다른 코스 가는 등산객 무시 — 잘못된 도착률.
  • 반사실 시나리오: 경쟁 흔하지 않으면 (< 1%) KM 가능. 흔하면 CIF.
Q2: Cause-specific 와 Fine-Gray 결과 차이?

A: 다른 정보 — 둘 다 보고 권장.

3 단계 직관:

  • 추상 정의: Cause-specific = etiology, Fine-Gray = prediction.
  • 일상어 비유: 약 메커니즘 vs 환자 예후.
  • 반사실 시나리오: 한 결과만 보고 → 임상 의사 결정 부족.

12 결론

경쟁 위험은 KM 의 independent censoring 가정 위반. CIF (Aalen-Johansen) 가 진성 누적 발생률, Cause-specific Cox 가 메커니즘 분석, Fine-Gray 가 예측 도구. Multistate 모형이 경쟁 위험의 일반화. 임상·IT 분석에서 다중 사건이 흔할 때 표준 도구.

다음 글 (H-WOO11-8) 에서 Poisson regression 의 person-time 분석을 본다.

13 관련 주제

Phase B 크로스링크

Statistics 크로스링크

Subscribe

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