การกระจายแบบอื่นและการเลือกโมเดล

Survival Analysis ด้วย Python

Shae Wang

Senior Data Scientist

โมเดลใดเหมาะกับข้อมูลมากที่สุด?

เส้นโค้งการรอดชีพ 4 เส้นสำหรับข้อมูลเดียวกันโดยใช้โมเดลต่างกัน

Survival Analysis ด้วย Python

การเลือกโมเดลแบบพารามิเตอร์

  • การสร้างโมเดลแบบไม่ใช้พารามิเตอร์ (เช่น โมเดล Kaplan-Meier)
    • อธิบายข้อมูลได้แม่นยำเพราะไม่ขึ้นกับการกระจาย
    • ไม่ราบเรียบ/ต่อเนื่อง/หาอนุพันธ์ได้
  • การสร้างโมเดลแบบใช้พารามิเตอร์ (เช่น โมเดล Weibull)
    • โดยทั่วไปให้ข้อมูลมากกว่า
    • หากใช้โมเดลผิด จะนำไปสู่ข้อสรุปที่คลาดเคลื่อนอย่างมีนัยสำคัญ
Survival Analysis ด้วย Python

โมเดลการรอดชีพแบบพารามิเตอร์ที่พบบ่อย

  • โมเดล Weibull
    from lifelines import WeibullFitter
    
  • โมเดล Exponential
    from lifelines import ExponentialFitter
    
  • โมเดล Log Normal
    from lifelines import LogNormalFitter
    
  • โมเดล Log Logistic
    from lifelines import LogLogisticFitter
    
  • โมเดล Gamma
    from lifelines import GeneralizedGammaFitter
    
Survival Analysis ด้วย Python

เกณฑ์สารสนเทศ Akaike (AIC)

  • AIC: ตัวประมาณข้อผิดพลาดในการทำนายและคุณภาพสัมพัทธ์ของโมเดลทางสถิติสำหรับชุดข้อมูลที่กำหนด
  • ประมาณปริมาณข้อมูลที่โมเดลสูญเสียไป และลงโทษโมเดลที่มีพารามิเตอร์จำนวนมาก
    • ยิ่งสูญเสียข้อมูลน้อย คุณภาพของโมเดลยิ่งสูง
    • ยิ่งมีพารามิเตอร์น้อย (ซับซ้อนน้อยกว่า) คุณภาพของโมเดลยิ่งสูง
  • จากโมเดลผู้สมัครทั้งหมด โมเดลที่มีค่า AIC ต่ำที่สุดคือโมเดลที่ควรเลือกใช้
Survival Analysis ด้วย Python

การใช้ AIC เพื่อเลือกโมเดล

ขั้นที่ 1) ฟิตโมเดลแบบพารามิเตอร์ใน lifelines

ขั้นที่ 2) แสดงและเปรียบเทียบคุณสมบัติ AIC_ ของแต่ละโมเดล

ขั้นที่ 3) เลือกโมเดลที่มีค่า AIC ต่ำที่สุด

from lifelines import WeibullFitter, 
                      ExponentialFitter, 
                      LogNormalFitter
wb = WeibullFitter().fit(D, E)
exp = ExponentialFitter().fit(D, E)
log = LogNormalFitter().fit(D, E)
print(wb.AIC_, exp.AIC_, log.AIC_)
215.9091   216.1183   202.3498
Survival Analysis ด้วย Python

find_best_parametric_model()

  • find_best_parametric_model(): ฟังก์ชันในตัวของ lifelines สำหรับเปรียบเทียบ AIC ระหว่างโมเดลแบบพารามิเตอร์โดยอัตโนมัติ
  • วนซ้ำผ่านโมเดลแบบพารามิเตอร์ทุกโมเดลที่มีใน lifelines

วิธีใช้งาน

  • T: ระยะเวลา, E: การเซ็นเซอร์
    best_model, best_aic_ = find_best_parametric_model(event_times=T,
                                                       event_observed=E,
                                                       scoring_method="AIC")
    print(best_model)
    
<lifelines.WeibullFitter:"Weibull_estimate", 
fitted with 686 total observations, 387 right-censored observations>
Survival Analysis ด้วย Python

QQ plot

  • QQ plot: เปรียบเทียบการกระจายความน่าจะเป็นสองแบบโดยพล็อตควอนไทล์เทียบกัน
  • หากการกระจายทั้งสองคล้ายกัน จุดใน QQ plot จะอยู่บนเส้น y = x โดยประมาณ

ตัวอย่าง qq plot

Survival Analysis ด้วย Python

การใช้ QQ plot เพื่อเลือกโมเดล

ขั้นที่ 1) ฟิตโมเดลแบบพารามิเตอร์ใน lifelines

ขั้นที่ 2) พล็อต QQ plot ของแต่ละโมเดล

ขั้นที่ 3) เลือก QQ plot ที่ใกล้เคียง y = x มากที่สุด

from lifelines.plotting import qq_plot

for model in [WeibullFitter(), LogNormalFitter(), LogLogisticFitter(), ExponentialFitter()]: model.fit(T, E) qq_plot(model)
plt.show()
Survival Analysis ด้วย Python

การใช้ QQ plot เพื่อเลือกโมเดล

qq plot สำหรับเปรียบเทียบ

Survival Analysis ด้วย Python

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

Survival Analysis ด้วย Python

Preparing Video For Download...