ワイブルモデルの当てはめ

Pythonで学ぶSurvival Analysis

Shae Wang

Senior Data Scientist

確率分布

確率分布

さまざまな結果の確率を表す数学関数。

正規分布

Pythonで学ぶSurvival Analysis

確率分布

確率分布

さまざまな結果の確率を表す数学関数。

一様分布

Pythonで学ぶSurvival Analysis

ワイブル分布の導入

ワイブル分布

連続型の確率分布で、時間-事象データのモデル化に適する(元は粒度分布のモデル化に適用)。

ワイブル確率密度関数

$$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で学ぶSurvival Analysis

ワイブル分布の導入

$k$

形状を決める

k の変化

$\lambda$

尺度を決める

λ の変化

Pythonで学ぶSurvival Analysis

データへのワイブル分布の当てはめ

ある企業は故障しやすい機械群を保守しています…

機械故障のヒストグラム

Pythonで学ぶSurvival Analysis

データへのワイブル分布の当てはめ

ある企業は故障しやすい機械群を保守しています…

機械故障とワイブル

Pythonで学ぶSurvival Analysis

ワイブル分布から生存関数へ

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

ワイブルから生存関数へ

$\rho$ は k と同じ

Pythonで学ぶSurvival Analysis

調整パラメータ: k と λ

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

  • ワイブル分布: 故障/事象率は時間のべきに比例。
Pythonで学ぶSurvival Analysis

k(または $\rho$)の解釈

k<1、事象率は減少

  • $k<1$ のとき、故障/事象率は時間とともに低下。
Pythonで学ぶSurvival Analysis

k(または $\rho$)の解釈

k=1、事象率は一定

  • $k=1$ のとき、故障/事象率は時間に対して一定。
Pythonで学ぶSurvival Analysis

k(または $\rho$)の解釈

k>1、事象率は増加

  • $k>1$ のとき、故障/事象率は時間とともに上昇。
Pythonで学ぶSurvival Analysis

ワイブル分布で生存分析

  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で学ぶSurvival Analysis

ワイブルモデルの例

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で学ぶSurvival Analysis

ワイブルモデルの例

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

例: ワイブルの生存曲線

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Pythonで学ぶSurvival Analysis

Passons à la pratique !

Pythonで学ぶSurvival Analysis

Preparing Video For Download...