Anpassa Weibull-modellen

Överlevnadsanalys i Python

Shae Wang

Senior Data Scientist

Sannolikhetsfördelningar

En sannolikhetsfördelning

En matematisk funktion som beskriver sannolikheten för olika utfall.

normalfördelning

Överlevnadsanalys i Python

Sannolikhetsfördelningar

En sannolikhetsfördelning

En matematisk funktion som beskriver sannolikheten för olika utfall.

likformig fördelning

Överlevnadsanalys i Python

Introduktion till Weibull-fördelningen

Weibull-fördelningen

En kontinuerlig sannolikhetsfördelning som modellerar tid-till-händelse-data väl (ursprungligen användes den för att modellera partikelstorlekar).

Weibull-fördelningens täthetsfunktion

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

Överlevnadsanalys i Python

Introduktion till Weibull-fördelningen

$k$

Bestämmer formen

varierande_k

$\lambda$

Bestämmer skalan

varierande_lambda

Överlevnadsanalys i Python

Anpassa Weibull-fördelningen till data

Ett företag underhåller en maskinpark som är benägen att haverera...

histogram över maskinfel

Överlevnadsanalys i Python

Anpassa Weibull-fördelningen till data

Ett företag underhåller en maskinpark som är benägen att haverera...

Weibull-kurva för maskinfel

Överlevnadsanalys i Python

Från Weibull-fördelning till överlevnadsfunktion

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

från Weibull-fördelning till överlevnadsfunktion

$\rho$ är samma som k

Överlevnadsanalys i Python

Parametrarna: k och lambda

k och $\lambda$
  • k (eller $\rho$): bestämmer formen
  • $\lambda$: bestämmer skalan (anger när 63,2 % av populationen har upplevt händelsen)

$$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-fördelningen: felfrekvensen/händelsefrekvensen är proportionell mot en potens av tid.
Överlevnadsanalys i Python

Tolka k (eller $\rho$)

k<1, händelsefrekvensen minskar

  • När $k<1$ minskar felfrekvensen/händelsefrekvensen över tid.
Överlevnadsanalys i Python

Tolka k (eller $\rho$)

k=1, händelsefrekvensen konstant

  • När $k=1$ är felfrekvensen/händelsefrekvensen konstant över tid.
Överlevnadsanalys i Python

Tolka k (eller $\rho$)

k>1, händelsefrekvensen ökar

  • När $k>1$ ökar felfrekvensen/händelsefrekvensen över tid.
Överlevnadsanalys i Python

Överlevnadsanalys med Weibull-fördelningen

  1. Importera klassen WeibullFitter
    from lifelines import WeibullFitter
    
  2. Skapa en instans av WeibullFitter
    wb = WeibullFitter()
    
  3. Anropa .fit() för att anpassa estimatorn till data
    wb.fit(durations, event_observed)
    
  4. Använd .survival_function_, .lambda_, .rho_, .summary, .predict()
Överlevnadsanalys i Python

Exempel på Weibull-modell

DataFrame-namn: 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"])
Överlevnadsanalys i Python

Exempel på Weibull-modell

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

exempel på Weibull-överlevnadskurva

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Överlevnadsanalys i Python

Nu kör vi en övning!

Överlevnadsanalys i Python

Preparing Video For Download...