기타 분포와 모델 선택

Python에서의 Survival Analysis

Shae Wang

Senior Data Scientist

어떤 모델이 데이터에 가장 잘 맞나요?

동일 데이터에 대해 다른 모델로 그린 생존 곡선 4개

Python에서의 Survival Analysis

모수 모델 선택하기

  • 비모수적 모델링(예: 카플란–마이어)
    • 분포 가정이 없어 데이터를 정확히 설명
    • 매끄럽지/연속적이지/미분 불가능
  • 모수적 모델링(예: 와이블)
    • 보통 더 많은 정보를 제공
    • 잘못된 모델 사용 시 큰 편향 초래
Python에서의 Survival Analysis

대표적 모수 생존 모델

  • 와이블(Weibull) 모델
    from lifelines import WeibullFitter
    
  • 지수(Exponential) 모델
    from lifelines import ExponentialFitter
    
  • 로그정규(Log Normal) 모델
    from lifelines import LogNormalFitter
    
  • 로그로지스틱(Log Logistic) 모델
    from lifelines import LogLogisticFitter
    
  • 감마(Gamma) 모델
    from lifelines import GeneralizedGammaFitter
    
Python에서의 Survival Analysis

아카이케 정보 기준(AIC)

  • AIC: 주어진 데이터에 대한 예측 오류와 통계 모델의 상대적 품질 추정치
  • 모델이 잃는 정보량을 추정하고, 추정 파라미터 수가 많을수록 패널티 부여
    • 정보 손실이 적을수록 모델 품질이 높음
    • 파라미터가 적을수록(단순할수록) 모델 품질이 높음
  • 후보 모델 중 AIC 값이 최소인 모델을 선택
Python에서의 Survival Analysis

AIC로 모델 선택하기

1) lifelines에서 모수적 모델 적합

2) 각 모델의 AIC_ 속성 출력·비교

3) AIC가 가장 낮은 모델 선호

from lifelines import WeibullFitter, 
                      ExponentialFitter, 
                      LogNormalFitter
wb = WeibullFitter().fit(D, E)
exp = ExponentialFitter().fit(D, E)
log = LogNormalFitter().fit(D, E)
print(wb.AIC_, exp.AIC_, log.AIC_)
215.9091   216.1183   202.3498
Python에서의 Survival Analysis

find_best_parametric_model()

  • find_best_parametric_model(): 모수 모델 간 AIC 비교를 자동화하는 lifelines 내장 함수
  • lifelines의 모든 모수 모델을 순회

사용 방법

  • T: 기간, E: 검열 여부
    best_model, best_aic_ = find_best_parametric_model(event_times=T,
                                                       event_observed=E,
                                                       scoring_method="AIC")
    print(best_model)
    
<lifelines.WeibullFitter:"Weibull_estimate", 
fitted with 686 total observations, 387 right-censored observations>
Python에서의 Survival Analysis

QQ 플롯

  • QQ 플롯: 두 분포의 분위수를 서로 대비하여 비교
  • 두 분포가 유사하면 점들이 y = x 선에 가깝게 위치

QQ 플롯 예시

Python에서의 Survival Analysis

QQ 플롯으로 모델 선택하기

1) lifelines에서 모수적 모델 적합

2) 각 모델의 QQ 플롯 작성

3) y = x에 가장 가까운 QQ 플롯 선호

from lifelines.plotting import qq_plot

for model in [WeibullFitter(), LogNormalFitter(), LogLogisticFitter(), ExponentialFitter()]: model.fit(T, E) qq_plot(model)
plt.show()
Python에서의 Survival Analysis

QQ 플롯으로 모델 선택하기

모델 비교용 QQ 플롯

Python에서의 Survival Analysis

연습해 봅시다!

Python에서의 Survival Analysis

Preparing Video For Download...