Dopasowywanie modelu proporcjonalnych hazardów Coxa

Analiza przeżycia w Pythonie

Shae Wang

Senior Data Scientist

Funkcja hazardu i współczynnik hazardu

Funkcja hazardu $h(t)$: opisuje prawdopodobieństwo wystąpienia zdarzenia w danym momencie, przy założeniu przeżycia do tego momentu.

Współczynnik hazardu: chwilowe tempo występowania zdarzenia

$$h(t)=-\frac{d}{dt}logS(t)$$

Funkcja hazardu $h(t)$ i funkcja przeżycia $S(t)$ można wyprowadzić jedna z drugiej.

Analiza przeżycia w Pythonie

Założenie proporcjonalności hazardów

Założenie proporcjonalności hazardów: hazardy wszystkich jednostek są proporcjonalne względem siebie.

Dla jednostki $A$ i jednostki $B$: $$h_A(t)=ch_B(t)$$

  1. Istnieje bazowa funkcja hazardu, a pozostałe hazardy są określone przez czynniki skalujące.
  2. Względny wpływ zmiennej na przeżycie nie zmienia się w czasie (niezmienny w czasie).

Porównanie założenia proporcjonalności hazardów dla dwóch krzywych przeżycia

Analiza przeżycia w Pythonie

Model proporcjonalnych hazardów Coxa

Na podstawie założenia proporcjonalności hazardów: $$h(t|x)=b_0(t)exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$$

$b_0(t)$: bazowa funkcja hazardu na poziomie populacji, zmienna w czasie.

$exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$: liniowa zależność między kowariatami a logarytmem hazardu, niezmienna w czasie.

  • Model proporcjonalnych hazardów Coxa (Cox PH) to model regresji kowariatów względem czasu do zdarzenia.
Analiza przeżycia w Pythonie

Wymagania dotyczące danych dla modelu Cox PH

  • Czasy trwania: czas życia/trwania jednostek.
  • Zdarzenia: czy zdarzenie zostało zaobserwowane (1=Tak, 0=Nie, cenzurowane).
    • Jeśli nie podano, model zakłada brak cenzurowania.
  • Kowariaty: ciągłe lub zakodowane one-hot zmienne kategoryczne używane w regresji.
Analiza przeżycia w Pythonie

Dopasowywanie modelu Cox PH

  1. Importowanie i tworzenie instancji klasy CoxPHFitter
    from lifelines import CoxPHFitter
    coxph = CoxPHFitter()
    
  2. Wywołanie .fit() w celu dopasowania estymatora do danych
    coxph.fit(df, duration_col, event_col)
    
  3. Dostęp do właściwości: podsumowanie modelu, kowariaty, współczynniki, predykcja, wykresy itp.
    coxph.summary()
    coxph.predict()
    
Analiza przeżycia w Pythonie

Przykładowy model Cox PH

  • DataFrame: mortgage_df
  • Kowariaty:
    • house
    • principal
    • interest
    • property_tax
    • credit_score
  • Pozostałe kolumny: duration, paid_off
from lifelines import CoxPHFitter

coxph = CoxPHFitter() coxph.fit(df=mortgage_df, duration_col="duration", event_col="paid_off")
Analiza przeżycia w Pythonie

Model niestandardowy

Filtrowanie DataFrame:

new_df = mortgage_df.loc[:, 
          mortgage_df.columns!="house"]
coxph.fit(df=new_df,
          duration_col="duration",
          event_col="paid_off")

Użycie parametru formula:

coxph.fit(df=mortgage_df,
          duration_col="duration",
          event_col="paid_off",
          formula="principal + interest 
          + property_tax + credit_score")
  • Wygodniejsze i bardziej czytelne, ale nie skaluje się do dużej liczby kowariatów.
Analiza przeżycia w Pythonie

Interpretacja współczynników

print(coxph.summary)
<lifelines.CoxPHFitter: fitted with 1808 observations, 340 censored>
                        coef  exp(coef)  se(coef)      z       p
covariate house        -0.38       0.68      0.19. -1.98    0.05
          principal    -0.06       0.94      0.02  -2.61    0.01
          interest      0.31       1.37      0.31   1.02    0.31
          property_tax -0.15       0.86      0.21  -0.71    0.48
          credit_score -0.43       0.65      0.38  -1.14.   0.26
  • Współczynnik hazardu: $e^{coef}$
    • Wzrost interest o jedną jednostkę powyżej mediany -> hazard zmienia się o czynnik $e^{0.31}=1.37$, co oznacza wzrost o 37% względem hazardu bazowego.
Analiza przeżycia w Pythonie

Czas na ćwiczenia!

Analiza przeżycia w Pythonie

Preparing Video For Download...