はじめに
生存時間分析の一つとして Cox 比例ハザードモデルがあります。
Python の生存時間分析ライブラリである lifelines
を使ってモデルを作成すると、評価方法についていくつか選択肢があります。
ここでは Concordance index (c-index, C 統計量) を使った評価についてまとめます。
lifelines で Cox 比例ハザードモデルを作成した際の summary
今回は Python の生存時間分析ライブラリ lifelines
に入っている "ROSSI" データを使用します。
以下のコードを実行すると、Cox 比例ハザードモデルを作成でき、図のような summary が取得できます。
import pandas as pd
from lifelines.datasets import load_rossi
from lifelines import CoxPHFitter
import matplotlib.pyplot as plt
rossi = load_rossi()
cph = CoxPHFitter()
cph.fit(rossi, duration_col='week', event_col='arrest')
cph.print_summary()
モデルの評価で用いることができるのが、図の下の方にある Concordance
、Partial AIC
、log-likelihood ratio test
の3つになります。
今回取り上げる Concordance
は、上記の場合 0.64 になっています。
Concordance について
Concordance (index) は C-index や C 統計量とも呼ばれ、1996年に Harrell らによって提唱された指標になります。
これは生存時間の予測と実測の大小関係がどの程度一致しているかを表した指標になっており、0~1 の値を取り、1 に近いほど良い結果となります。
また、医療統計分野の論文では「値が 0.8 より大きければ良い」という目安があるそうです。
ただし、値はあくまで目安であり、必ず超えていなければいけないわけではなく、例えば DeepSurv の論文では Cox 比例ハザードモデルと Randam Survival Forest、DeepSurv のそれぞれの比較に Concordance index を用いています。
これらを踏まえて、例えば「Cox 比例ハザードを使用したモデル A とモデル B では、A の方が Concordance index の値が大きく、また目安となる 0.8 に近い値を出している。このことからモデル A の方が優れている」などと示すことができます。
まとめ
Python で Cox 比例ハザードモデルを作成して生存時間分析する際のモデルの評価方法についてまとめました。
場合によっては AIC を使う方が良いという記事も見かけたのですが、lifelines
で出力される Partial AIC
の見方が分からなかったのでここについて知っている方がいたら教えていただければ嬉しいです。
参考
- 傾向スコアを用いた共変量調整による因果効果の推定と臨床医学・疫学・薬学・公衆衛生分野での応用について
- DeepSurv: personalized treatment recommender system using a Cox proportional hazards deep neural network
- 【生存時間分析による離反時期分析 その3】
Python の生存時間分析ライブラリー Lifelinesで予測した
「離反時期(顧客であるまでの期間)」の精度検証 - サービスの解約率・機械の故障率などが予測できる”生存時間分析”とは?
- AICとc-index (concordance index)とはどう使い分けるべきなのか