카플란–마이어 추정 적합하기

Python에서의 Survival Analysis

Shae Wang

Senior Data Scientist

카플란–마이어 추정기란?

사건까지 시간 데이터의 생존 함수를 추정하는 비모수 통계.

  • 다음으로도 불림
    • 곱한계(product-limit) 추정량
    • K-M 추정기
  • 비모수: 수집된 데이터로 생존 곡선을 구성하며, 분포 가정을 하지 않음
Python에서의 Survival Analysis

수학적 직관

정의:

  • $t_i$: 지속 시간
  • $d_i$: 시점 $t_i$에 발생한 사건 수
  • $n_i$: 시점 $t_i$까지 생존이 확인된 개체 수

 

생존 함수 $S(t)$의 추정: $$S(t)=\prod_{i:t_i\leq t}\bigg(1-\frac{d_i}{n_i}\bigg)$$

Python에서의 Survival Analysis

왜 곱한계 추정량이라 부를까요?

사건이 3시점: 1, 2, 3이라고 합시다

$t=2$의 생존율: $$S(t=2)=\bigg(1-\frac{d_1}{n_1}\bigg)*\bigg(1-\frac{d_2}{n_2}\bigg)$$

$t=3$의 생존율: $$S(t=3)=S(t=2)*\bigg(1-\frac{d_3}{n_3}\bigg)$$

시점 t의 생존율은 t 및 그 이전 각 시점의 생존 확률을 곱한 값입니다.

Python에서의 Survival Analysis

유의해야 할 가정

  • 명확한 사건: 관심 사건이 명시된 시점에 발생합니다.
  • 모든 대상에서 생존확률이 비교 가능: 입실 시점과 무관합니다.
  • 비정보적 검열: 검열 관측의 생존 전망이 추적 지속 관측과 동일합니다.
Python에서의 Survival Analysis

lifelines로 카플란–마이어 추정기

from lifelines import KaplanMeierFitter

KaplanMeierFitter: lifelines 라이브러리의 클래스

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
Python에서의 Survival Analysis

모기지 문제 예시

DataFrame 이름: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
Python에서의 Survival Analysis

모기지 문제 예시

DataFrame 이름: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
from lifelines import KaplanMeierFitter
mortgage_kmf = KaplanMeierFitter()
mortgage_kmf.fit(duration=mortgage_df["duration"], 
        event_observed=mortgage_df["paid_off"])
<lifelines.KaplanMeierFitter:"KM_estimate", 
fitted with 100 total observations, 
18 right-censored observations>
Python에서의 Survival Analysis

카플란–마이어 추정기 사용하기

미상환 모기지의 중앙 생존 시간은?

print(mortgage_kmf.median_survival_time_)
4.0

개시 후 매년 모기지가 미상환일 확률은?

print(mortgage_kmf.survival_function_)
          KM_estimate
timeline             
0.0          1.000000
1.0          0.983267
2.0          0.950933
3.0          0.892328
Python에서의 Survival Analysis

카플란–마이어 추정기 사용하기

개시 후 34년 시점까지 모기지가 상환되지 않을 확률은?

mortgage_kmf.predict(34)
0.037998
Python에서의 Survival Analysis

장점과 제한사항

장점
  • 생존확률 해석이 직관적입니다.
  • 어떤 사건-시간 데이터에도 유연하게 적용됩니다.
  • 사건-시간 분석에서 보통 첫 모델로 시도합니다.
제한사항
  • 생존 곡선이 매끄럽지 않습니다.
  • 데이터의 50% 이상이 검열되면 .median_survival_time_을 계산할 수 없습니다.
  • 공변량이 생존 함수에 미치는 영향 분석에는 비효율적입니다.
Python에서의 Survival Analysis

연습해 봅시다!

Python에서의 Survival Analysis

Preparing Video For Download...