Python에서의 Survival Analysis
Shae Wang
Senior Data Scientist
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: 하나 이상의 연속형 변수가 생존함수에 미치는 영향은 어떻게 평가하나요?
$$Y_i=f(X_i,\beta)$$
$$Y_i: \text{지속시간}, X_i: \text{공변량}$$
$$\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는 공변량을 바탕으로 이 가속/감속 관계를 모형화합니다.
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 |
mortgage_dfproperty_type는 더미 변수로 대체:house: "house"면 1, "apartment"면 0principalinterestproperty_taxcredit_scoreWeibullAFTFitter 클래스 임포트 및 인스턴스화from lifelines import WeibullAFTFitter
aft = WeibullAFTFitter()
.fit()으로 데이터에 적합aft.fit(df=mortgage_df,
duration_col="duration",
event_col="paid_off")
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
사용자 지정 공변량에 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
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