Подгонка оценщика Каплана–Мейера

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

Shae Wang

Senior Data Scientist

Что такое оценщик Каплана–Мейера?

Непараметрическая статистика, которая оценивает функцию выживаемости для данных о времени до события.

  • Другие названия:
    • оценщик предельного произведения
    • оценщик К-М
  • Непараметрический: строит кривую выживаемости по собранным данным без предположений о распределении
Анализ выживаемости в Python

Математическая интуиция

Обозначения:

  • $t_i$: момент времени
  • $d_i$: число событий, произошедших в момент $t_i$
  • $n_i$: число субъектов, доживших до момента $t_i$

 

Функция выживаемости $S(t)$ оценивается как: $$S(t)=\prod_{i:t_i\leq t}\bigg(1-\frac{d_i}{n_i}\bigg)$$

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

Почему его называют оценщиком предельного произведения?

Предположим, события произошли в моменты: 1, 2, 3

Вероятность выживания при $t=2$: $$S(t=2)=\bigg(1-\frac{d_1}{n_1}\bigg)*\bigg(1-\frac{d_2}{n_2}\bigg)$$

Вероятность выживания при $t=3$: $$S(t=3)=S(t=2)*\bigg(1-\frac{d_3}{n_3}\bigg)$$

Вероятность выживания в момент t равна произведению вероятностей выживания в этот момент и во все предшествующие.

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

Ключевые допущения

  • Однозначность событий: интересующее событие происходит в чётко зафиксированный момент времени.
  • Сопоставимость вероятностей выживания: вероятность выживания субъекта не зависит от момента его включения в исследование.
  • Неинформативное цензурирование: цензурированные наблюдения имеют те же перспективы выживания, что и наблюдаемые субъекты.
Анализ выживаемости в Python

Оценщик Каплана–Мейера в lifelines

from lifelines import KaplanMeierFitter

KaplanMeierFitter: класс библиотеки lifelines

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
Анализ выживаемости в Python

Пример: задача об ипотеке

Название DataFrame: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
Анализ выживаемости в Python

Пример: задача об ипотеке

Название DataFrame: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
from lifelines import KaplanMeierFitter
mortgage_kmf = KaplanMeierFitter()
mortgage_kmf.fit(duration=mortgage_df["duration"], 
        event_observed=mortgage_df["paid_off"])
<lifelines.KaplanMeierFitter:"KM_estimate", 
fitted with 100 total observations, 
18 right-censored observations>
Анализ выживаемости в Python

Применение оценщика Каплана–Мейера

Какова медианная продолжительность непогашенной ипотеки?

print(mortgage_kmf.median_survival_time_)
4.0

Какова вероятность того, что ипотека остаётся непогашенной в каждый год после выдачи?

print(mortgage_kmf.survival_function_)
          KM_estimate
timeline             
0.0          1.000000
1.0          0.983267
2.0          0.950933
3.0          0.892328
Анализ выживаемости в Python

Применение оценщика Каплана–Мейера

Какова вероятность того, что ипотека не будет погашена к 34-му году после выдачи?

mortgage_kmf.predict(34)
0.037998
Анализ выживаемости в Python

Преимущества и ограничения

Преимущества
  • Интуитивная интерпретация вероятностей выживания.
  • Применим к любым данным о времени до события.
  • Как правило, первая модель для анализа таких данных.
Ограничения
  • Кривая выживаемости не является гладкой.
  • Если 50% и более данных цензурированы, .median_survival_time_ не вычисляется.
  • Неэффективен для анализа влияния ковариат на функцию выживаемости.
Анализ выживаемости в Python

Давайте потренируемся!

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

Preparing Video For Download...