Het Weibull-model fitten

Survivalanalyse in Python

Shae Wang

Senior Data Scientist

Kansverdelingen

Een kansverdeling

Een wiskundige functie die de kans van uitkomsten beschrijft.

normale verdeling

Survivalanalyse in Python

Kansverdelingen

Een kansverdeling

Een wiskundige functie die de kans van uitkomsten beschrijft.

uniforme verdeling

Survivalanalyse in Python

Introductie van de Weibull-verdeling

De Weibull-verdeling

Een continue kansverdeling die time-to-eventdata goed modelleert (oorspronkelijk voor deeltjesgrootte).

De dichtheidsfunctie van 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$$

Survivalanalyse in Python

Introductie van de Weibull-verdeling

$k$

Bepaalt de vorm

variërende k

$\lambda$

Bepaalt de schaal

variërende lambda

Survivalanalyse in Python

Weibull-verdeling op data fitten

Een bedrijf beheert een machinepark dat storingsgevoelig is...

histogram machine-uitval

Survivalanalyse in Python

Weibull-verdeling op data fitten

Een bedrijf beheert een machinepark dat storingsgevoelig is...

weibull fit op machine-uitval

Survivalanalyse in Python

Van Weibull-verdeling naar overlevingsfunctie

$$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}$$

van weibull naar overlevingsfunctie

$\rho$ is hetzelfde als k

Survivalanalyse in Python

De knoppen: k en lambda

k en $\lambda$
  • k (of $\rho$): bepaalt de vorm
  • $\lambda$: bepaalt de schaal (geeft aan wanneer 63,2% het event heeft meegemaakt)

$$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-verdeling: de uitval-/eventrate is evenredig met een macht van de tijd.
Survivalanalyse in Python

k (of $\rho$) interpreteren

k<1, eventrate daalt

  • Bij $k<1$ daalt de uitval-/eventrate in de tijd.
Survivalanalyse in Python

k (of $\rho$) interpreteren

k=1, eventrate constant

  • Bij $k=1$ is de uitval-/eventrate constant in de tijd.
Survivalanalyse in Python

k (of $\rho$) interpreteren

k>1, eventrate stijgt

  • Bij $k>1$ stijgt de uitval-/eventrate in de tijd.
Survivalanalyse in Python

Survivalanalyse met de Weibull-verdeling

  1. Importeer de klasse WeibullFitter
    from lifelines import WeibullFitter
    
  2. Instantier een WeibullFitter
    wb = WeibullFitter()
    
  3. Roep .fit() aan om de schatter te fitten
    wb.fit(durations, event_observed)
    
  4. Gebruik .survival_function_, .lambda_, .rho_, .summary, .predict()
Survivalanalyse in Python

Voorbeeld van een Weibull-model

DataFrame-naam: 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"])
Survivalanalyse in Python

Voorbeeld van een Weibull-model

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

voorbeeld weibull-overlevingscurve

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Survivalanalyse in Python

Laten we oefenen!

Survivalanalyse in Python

Preparing Video For Download...