カプラン–マイヤー推定量の当てはめ

Pythonで学ぶSurvival Analysis

Shae Wang

Senior Data Scientist

カプラン–マイヤー推定量とは

イベント発生までの時間データの生存関数を推定するノンパラメトリック統計量。

  • 別名
    • 積限制限推定量(product-limit estimator)
    • K–M 推定量
  • ノンパラメトリック: 観測データから生存曲線を構築し、分布仮定を置かない
Pythonで学ぶSurvival Analysis

数理的な直観

定義:

  • $t_i$: ある時点の継続時間
  • $d_i$: 時点 $t_i$ に発生したイベント数
  • $n_i$: 時点 $t_i$ まで生存が確認された個体数

 

生存関数 $S(t)$ の推定: $$S(t)=\prod_{i:t_i\leq t}\bigg(1-\frac{d_i}{n_i}\bigg)$$

Pythonで学ぶSurvival Analysis

積限制限推定量と呼ぶ理由

イベントが 1, 2, 3 の3時点で発生するとする。

$t=2$ の生存率: $$S(t=2)=\bigg(1-\frac{d_1}{n_1}\bigg)*\bigg(1-\frac{d_2}{n_2}\bigg)$$

$t=3$ の生存率: $$S(t=3)=S(t=2)*\bigg(1-\frac{d_3}{n_3}\bigg)$$

時点 t の生存率は、t およびそれ以前各時点の生存確率の積に等しい。

Pythonで学ぶSurvival Analysis

留意すべき仮定

  • 明確なイベント: 関心のイベントが明確な時点で発生する。
  • 生存確率の比較可能性: 参加時期に依存せず比較できる。
  • 非情報的検閲: 検閲例は追跡継続例と同じ生存見込みを持つ。
Pythonで学ぶSurvival Analysis

lifelines でのカプラン–マイヤー推定

from lifelines import KaplanMeierFitter

KaplanMeierFitter: lifelines ライブラリのクラス

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
Pythonで学ぶSurvival Analysis

住宅ローンの例

DataFrame 名: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
Pythonで学ぶSurvival Analysis

住宅ローンの例

DataFrame 名: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
100 30 1
from lifelines import KaplanMeierFitter
mortgage_kmf = KaplanMeierFitter()
mortgage_kmf.fit(duration=mortgage_df["duration"], 
        event_observed=mortgage_df["paid_off"])
<lifelines.KaplanMeierFitter:"KM_estimate", 
fitted with 100 total observations, 
18 right-censored observations>
Pythonで学ぶSurvival Analysis

カプラン–マイヤー推定量の活用

未返済ローンの中央値は?

print(mortgage_kmf.median_survival_time_)
4.0

開始後、各年にローンが未返済である確率は?

print(mortgage_kmf.survival_function_)
          KM_estimate
timeline             
0.0          1.000000
1.0          0.983267
2.0          0.950933
3.0          0.892328
Pythonで学ぶSurvival Analysis

カプラン–マイヤー推定量の活用

開始後34年時点で未返済である確率は?

mortgage_kmf.predict(34)
0.037998
Pythonで学ぶSurvival Analysis

利点と制約

利点
  • 生存確率の解釈が直感的。
  • 任意の生存時間データに柔軟に適用可能。
  • 生存時間解析で最初に試すモデルとして有用。
制約
  • 生存曲線が滑らかでない。
  • 検閲が50%以上だと .median_survival_time_ は計算不可。
  • 共変量の影響解析には不向き。
Pythonで学ぶSurvival Analysis

Ayo berlatih!

Pythonで学ぶSurvival Analysis

Preparing Video For Download...