Візуалізація вашої моделі Каплана—Маєра

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

Shae Wang

Senior Data Scientist

Як побудувати криву виживаності Каплана—Маєра?

Ігрові дані з $n=5$:

duration observed
2 1
5 0
3 1
5 1
2 0

Крок 1: Розташуйте дані за зростанням. За рівності значень цензуровані йдуть після нецензурованих.

Крок 2: Для кожного $t_i$ обчисліть $d_i$, $n_i$ та $\big(1-\frac{d_i}{n_i}\big)$

Крок 3: Для кожного $t_i$ перемножте $\big(1-\frac{d_i}{n_i}\big)$ з $\big(1-\frac{d_{i-1}}{n_{i-1}}\big)$, $\big(1-\frac{d_{i-2}}{n_{i-2}}\big)$, … , $\big(1-\frac{d_0}{n_0}\big)$

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

Як побудувати криву виживаності Каплана—Маєра?

Крок 1: Розташуйте тривалості за зростанням. За рівності значень цензуровані йдуть після нецензурованих.

duration
2
5+
3
5
2+

Використовуйте знак «+» для цензурування: 2, 5+, 3, 5, 2+

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

Як побудувати криву виживаності Каплана—Маєра?

Крок 1: Розташуйте тривалості за зростанням. За рівності значень цензуровані йдуть після нецензурованих.

$t_i$
2, 2+
3
5, 5+
Аналіз виживаності в Python

Як побудувати криву виживаності Каплана—Маєра?

Крок 2: Для кожного $t_i$ обчисліть $d_i$, $n_i$ та $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Аналіз виживаності в Python

Як побудувати криву виживаності Каплана—Маєра?

Крок 2: Для кожного $t_i$ обчисліть $d_i$, $n_i$ та $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$
2, 2+ 1
3 1
5, 5+ 1
Аналіз виживаності в Python

Як побудувати криву виживаності Каплана—Маєра?

Крок 2: Для кожного $t_i$ обчисліть $d_i$, $n_i$ та $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$ $n_i$
2, 2+ 1 5
3 1 3
5, 5+ 1 2
Аналіз виживаності в Python

Як побудувати криву виживаності Каплана—Маєра?

Крок 2: Для кожного $t_i$ обчисліть $d_i$, $n_i$ та $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$ $n_i$ $\big(1-\frac{d_i}{n_i}\big)$
2, 2+ 1 5 $4/5$
3 1 3 $2/3$
5, 5+ 1 2 $1/2$
Аналіз виживаності в Python

Як побудувати криву виживаності Каплана—Маєра?

Крок 3: Для кожного $t_i$ перемножте $\big(1-\frac{d_i}{n_i}\big)$ з $\big(1-\frac{d_{i-1}}{n_{i-1}}\big)$, $\big(1-\frac{d_{i-2}}{n_{i-2}}\big)$, … , $\big(1-\frac{d_0}{n_0}\big)$

$t_i$ $d_i$ $n_i$ $\big(1-\frac{d_i}{n_i}\big)$ $S(t_i)$
2, 2+ 1 5 4/5 4/5 = 0.8
3 1 3 2/3 4/5 $\cdot$ 2/3 = 0.53
5, 5+ 1 2 1/2 4/5 $\cdot$ 2/3 $\cdot$ 1/2 = 0.27
Аналіз виживаності в Python

Як побудувати криву виживаності Каплана—Маєра?

$t_i$ $d_i$ $n_i$ $\big(1-\frac{d_i}{n_i}\big)$ $S(t_i)$
2, 2+ 1 5 $4/5$ 0.8
3 1 3 $2/3$ 0.53
5, 5+ 1 2 $1/2$ 0.27

Крива Каплана—Маєра з таблиці.

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

Інтерпретація кривої виживаності

Крива Каплана—Маєра з таблиці.

  • Ймовірності виживання у кожний момент між 0 і 5.

  • Поширена хиба: якщо крива доходить до 0, ніхто не вижив.

  • Вона впаде до нуля, якщо останнє спостереження не цензуроване (істинна тривалість відома).
Аналіз виживаності в Python

Побудова кривої виживаності Каплана—Маєра

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.survival_function_.plot()
plt.show()
Аналіз виживаності в Python

Приклад із іпотекою

Назва DataFrame: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
from lifelines import KaplanMeierFitter
from matplotlib import pyplot as plt
mortgage_kmf = KaplanMeierFitter()
mortgage_kmf.fit(duration=mortgage_df["duration"], 
        event_observed=mortgage_df["paid_off"])
mortgage_kmf.survival_function_.plot()
Аналіз виживаності в Python

Приклад із іпотекою

plt.show()

Візуалізація кривої виживаності для задачі з іпотекою.

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

Довірчий інтервал кривої виживаності

mortgage_kmf.plot_survival_function()
plt.show()

Візуалізація кривої виживаності для задачі з іпотекою з довірчим інтервалом.

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

Навіщо потрібен довірчий інтервал?

  • Спосіб кількісно оцінити невизначеність кожної точкової оцінки ймовірності виживання
  • Широкий довірчий інтервал означає менше впевненості, часто через малу вибірку
  • Вузький довірчий інтервал означає більше впевненості, часто через велику вибірку
Аналіз виживаності в Python

Як по-різному побудувати криву виживаності Каплана—Маєра

Побудуйте точкові оцінки функції виживання як неперервну лінію.

kmf.survival_function_.plot()
plt.show()

Графік функції виживання як неперервна лінія.

Побудуйте функцію виживання як східчасту лінію без довірчого інтервалу.

kmf.plot(ci_show=False)
plt.show()

Графік функції виживання як східчаста лінія.

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

Як по-різному побудувати криву виживаності Каплана—Маєра

Побудуйте функцію виживання як східчасту лінію з довірчим інтервалом.

kmf.plot()
plt.show()

Графік функції виживання як східчаста лінія з довірчим інтервалом.

Інший спосіб…

kmf.plot_survival_function()
plt.show()
Аналіз виживаності в Python

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

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

Preparing Video For Download...