Підгонка оцінювача Каплана—Майєра

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

Shae Wang

Senior Data Scientist

Що таке оцінювач Каплана—Майєра?

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

  • Також відомий як
    • product-limit оцінювач
    • K-M оцінювач
  • Непараметричний: будує криву виживання з наявних даних і не припускає розподіл у основі
Аналіз виживаності в 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

Чому це product-limit оцінювач?

Припустімо, події відбуваються у 3 моменти: 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 дорівнює добутку шансів вижити в момент 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...