Survival Analysis ด้วย Python
Shae Wang
Senior Data Scientist
สถิติแบบ non-parametric ที่ ประมาณค่าฟังก์ชันการรอดชีพ ของข้อมูล time-to-event
นิยาม:
ฟังก์ชันการรอดชีพ $S(t)$ ประมาณได้ด้วย: $$S(t)=\prod_{i:t_i\leq t}\bigg(1-\frac{d_i}{n_i}\bigg)$$
สมมติมีเหตุการณ์เกิดขึ้น 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 และทุกช่วงเวลาก่อนหน้า
from lifelines import KaplanMeierFitter
KaplanMeierFitter: คลาสจากไลบรารี lifelines
kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
ชื่อ DataFrame: mortgage_df
| id | duration | paid_off |
|---|---|---|
| 1 | 25 | 0 |
| 2 | 17 | 1 |
| 3 | 5 | 0 |
| ... | ... | ... |
| 100 | 30 | 1 |
ชื่อ 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>
ระยะเวลามัธยฐานของสินเชื่อบ้านที่ยังค้างชำระคือเท่าใด?
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
ความน่าจะเป็นที่สินเชื่อบ้านจะยังไม่ถูกชำระหมดภายในปีที่ 34 หลังเริ่มสัญญาคือเท่าใด?
mortgage_kmf.predict(34)
0.037998
.median_survival_time_ ไม่ได้Survival Analysis ด้วย Python