การ Fit โมเดล Weibull

Survival Analysis ด้วย Python

Shae Wang

Senior Data Scientist

การแจกแจงความน่าจะเป็น

การแจกแจงความน่าจะเป็น

ฟังก์ชันทางคณิตศาสตร์ที่อธิบายความน่าจะเป็นของผลลัพธ์ต่าง ๆ

การแจกแจงปกติ

Survival Analysis ด้วย Python

การแจกแจงความน่าจะเป็น

การแจกแจงความน่าจะเป็น

ฟังก์ชันทางคณิตศาสตร์ที่อธิบายความน่าจะเป็นของผลลัพธ์ต่าง ๆ

การแจกแจงแบบสม่ำเสมอ

Survival Analysis ด้วย Python

แนะนำการแจกแจง Weibull

การแจกแจง Weibull

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

ฟังก์ชันความหนาแน่นความน่าจะเป็นของ Weibull

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k}$$ $$x\geq0,k>0,\lambda>0$$

Survival Analysis ด้วย Python

แนะนำการแจกแจง Weibull

$k$

กำหนดรูปร่างของการแจกแจง

การเปลี่ยนแปลง k

$\lambda$

กำหนดสเกลของการแจกแจง

การเปลี่ยนแปลง lambda

Survival Analysis ด้วย Python

การ Fit การแจกแจง Weibull กับข้อมูล

บริษัทแห่งหนึ่งดูแลเครื่องจักรที่มีแนวโน้มจะเกิดความเสียหาย...

ฮิสโตแกรมความเสียหายของเครื่องจักร

Survival Analysis ด้วย Python

การ Fit การแจกแจง Weibull กับข้อมูล

บริษัทแห่งหนึ่งดูแลเครื่องจักรที่มีแนวโน้มจะเกิดความเสียหาย...

การ Fit Weibull กับข้อมูลความเสียหายของเครื่องจักร

Survival Analysis ด้วย Python

จากการแจกแจง Weibull สู่ฟังก์ชันการอยู่รอด

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k} \quad\rightarrow\quad\qquad\qquad S(t)=e^{-(t/\lambda)^\rho}$$

จาก Weibull ไปสู่ฟังก์ชันการอยู่รอด

$\rho$ มีค่าเดียวกับ k

Survival Analysis ด้วย Python

พารามิเตอร์: k และ lambda

k และ $\lambda$
  • k (หรือ $\rho$): กำหนดรูปร่างของการแจกแจง
  • $\lambda$: กำหนดสเกล (บ่งบอกจุดที่ 63.2% ของประชากรผ่านเหตุการณ์แล้ว)

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k} \quad\rightarrow\quad f(x;\lambda,k=3)=\frac{3}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^2e^{-(x/\lambda)^3}$$

  • การแจกแจง Weibull: อัตราความเสียหาย/เหตุการณ์แปรผันตามกำลังของเวลา
Survival Analysis ด้วย Python

การตีความค่า k (หรือ $\rho$)

k<1 อัตราเหตุการณ์ลดลง

  • เมื่อ $k<1$ อัตราความเสียหาย/เหตุการณ์จะลดลงตามเวลา
Survival Analysis ด้วย Python

การตีความค่า k (หรือ $\rho$)

k=1 อัตราเหตุการณ์คงที่

  • เมื่อ $k=1$ อัตราความเสียหาย/เหตุการณ์จะคงที่ตลอดเวลา
Survival Analysis ด้วย Python

การตีความค่า k (หรือ $\rho$)

k>1 อัตราเหตุการณ์เพิ่มขึ้น

  • เมื่อ $k>1$ อัตราความเสียหาย/เหตุการณ์จะเพิ่มขึ้นตามเวลา
Survival Analysis ด้วย Python

การวิเคราะห์การอยู่รอดด้วยการแจกแจง Weibull

  1. นำเข้าคลาส WeibullFitter
    from lifelines import WeibullFitter
    
  2. สร้างอินสแตนซ์ของคลาส WeibullFitter
    wb = WeibullFitter()
    
  3. เรียก .fit() เพื่อ fit ตัวประมาณกับข้อมูล
    wb.fit(durations, event_observed)
    
  4. เข้าถึง .survival_function_, .lambda_, .rho_, .summary, .predict()
Survival Analysis ด้วย Python

ตัวอย่างโมเดล Weibull

ชื่อ DataFrame: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
1000 30 1
from lifelines import WeibullFitter
wb = WeibullFitter()
wb.fit(durations=mortgage_df["duration"],
       event_observed=mortgage_df["paid_off"])
Survival Analysis ด้วย Python

ตัวอย่างโมเดล Weibull

wb.survival_function_.plot()
plt.show()

ตัวอย่างเส้นโค้งการอยู่รอดแบบ Weibull

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Survival Analysis ด้วย Python

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

Survival Analysis ด้วย Python

Preparing Video For Download...