공변량이 있는 Weibull 모형

Python에서의 Survival Analysis

Shae Wang

Senior Data Scientist

생존함수 비교

Kaplan-Meier 추정량으로 그룹 비교:

아파트 vs. 주택 Kaplan-Meier 생존 곡선.

로그순위 검정으로 그룹 비교:

<lifelines.StatisticalResult: logrank_test>
 null_distribution = chi squared
degrees_of_freedom = 1
         test_name = logrank_test
 test_statistic    p  -log2(p)
           0.09 0.77      0.38

   

Q: 하나 이상의 연속형 변수가 생존함수에 미치는 영향은 어떻게 평가하나요?

Python에서의 Survival Analysis

생존 회귀

  • 공변량으로 생존함수를 모형화하는 방법
  • 각 공변량이 생존함수에 미치는 영향을 정량화

$$Y_i=f(X_i,\beta)$$

$$Y_i: \text{지속시간}, X_i: \text{공변량}$$

  • 예시 공변량: 나이, 체중, 국가
Python에서의 Survival Analysis

가속 실패 시간(AFT) 모형

$$\text{집단 A}: S_A(t)$$

$$\text{집단 B}: S_B(t)$$

$$S_A(t)=S_B(t*\lambda)$$

  • $S_B(t)$는 $S_A(t)$를 따라 계수 $\lambda$만큼 가속/감속됩니다.

  • AFT는 공변량을 바탕으로 이 가속/감속 관계를 모형화합니다.

  • 공변량이 $a$에서 $b$로 변하면 사건까지 시간이 가속도 실패율 $\lambda$만큼 빨라지거나 느려집니다.
  • 예: $S_{dog}(t)=S_{human}(t*7)$
Python에서의 Survival Analysis

생존 회귀를 위한 데이터

DataFrame 예: mortgage_df

id property_type principal interest property_tax credit_score duration paid_off
1 house 1275 0.035 0.019 780 25 0
2 apartment 756 0.028 0.020 695 17 1
3 apartment 968 0.029 0.017 810 5 0
... ... ... ... ... ... ... ...
1000 house 1505 0.041 0.023 750 30 1
Python에서의 Survival Analysis

Weibull과 AFT 결합: Weibull AFT 모형

  • DataFrame: mortgage_df
  • 공변량:
    • property_type는 더미 변수로 대체:
      • house: "house"면 1, "apartment"면 0
    • principal
    • interest
    • property_tax
    • credit_score
  1. WeibullAFTFitter 클래스 임포트 및 인스턴스화
    from lifelines import WeibullAFTFitter
    aft = WeibullAFTFitter()
    
  2. .fit()으로 데이터에 적합
    aft.fit(df=mortgage_df,
         duration_col="duration",
         event_col="paid_off")
    
Python에서의 Survival Analysis

모형 출력 해석

print(aft.summary)
<lifelines.WeibullAFTFitter: fitted with 1808 observations, 340 censored>
                      coef  exp(coef)  se(coef)      z       p
lambda_ house         0.04       1.04      0.01   0.99    0.32  
        principal    -0.03       0.97      0.22  -1.04    0.30  
        interest      0.11       1.11      0.15   1.96    0.05  
        property_tax  0.31       1.36      0.27   1.15    0.25  
        credit_score -0.16       0.85      0.14  -2.33    0.02  
        Intercept     3.99      54.06      0.41   9.52 <0.0005   
rho_    Intercept     0.34       1.40      0.08   3.80 <0.0005
Python에서의 Survival Analysis

사용자 지정 formula의 WeibullAFTFitter

사용자 지정 공변량에 formula 사용:

aft.fit(df=mortgage_df,
        duration_col="duration",
        event_col="paid_off",
        formula="principal + interest * house")

상호작용항이 있는 선형모형과 유사:

$\beta_1$principal$+\beta_2$interest$+\beta_3$house$+\beta_4$interest$\cdot$house

Python에서의 Survival Analysis

모형 출력 해석

print(aft.summary)
<lifelines.WeibullAFTFitter: fitted with 1808 observations, 340 censored>
                       coef  exp(coef)  se(coef)      z       p
lambda_ principal     -0.03       0.97      0.22  -1.04    0.30     
        interest       0.11       1.11      0.15   1.96    0.05  
        house          0.04       1.04      0.01   0.99    0.32  
        interest:house 0.06       1.06      0.14   0.42    0.64
        Intercept      3.99      54.06      0.41   9.52 <0.0005   
rho_    Intercept      0.34       1.40      0.08   3.80 <0.0005
Python에서의 Survival Analysis

Let's practice!

Python에서의 Survival Analysis

Preparing Video For Download...