Weibull 모형 적합

Python에서의 Survival Analysis

Shae Wang

Senior Data Scientist

확률분포

확률분포

서로 다른 사건 결과의 확률을 설명하는 수학적 함수입니다.

정규분포

Python에서의 Survival Analysis

확률분포

확률분포

서로 다른 사건 결과의 확률을 설명하는 수학적 함수입니다.

균등분포

Python에서의 Survival Analysis

Weibull 분포 소개

Weibull 분포

연속형 확률분포로, 사건까지의 시간을 잘 모델링합니다(원래는 입자 크기 분포에 적용).

Weibull 확률밀도함수

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k}$$ $$x\geq0,k>0,\lambda>0$$

Python에서의 Survival Analysis

Weibull 분포 소개

$k$

모양을 결정

k 변화

$\lambda$

스케일을 결정

lambda 변화

Python에서의 Survival Analysis

데이터에 Weibull 분포 적합

한 기업이 고장에 취약한 기계들을 운영합니다...

기계 고장 히스토그램

Python에서의 Survival Analysis

데이터에 Weibull 분포 적합

한 기업이 고장에 취약한 기계들을 운영합니다...

기계 고장 Weibull

Python에서의 Survival Analysis

Weibull 분포에서 생존함수로

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k} \quad\rightarrow\quad\qquad\qquad S(t)=e^{-(t/\lambda)^\rho}$$

Weibull에서 생존함수로

$\rho$는 k와 동일함

Python에서의 Survival Analysis

조절값: k와 lambda

k와 $\lambda$
  • k(또는 $\rho$): 모양을 결정
  • $\lambda$: 스케일을 결정(모집단의 63.2%가 사건을 경험하는 시점을 의미)

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k} \quad\rightarrow\quad f(x;\lambda,k=3)=\frac{3}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^2e^{-(x/\lambda)^3}$$

  • Weibull 분포: 고장/사건률이 시간의 거듭제곱에 비례함.
Python에서의 Survival Analysis

k(또는 $\rho$) 해석

k<1, 사건률 감소

  • $k<1$이면 고장/사건률이 시간이 지날수록 감소합니다.
Python에서의 Survival Analysis

k(또는 $\rho$) 해석

k=1, 사건률 일정

  • $k=1$이면 고장/사건률이 시간에 따라 일정합니다.
Python에서의 Survival Analysis

k(또는 $\rho$) 해석

k>1, 사건률 증가

  • $k>1$이면 고장/사건률이 시간이 지날수록 증가합니다.
Python에서의 Survival Analysis

Weibull 분포로 생존분석

  1. WeibullFitter 클래스 임포트
    from lifelines import WeibullFitter
    
  2. WeibullFitter 인스턴스 생성
    wb = WeibullFitter()
    
  3. .fit()으로 데이터에 적합
    wb.fit(durations, event_observed)
    
  4. .survival_function_, .lambda_, .rho_, .summary, .predict() 사용
Python에서의 Survival Analysis

Weibull 모형 예시

DataFrame 이름: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
1000 30 1
from lifelines import WeibullFitter
wb = WeibullFitter()
wb.fit(durations=mortgage_df["duration"],
       event_observed=mortgage_df["paid_off"])
Python에서의 Survival Analysis

Weibull 모형 예시

wb.survival_function_.plot()
plt.show()

예시 Weibull 생존곡선

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Python에서의 Survival Analysis

연습해 봅시다!

Python에서의 Survival Analysis

Preparing Video For Download...