การประยุกต์ใช้ survival analysis กับกลุ่มข้อมูล

Survival Analysis ด้วย Python

Shae Wang

Senior Data Scientist

ปัญหาการจำนอง

ชื่อ DataFrame: mortgage_df

id property type duration paid_off
1 house 25 0
2 apartment 17 1
3 apartment 5 0
... ... ... ...
100 house 30 1

ประเภทอสังหาริมทรัพย์: ประเภทของบ้านที่ได้รับการจำนอง (house หรือ apartment)

มีความแตกต่างในระยะเวลาชำระหนี้ระหว่างการจำนองบ้านและอพาร์ตเมนต์หรือไม่?
Survival Analysis ด้วย Python

การเปรียบเทียบการกระจายการรอดชีพระหว่างกลุ่ม

บ่อยครั้งที่เราต้องการประเมินว่ามีความแตกต่างในการรอดชีพ (หรือความน่าจะเป็นของเหตุการณ์/การรอดชีพ) ระหว่างกลุ่มต่าง ๆ หรือไม่

  • คุณลักษณะของกลุ่มตัวอย่าง
    • เช่น การจำนองประเภทต่าง ๆ หรือยางรถยนต์ต่างยี่ห้อ
  • กลุ่มทดลองที่แตกต่างกัน
    • เช่น กลุ่มที่ได้รับการรักษากับกลุ่มควบคุม
  • ค่าที่แตกต่างกันของคุณลักษณะเดียวกัน
    • เช่น ครัวเรือนรายได้สูงกับรายได้ต่ำ
Survival Analysis ด้วย Python

ประเภทของการเปรียบเทียบกลุ่มการรอดชีพ

1. ค่าประมาณหรือสถิติการรอดชีพแตกต่างกันหรือไม่?
  • เปรียบเทียบความน่าจะเป็นของการรอดชีพของสองกลุ่มที่เวลาใดเวลาหนึ่ง
  • เปรียบเทียบสัดส่วนรวมของกลุ่มตัวอย่างที่รอดชีพระหว่างสองกลุ่ม
Survival Analysis ด้วย Python

ประเภทของการเปรียบเทียบกลุ่มการรอดชีพ

2. การกระจายพื้นฐานแตกต่างกันหรือไม่?
  • ต้องใช้การทดสอบสมมติฐานอย่างเป็นทางการ
Survival Analysis ด้วย Python

ประเภทของการเปรียบเทียบกลุ่มการรอดชีพ

3. คุณลักษณะส่งผลต่อการรอดชีพมากน้อยเพียงใด?
  • ต้องใช้กรอบโมเดลเชิงการถดถอย
Survival Analysis ด้วย Python

การแสดงภาพความแตกต่างระหว่างกลุ่ม

ฟิตฟังก์ชันการรอดชีพ Kaplan-Meier ให้กับแต่ละกลุ่ม แล้วแสดงเส้นโค้งการรอดชีพแบบเคียงกัน

ข้อดี:

  • ใช้งานและตีความได้ง่าย
  • เป็น non-parametric จึงยืดหยุ่นกับการกระจายการรอดชีพหลากหลายรูปแบบ
  • เป็นเครื่องมือแสดงผลที่ดีสำหรับการสาธิตความแตกต่างในฟังก์ชันการรอดชีพ
Survival Analysis ด้วย Python

การระบุกลุ่ม

ชื่อ DataFrame: mortgage_df

id property type duration paid_off
1 house 25 0
2 apartment 17 1
3 apartment 5 0
... ... ... ...
100 house 30 1

สร้าง Boolean mask สำหรับแต่ละกลุ่ม

house = (mortgage_df["property_type"]=="house")
apt = (mortgage_df["property_type"]=="apartment")

หากมีเพียง 2 กลุ่ม ใช้แค่ 1 mask ก็เพียงพอ อีกกลุ่มสามารถอ้างอิงได้โดยใช้การนิเสธ

Survival Analysis ด้วย Python

การฟิตและพล็อตเส้นโค้งการรอดชีพ

สร้าง figure และสร้างอินสแตนซ์ของคลาส KaplanMeierFitter

ax = plt.subplot(111)
mortgage_kmf = KaplanMeierFitter()

ฟิต mortgage_kmf กับกลุ่ม house แล้วพล็อตบน figure ax

mortgage_kmf.fit(duration=mortgage_df[house]["duration"], 
                 event_observed=mortgage_df[house]["paid_off"],
                 label="Houses")
mortgage_kmf.plot_survival_function(ax=ax)
Survival Analysis ด้วย Python

การฟิตและพล็อตเส้นโค้งการรอดชีพ

ฟิต mortgage_kmf กับกลุ่ม apartment แล้วพล็อตบน figure ax

mortgage_kmf.fit(duration=mortgage_df[apt]["duration"], 
                 event_observed=mortgage_df[apt]["paid_off"],
                 label="Apartments")
mortgage_kmf.plot_survival_function(ax=ax)
Survival Analysis ด้วย Python

การแสดงภาพแบบเคียงกัน

plt.show()

เส้นโค้งการรอดชีพ Kaplan-Meier ของ apartment และ house

Survival Analysis ด้วย Python

การตีความเส้นโค้งการรอดชีพของกลุ่ม

เส้นโค้งการรอดชีพ Kaplan-Meier ของ apartment และ house

  • โดยเฉลี่ยแล้ว การจำนอง apartment ดูเหมือนจะชำระหนี้ได้เร็วกว่าการจำนองบ้าน
  • ที่ระยะเวลาใด ๆ สัดส่วนของผู้ใช้ที่ชำระหนี้ apartment สูงกว่าการจำนองบ้าน

หมายเหตุ: หากช่วงความเชื่อมั่นทับซ้อนกันบางจุด โอกาสที่เส้นโค้งทั้งสองจะแตกต่างกันจริงก็จะน้อยลง

Survival Analysis ด้วย Python

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

Survival Analysis ด้วย Python

Preparing Video For Download...