Подгонка модели пропорциональных рисков Кокса

Анализ выживаемости в Python

Shae Wang

Senior Data Scientist

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

Функция риска $h(t)$: описывает вероятность наступления события в момент времени $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

  • Продолжительности: время жизни/продолжительность для каждого индивида.
  • События: наблюдалось ли событие (1 = да, 0 = нет, цензурировано).
    • Если не указано, модель предполагает, что наблюдения не цензурированы.
  • Ковариаты: непрерывные или категориальные переменные в формате 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...