การแสดงผลโมเดล Kaplan-Meier

Survival Analysis ด้วย Python

Shae Wang

Senior Data Scientist

วิธีสร้าง Kaplan-Meier survival curve

ข้อมูลตัวอย่างที่ $n=5$:

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

ขั้นตอนที่ 1: เรียงข้อมูลจากน้อยไปมาก ถ้าค่าเท่ากัน ให้ข้อมูล censored อยู่หลังข้อมูลที่ไม่ใช่ censored

ขั้นตอนที่ 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)$

Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

ขั้นตอนที่ 1: เรียงระยะเวลาจากน้อยไปมาก ถ้าค่าเท่ากัน ให้ข้อมูล censored อยู่หลังข้อมูลที่ไม่ใช่ censored

duration
2
5+
3
5
2+

ใช้เครื่องหมาย "+" แทนข้อมูล censored: 2, 5+, 3, 5, 2+

Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

ขั้นตอนที่ 1: เรียงระยะเวลาจากน้อยไปมาก ถ้าค่าเท่ากัน ให้ข้อมูล censored อยู่หลังข้อมูลที่ไม่ใช่ censored

$t_i$
2, 2+
3
5, 5+
Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

ขั้นตอนที่ 2: สำหรับแต่ละ $t_i$ คำนวณ $d_i$, $n_i$ และ $\big(1-\frac{d_i}{n_i}\big)$

$t_i$
2, 2+
3
5, 5+
Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

ขั้นตอนที่ 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
Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

ขั้นตอนที่ 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
Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

ขั้นตอนที่ 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$
Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

ขั้นตอนที่ 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
Survival Analysis ด้วย Python

วิธีสร้าง Kaplan-Meier survival curve

$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

กราฟ Kaplan-Meier จากตาราง

Survival Analysis ด้วย Python

การตีความ survival curve

กราฟ Kaplan-Meier จากตาราง

  • ความน่าจะเป็นของการรอดชีพ ณ แต่ละช่วงเวลาระหว่าง 0 ถึง 5

  • ความเข้าใจผิดที่พบบ่อย: ถ้ากราฟลงไปถึง 0 หมายความว่าไม่มีผู้รอดชีพเลย

  • กราฟจะลดลงถึง 0 เมื่อการสังเกตสุดท้ายไม่ใช่ข้อมูล censored (ทราบระยะเวลาเหตุการณ์ที่แท้จริง)
Survival Analysis ด้วย Python

การพล็อต Kaplan-Meier survival curve

from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.survival_function_.plot()
plt.show()
Survival Analysis ด้วย 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()
Survival Analysis ด้วย Python

ตัวอย่างปัญหาสินเชื่อบ้าน

plt.show()

การแสดงผล survival curve ของปัญหาสินเชื่อบ้าน

Survival Analysis ด้วย Python

Confidence interval ของ survival curve

mortgage_kmf.plot_survival_function()
plt.show()

การแสดงผล survival curve ของปัญหาสินเชื่อบ้านพร้อม confidence interval

Survival Analysis ด้วย Python

ทำไม confidence interval จึงมีประโยชน์?

  • วิธีวัดความไม่แน่นอนของค่าประมาณความน่าจะเป็นของการรอดชีพแต่ละจุด
  • confidence interval ที่กว้าง หมายความว่า ความแน่นอนต่ำ มักเกิดจากขนาดตัวอย่างที่เล็ก
  • confidence interval ที่แคบ หมายความว่า ความแน่นอนสูง มักเกิดจากขนาดตัวอย่างที่ใหญ่
Survival Analysis ด้วย Python

วิธีพล็อต Kaplan-Meier survival curve

พล็อต survival function แบบเส้นต่อเนื่อง

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

กราฟ survival function แบบเส้นต่อเนื่อง

พล็อต survival function แบบเส้นขั้นบันไดโดยไม่แสดง confidence interval

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

กราฟ survival function แบบเส้นขั้นบันได

Survival Analysis ด้วย Python

วิธีพล็อต Kaplan-Meier survival curve

พล็อต survival function แบบเส้นขั้นบันไดพร้อม confidence interval

kmf.plot()
plt.show()

กราฟ survival function แบบเส้นขั้นบันไดพร้อม confidence interval

อีกวิธีหนึ่ง...

kmf.plot_survival_function()
plt.show()
Survival Analysis ด้วย Python

มาฝึกกันเถอะ!

Survival Analysis ด้วย Python

Preparing Video For Download...