1. 생존 분석(Survival analysis)
일반 머신러닝이 사건 발생 여부(Classification)만을 다룬다고 하면, 생존 분석은 사건 발생 여부 + 발생 시점을 둘다 다룬다.
때문에 시계열적인 요소가 모델에 반영이 되어있으며, 검열(Censoring)된 사례도 분석에 적용할 수 있다는 점에서 차이가 있다.
즉 머신러닝에서는 확실한 라벨값이 반영되어야하 학습이 가능하지만, 생존분석에서는 그렇지 않아도 분석이 가능하다.
이러한 장점으로 임상 연구에서 신부전 발생과 같은 질병 발생에서부터 사망, 재발, 입원 등의 범위까지 시간-의존적 사건을 분석할 때 널리 사용된다.
일반적으로 머신러닝과 생존분석에서 사용되는 변수는 다음 표와 같다.
| 구분 | 일반 머신러닝 | 생존분석 |
| 입력값(X) | 환자 정보, 검사 수치, 영상 특징, 유전정보 등 설명변수 | 환자 정보, 검사 수치, 영상 특징, 유전정보 등 설명변수 |
| 타겟값(y) | 분류: 0/1 또는 다중 클래스, 회귀: 연속형 값 | 생존시간(time) + 사건 발생 여부(event) |
생존분석에서 아주 중요한 개념은 누적 발생 함수 (CIF, Cumulative Incidence Function) 이다.
CIF 자체는 특정 사건이 시간 t까지 실제로 발생했을 확률을 의미하며, 다음과 같은 수식으로 표현한다.

실제 임상에서는 여러 종류의 사건들이 서로 경쟁하는 경우가 많다. 예를 들어서 우리가 알고싶은 사건이 심혈관 질환으로 인한 사망이라고 가정했을 때, 암 사망이나 기타 이유때문에 사망하는 경우가 있을 수 있다.
경쟁 사건은 관심 사건의 발생 기회가 없어지게하는 관심 사건 외의 사건을 의미한다.
아까 언급한 예시에서는 암 사망이나 기타 사망이 경쟁 사건으로 정의할 수 있다.
경쟁사건을 고려하지 않고 단순 검열처리하는 경우에는 생존 분석에서 관심 사건의 발생 확률 자체를 과대추정할 수 있다.
2. 생존 분석 모델 종류
2-1. Cox Proportional Hazards Model (CoxPH)
생존분석에서 가장 대표적인 반모수(semi-parametric) 모형이다.
사건 발생 위험도(hazard)를 공변량의 선형 결합과 연결해 해석한다. 이 모델의 가장 큰 특징은 기저위험함수(baseline hazard)의 형태를 명시적으로 가정하지 않으면서도, 각 변수의 효과를 위험비(hazard ratio) 형태로 추정할 수 있다는 점이다.
CoxPH의 핵심 가정은 비례위험 가정(proportional hazards assumption)이다.
즉, 두 개인의 위험비가 시간에 따라 변하지 않는다고 본다. 이 가정이 성립하면 변수의 해석이 매우 직관적이다.
예를 들어 어떤 변수의 hazard ratio가 1.5라면, 다른 조건이 같을 때 사건 발생 위험이 50% 높다고 해석할 수 있다.
*주의: 시간에 따라 효과가 크게 달라지는 변수에는 이 가정이 깨질 수 있다.
CoxPH의 장점은 해석 가능성이 높고, 임상 연구나 역학 연구에서 결과를 설명하기 좋다는 점이다. 특히 공변량별 위험비와 신뢰구간을 제시할 수 있어 논문 작성에 매우 유리하다. 반면 단점은 변수와 위험 간 관계가 지나치게 비선형이거나 상호작용이 복잡한 경우 성능이 제한될 수 있다는 점이다. 또한 비례위험 가정이 위배되면 결과 해석이 왜곡될 수 있다.
2-2. Random Survival Forest (RSF)
Random Survival Forest는 랜덤포레스트를 생존 분석 데이터에 맞게 확장한 비모수(nonparametric) 앙상블 모델이다.
다수의 생존 트리를 학습한 뒤 이를 앙상블하여 예측한다. 각 트리는 부트스트랩 표본으로 학습되고, 분할 기준은 생존 차이를 잘 구분하는 방향으로 설정된다.
RSF는 CoxPH와 달리 비선형성, 고차 상호작용, 복잡한 변수 구조를 자연스럽게 반영할 수 있다. 따라서 실제 임상 데이터처럼 변수 간 관계가 단순하지 않은 경우 CoxPH보다 더 높은 예측 성능을 보일 수 있다. 또한 OOB(out-of-bag) 오류 추정, 변수 중요도(variable importance) 같은 랜덤포레스트 계열의 장점도 활용할 수 있다.
반면 RSF는 CoxPH에 비해 해석이 어렵다. 개별 회귀계수나 hazard ratio처럼 직접적인 설명이 어렵고, 어떤 변수가 중요한가 수준의 해석에 머무르는 경우가 많다. 또한 데이터가 작을 때는 과적합 위험을 살펴야 하며, 논문에서 기전적 설명보다 예측 정확도가 더 강조되는 경향이 있다.
2-3. Fine-Gray Model
Fine-Gray 모델은 경쟁위험(competing risks) 상황을 다루기 위해 제안된 모형이다.
경쟁위험이란 한 사건이 다른 사건의 발생 가능성을 사실상 막아버리는 상황을 말한다. 예를 들어 “심혈관 사망”을 관심 사건으로 볼 때, “비심혈관 사망”은 경쟁위험이 된다. 이런 경우 단순 Cox 모델로 관심 사건만 분석하면 누적발생확률을 왜곡할 수 있다. Fine과 Gray는 1999년에 이러한 문제를 해결하기 위해 subdistribution hazard를 기반으로 하는 비례위험 모형을 제안했다.
Fine-Gray 모델의 강점은 누적발생함수를 직접적으로 해석하는 데 유리하다는 점이다. 경쟁위험이 존재할 때 연구자가 관심 있는 것은 종종 “시간이 지남에 따라 특정 사건이 실제로 얼마나 발생하는가”인데, Fine-Gray는 바로 이 질문에 맞춰진 모델이다. 따라서 이식 실패, 원인별 사망, 입원 원인 분석처럼 여러 사건이 서로 경쟁하는 임상 연구에서 매우 유용하다.
다만 Fine-Gray의 회귀계수는 일반 CoxPH의 cause-specific hazard와 해석이 다르다. 즉, subdistribution hazard ratio는 “순간 위험”이라기보다 누적발생확률의 변화 방향과 더 밀접하게 연결되므로, 연구자가 해석 프레임을 정확히 이해해야 한다. 최근 방법론 논문들도 Fine-Gray를 사용할 때 이 해석상의 차이를 분명히 구분할 필요가 있다고 강조한다.
2-4. DeepHit
DeepHit은 딥러닝 기반 생존 분석 모델로, Lee 등이 2018년 AAAI에서 제안했다. 이 모델은 기존 Cox 계열처럼 비례위험을 가정하지 않고, 신경망을 이용해 생존 시간의 분포 자체를 직접 학습한다. 특히 경쟁위험 상황까지 함께 다룰 수 있도록 설계되었으며, 각 사건 유형과 시간 구간에 대한 확률을 예측하는 구조를 가진다.
DeepHit의 가장 큰 장점은 복잡한 비선형 관계와 시간 패턴을 유연하게 학습할 수 있다는 점이다. 또한 전통적 Cox 모델과 달리 비례위험 가정을 요구하지 않으므로, 시간에 따라 효과가 달라지는 복잡한 문제에서도 적용 가능하다. 원 논문에서는 likelihood 기반 손실과 ranking loss를 함께 사용하여, 단순 확률 추정뿐 아니라 사건 시간의 순서 정보도 반영하도록 설계했다.
하지만 DeepHit은 충분한 데이터와 적절한 하이퍼파라미터 튜닝이 필요하며, 모델 해석성이 떨어질 수 있다. 임상 현장에서는 예측력이 높더라도 “왜 그런 예측이 나왔는지” 설명이 필요하기 때문에, DeepHit 단독 사용보다는 설명 가능한 보조 분석과 함께 제시하는 것이 바람직하다. 또한 데이터 규모가 작을 경우 오히려 CoxPH나 RSF보다 불안정할 수 있다.
3. 생존 분석 모델 활용
3-1. scikit-survival
CoxPH, RSF는 Scikit-survival 패키지에서 모델을 불러와서 활용할 수 있다(아래 링크 참고).
https://scikit-survival.readthedocs.io/en/stable/index.html
*주의: 설치 시 다른 패키지 버전에 맞춰서 받아야한다 (scikit-learn 버전과 충돌 되는 경우가 있었음)

코드 자체는 scikit-learn에서 import 하고 fitting 시키는 것과 유사한 방식인 듯하다.
from sksurv.linear_model import CoxnetSurvivalAnalysis, CoxPHSurvivalAnalysis
from sksurv.ensemble import RandomSurvivalForest
# CoxPH 모델 학습
coxph = CoxnetSurvivalAnalysis(l1_ratio=0.9, fit_baseline_model=True)
coxph.fit(Xt, y)
# RSF 모델 학습
rsf = RandomSurvivalForest(n_estimators=1000, min_samples_split=10, min_samples_leaf=15, n_jobs=-1)
rsf.fit(Xt, y)
3-2. Fine-gray 모델
Fine-gray 모델은 R기반으로 구현되어있다 (아래 링크 참고).
https://cran.r-project.org/web/packages/riskRegression/refman/riskRegression.html#FGR
모델 사용 방법은 FGR함수를 통해서 모델을 학습 시킨다.
library(prodlim)
library(survival)
library(cmprsk)
library(lava)
d <- prodlim::SimCompRisk(100)
f1 <- FGR(Hist(time,cause)~X1+X2,data=d)
print(f1)
## crr allows that some covariates are multiplied by
## a function of time (see argument tf of crr)
## by FGR uses the identity matrix
f2 <- FGR(Hist(time,cause)~cov2(X1)+X2,data=d)
print(f2)
## same thing, but more explicit:
f3 <- FGR(Hist(time,cause)~cov2(X1)+cov1(X2),data=d)
print(f3)
3-3. pycox
pycox는 PyTorch 이용한 생존 분석 및 사건 발생 시간 예측을 위한 파이썬 패키지이다.
(R 버전은 survivalmodels 에 있다고함)
https://github.com/havakv/pycox
GitHub - havakv/pycox: Survival analysis with PyTorch
Survival analysis with PyTorch. Contribute to havakv/pycox development by creating an account on GitHub.
github.com
참고문헌
- Lee, Changhee, et al. "Deephit: A deep learning approach to survival analysis with competing risks." Proceedings of the AAAI conference on artificial intelligence. Vol. 32. No. 1. 2018.
'머신러닝 및 인공지능' 카테고리의 다른 글
| 머신러닝 관련 데이터셋/경진대회/공모전 사이트 정보 공유 (0) | 2026.07.27 |
|---|---|
| 딥러닝을 알아보자 [Chapter 1] - Deep Neural Network (DNN) (0) | 2025.07.13 |
| 인공지능(AI) 머신러닝(ML) 딥러닝(DL) 개념 구분 정리 (0) | 2023.09.24 |