Підгонка моделі пропорційних ризиків Кокса

Аналіз виживаності в Python

Shae Wang

Senior Data Scientist

Функція ризику та інтенсивність ризику

Функція ризику $h(t)$: описує ймовірність настання події в момент часу за умови дожиття до цього часу.

Інтенсивність ризику: миттєва швидкість настання події

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

Функція ризику $h(t)$ і функція виживання $S(t)$ виводяться одна з одної.

Аналіз виживаності в Python

Припущення пропорційних ризиків

Припущення пропорційних ризиків: ризики всіх індивідів пропорційні між собою.

Для індивіда $A$ та індивіда $B$: $$h_A(t)=ch_B(t)$$

  1. Є базова функція ризику, інші ризики задаються масштабувальними коефіцієнтами.
  2. Відносний вплив на виживання, пов'язаний із змінною, не змінюється з часом (сталий у часі).

Порівняння припущення пропорційних ризиків для двох кривих виживання

Аналіз виживаності в Python

Модель пропорційних ризиків Кокса

За припущенням пропорційних ризиків: $$h(t|x)=b_0(t)exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$$

$b_0(t)$: базова функція ризику на рівні популяції, що змінюється з часом.

$exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$: лінійний зв'язок між коваріатами та логарифмом ризику, НЕ змінюється з часом.

  • Модель пропорційних ризиків Кокса (Cox PH) — це регресійна модель, що ставить у залежність коваріати від часу до події/тривалості.
Аналіз виживаності в Python

Вимоги до даних для моделі Cox PH

  • Durations: тривалість життя/період для індивідів.
  • Events: чи спостережено подію (1=Так, 0=Ні, цензуровано).
    • Якщо не задано, модель вважає, що цензурування відсутнє.
  • Covariates: неперервні або one-hot закодовані категоріальні змінні для регресії.
Аналіз виживаності в Python

Підгонка моделі Cox PH

  1. Імпортуйте та створіть екземпляр класу CoxPHFitter
    from lifelines import CoxPHFitter
    coxph = CoxPHFitter()
    
  2. Викличте .fit(), щоб підгіняти оцінювач до даних
    coxph.fit(df, duration_col, event_col)
    
  3. Перегляньте інші властивості: зведення моделі, коваріати, коефіцієнти, прогноз, графік тощо.
    coxph.summary()
    coxph.predict()
    
Аналіз виживаності в Python

Приклад моделі Cox PH

  • DataFrame: mortgage_df
  • Коваріати:
    • house
    • principal
    • interest
    • property_tax
    • credit_score
  • Інші колонки: duration, paid_off
from lifelines import CoxPHFitter

coxph = CoxPHFitter() coxph.fit(df=mortgage_df, duration_col="duration", event_col="paid_off")
Аналіз виживаності в Python

Користувацька модель

Відфільтруйте DataFrame:

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

Використайте параметр formula:

coxph.fit(df=mortgage_df,
          duration_col="duration",
          event_col="paid_off",
          formula="principal + interest 
          + property_tax + credit_score")
  • Зручніше й наочніше, але погано масштабується на велику кількість коваріат.
Аналіз виживаності в Python

Інтерпретація коефіцієнтів

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
  • Відношення ризиків: $e^{coef}$
    • Збільшення interest на одну одиницю від медіанного значення -> ризики змінюються у $e^{0.31}=1.37$ раза, тобто зростають на 37% відносно базових.
Аналіз виживаності в Python

Давайте потренуємось!

Аналіз виживаності в Python

Preparing Video For Download...