拟合 Weibull 模型

Python 中的生存分析

Shae Wang

Senior Data Scientist

概率分布

概率分布

描述不同事件结果概率的数学函数。

正态分布

Python 中的生存分析

概率分布

概率分布

描述不同事件结果概率的数学函数。

均匀分布

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$$

Python 中的生存分析

认识 Weibull 分布

$k$

决定形状

k 变化

$\lambda$

决定尺度

lambda 变化

Python 中的生存分析

将 Weibull 分布拟合到数据

一家公司维护一批易发生故障的机器…

机器故障直方图

Python 中的生存分析

将 Weibull 分布拟合到数据

一家公司维护一批易发生故障的机器…

机器故障 Weibull 拟合

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 相同

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 分布:失效率/事件率与时间的幂成正比。
Python 中的生存分析

解读 k(或 $\rho$)

k<1,事件率下降

  • 当 $k<1$ 时,失效率/事件率随时间下降。
Python 中的生存分析

解读 k(或 $\rho$)

k=1,事件率恒定

  • 当 $k=1$ 时,失效率/事件率随时间恒定。
Python 中的生存分析

解读 k(或 $\rho$)

k>1,事件率上升

  • 当 $k>1$ 时,失效率/事件率随时间上升。
Python 中的生存分析

用 Weibull 分布做生存分析

  1. 导入 WeibullFitter
    from lifelines import WeibullFitter
    
  2. 实例化 WeibullFitter
    wb = WeibullFitter()
    
  3. 调用 .fit() 拟合数据
    wb.fit(durations, event_observed)
    
  4. 访问 .survival_function_.lambda_.rho_.summary.predict()
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"])
Python 中的生存分析

Weibull 模型示例

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

示例 Weibull 生存曲线

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Python 中的生存分析

Passons à la pratique !

Python 中的生存分析

Preparing Video For Download...