Adattare il modello di Weibull

Analisi di sopravvivenza in Python

Shae Wang

Senior Data Scientist

Distribuzioni di probabilità

Una distribuzione di probabilità

Una funzione matematica che descrive la probabilità dei diversi esiti.

distribuzione_normale

Analisi di sopravvivenza in Python

Distribuzioni di probabilità

Una distribuzione di probabilità

Una funzione matematica che descrive la probabilità dei diversi esiti.

distribuzione_uniforme

Analisi di sopravvivenza in Python

Introduzione alla distribuzione di Weibull

La distribuzione di Weibull

Una distribuzione continua che modella molto bene i tempi all'evento (inizialmente usata per la distribuzione delle dimensioni delle particelle).

La funzione di densità di 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$$

Analisi di sopravvivenza in Python

Introduzione alla distribuzione di Weibull

$k$

Determina la forma

k_variabile

$\lambda$

Determina la scala

lambda_variabile

Analisi di sopravvivenza in Python

Adattare la distribuzione di Weibull ai dati

Un'azienda gestisce una flotta di macchine soggette a guasti...

istogramma_guasti_macchine

Analisi di sopravvivenza in Python

Adattare la distribuzione di Weibull ai dati

Un'azienda gestisce una flotta di macchine soggette a guasti...

weibull_guasti_macchine

Analisi di sopravvivenza in Python

Dalla Weibull alla funzione di sopravvivenza

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

$\rho$ è lo stesso di k

Analisi di sopravvivenza in Python

I parametri: k e lambda

k e $\lambda$
  • k (o $\rho$): determina la forma
  • $\lambda$: determina la scala (indica quando il 63,2% della popolazione ha avuto l'evento)

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

  • Distribuzione di Weibull: il tasso di guasto/evento è proporzionale a una potenza del tempo.
Analisi di sopravvivenza in Python

Interpretare k (o $\rho$)

k<1, il tasso diminuisce

  • Quando $k<1$, il tasso di guasto/evento diminuisce nel tempo.
Analisi di sopravvivenza in Python

Interpretare k (o $\rho$)

k=1, tasso costante

  • Quando $k=1$, il tasso di guasto/evento è costante nel tempo.
Analisi di sopravvivenza in Python

Interpretare k (o $\rho$)

k>1, il tasso aumenta

  • Quando $k>1$, il tasso di guasto/evento aumenta nel tempo.
Analisi di sopravvivenza in Python

Analisi di sopravvivenza con la Weibull

  1. Importa la classe WeibullFitter
    from lifelines import WeibullFitter
    
  2. Istanzia WeibullFitter
    wb = WeibullFitter()
    
  3. Chiama .fit() per adattare il modello ai dati
    wb.fit(durations, event_observed)
    
  4. Accedi a .survival_function_, .lambda_, .rho_, .summary, .predict()
Analisi di sopravvivenza in Python

Esempio di modello Weibull

Nome 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"])
Analisi di sopravvivenza in Python

Esempio di modello Weibull

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

curva di sopravvivenza Weibull esempio

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Analisi di sopravvivenza in Python

Passiamo alla pratica !

Analisi di sopravvivenza in Python

Preparing Video For Download...