Wizualizacja modelu Kaplana-Meiera

Analiza przeżycia w Pythonie

Shae Wang

Senior Data Scientist

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Dane testowe z $n=5$:

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

Krok 1: Posortować dane rosnąco. Przy remisach dane cenzurowane umieszcza się po niecenzurowanych.

Krok 2: Dla każdego $t_i$ obliczyć $d_i$, $n_i$ oraz $\big(1-\frac{d_i}{n_i}\big)$

Krok 3: Dla każdego $t_i$ pomnożyć $\big(1-\frac{d_i}{n_i}\big)$ przez $\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)$

Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Krok 1: Posortować czasy trwania rosnąco. Przy remisach dane cenzurowane umieszcza się po niecenzurowanych.

duration
2
5+
3
5
2+

Znak "+" oznacza dane cenzurowane: 2, 5+, 3, 5, 2+

Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Krok 1: Posortować czasy trwania rosnąco. Przy remisach dane cenzurowane umieszcza się po niecenzurowanych.

$t_i$
2, 2+
3
5, 5+
Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Krok 2: Dla każdego $t_i$ obliczyć $d_i$, $n_i$ oraz $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Krok 2: Dla każdego $t_i$ obliczyć $d_i$, $n_i$ oraz $\big(1-\frac{d_i}{n_i}\big)$

$t_i$ $d_i$
2, 2+ 1
3 1
5, 5+ 1
Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Krok 2: Dla każdego $t_i$ obliczyć $d_i$, $n_i$ oraz $\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
Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Krok 2: Dla każdego $t_i$ obliczyć $d_i$, $n_i$ oraz $\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$
Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

Krok 3: Dla każdego $t_i$ pomnożyć $\big(1-\frac{d_i}{n_i}\big)$ przez $\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
Analiza przeżycia w Pythonie

Jak skonstruować krzywą przeżycia Kaplana-Meiera?

$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

Krzywa Kaplana-Meiera na podstawie tabeli.

Analiza przeżycia w Pythonie

Interpretacja krzywej przeżycia

Krzywa Kaplana-Meiera na podstawie tabeli.

  • Prawdopodobieństwa przeżycia w każdym momencie od 0 do 5.

  • Częste nieporozumienie: jeśli krzywa spada do 0, żaden podmiot nie przeżył.

  • Krzywa spadnie do zera, gdy ostatnia obserwacja nie jest cenzurowana (znany jest rzeczywisty czas zdarzenia).
Analiza przeżycia w Pythonie

Wykres krzywej przeżycia Kaplana-Meiera

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.survival_function_.plot()
plt.show()
Analiza przeżycia w Pythonie

Przykład: problem kredytu hipotecznego

Nazwa ramki danych: 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()
Analiza przeżycia w Pythonie

Przykład: problem kredytu hipotecznego

plt.show()

Wizualizacja krzywej przeżycia dla problemu kredytu hipotecznego.

Analiza przeżycia w Pythonie

Przedział ufności krzywej przeżycia

mortgage_kmf.plot_survival_function()
plt.show()

Wizualizacja krzywej przeżycia z przedziałem ufności dla problemu kredytu hipotecznego.

Analiza przeżycia w Pythonie

Dlaczego przedział ufności jest przydatny?

  • Miara niepewności każdego oszacowania punktowego prawdopodobieństwa przeżycia
  • Szeroki przedział ufności oznacza mniejszą pewność, często wynikającą z małej próby
  • Wąski przedział ufności oznacza większą pewność, często wynikającą z dużej próby
Analiza przeżycia w Pythonie

Sposoby wykreślania krzywej przeżycia Kaplana-Meiera

Wykres oszacowań funkcji przeżycia jako ciągłej linii.

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

Wykres funkcji przeżycia jako ciągła linia.

Wykres funkcji przeżycia jako linia schodkowa bez przedziału ufności.

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

Wykres funkcji przeżycia jako linia schodkowa.

Analiza przeżycia w Pythonie

Sposoby wykreślania krzywej przeżycia Kaplana-Meiera

Wykres funkcji przeżycia jako linia schodkowa z przedziałem ufności.

kmf.plot()
plt.show()

Wykres funkcji przeżycia jako linia schodkowa z przedziałem ufności.

Inny sposób...

kmf.plot_survival_function()
plt.show()
Analiza przeżycia w Pythonie

Czas na ćwiczenia!

Analiza przeżycia w Pythonie

Preparing Video For Download...