生存時間解析入門:心不全患者データを用いた実践ガイド
「AIを業務に活用したいが、データをどう扱えばいいかわからない」
「モデルを使うだけでなく、現場で使える分析力も身につけたい」
本記事のようなデータを扱う力からAI活用までを体系的に学べる実践的なハンズオン研修を
提供しています。
1. はじめに
本記事では、生存時間解析 の基礎を実践的に、Heart Failure Clinical Records Data Setを用いて解説します。理論的背景と実際の分析コードを交えながら、Kaplan-Meier分析、Log-rank検定、Cox回帰分析を順に学習します。
2. 生存時間解析とは
生存時間解析は、あるイベントが発生するまでの時間を分析する統計手法です。
イメージ図

特徴
- 打ち切りデータ を適切に扱える
- イベントが観察されなかったケースの情報も活用可能
- 時間経過に伴うリスクの変化を評価できる
主要な概念
| 概念 | 説明 |
|---|---|
| 生存時間 | イベント発生までの経過時間 |
| イベント | 関心のある事象(解約、死亡、離脱、故障など) |
| 打ち切り | 観察期間中にイベントが発生しなかったケース |
| 生存関数 S(t) | 時刻 t 以降も生存している確率 |
| ハザード関数 h(t) | 時刻 t で生存している個体がその直後にイベントを経験する 瞬間的リスク |
3. 実務・ビジネス活用例
生存時間解析は実務で幅広く活用されています。
| 分野 | イベント | 活用例 | 🏥 医療 | 死亡・再発 | 治療効果の比較、予後予測 |
|---|---|---|
| 📊 マーケティング | 顧客離脱(Churn) | 解約リスク予測、リテンション施策 | 🏭 製造業 | 機器故障 | 予知保全、交換時期の最適化 |
| 👥 人事 | 従業員退職 | 離職リスク分析、エンゲージメント向上 | 💰 金融 | ローンデフォルト | 信用リスク評価、延滞予測 |
| 💻 SaaS | サブスク解約 | LTV予測、解約防止施策の評価 |
4. 使用データ
Heart Failure Clinical Records Data Set(UCI Machine Learning Repository)を使用します。
サンプル数は299名(うち96名死亡)、追跡期間は4〜285日でした。
以下に変数一覧を記載します。
変数一覧(13変数)
| 変数名 | 説明 | 型 | age | 年齢 | 連続 |
|---|---|---|
| anaemia | 貧血 | 二値 | creatinine_phosphokinase | CPK酵素レベル | 連続 |
| diabetes | 糖尿病 | 二値 | ejection_fraction | 駆出率(%) | 連続 |
| high_blood_pressure | 高血圧 | 二値 | platelets | 血小板数 | 連続 |
| serum_creatinine | 血清クレアチニン | 連続 | serum_sodium | 血清ナトリウム | 連続 |
| sex | 性別 | 二値 | smoking | 喫煙 | 二値 |
| time | 追跡期間(日) | 生存時間 |
| DEATH_EVENT | 死亡イベント | イベント |
5. 分析の流れ
| ステップ | 目的 |
|---|---|
| Kaplan-Meier分析 | 生存曲線の可視化 |
| Log-rank検定 | 群間の生存曲線の差の検定 |
| Cox回帰分析 | 複数の共変量の影響を評価 |
| モデル検証 | 多重共線性・比例ハザード性の確認 |
6. Kaplan–Meier分析
理論
Kaplan-Meier推定量は、生存関数S(t)をノンパラメトリックに推定します。

di:時刻 ti でのイベント発生数
ni:時刻 ti 直前のリスク集合サイズ
分析結果

- 追跡期間中の生存確率は徐々に低下
- 高血圧ありの人は生存率が低い傾向
- 性別による差は視覚的にも小さい
7. Log-rank検定
理論
Log-rank検定は、2群間の生存曲線に統計的な差があるかを検定するノンパラメトリック検定です。
検定の考え方:
- 帰無仮説: 2群間で生存曲線に差がない(両群の生存確率は同じ)
- 対立仮説: 2群間で生存曲線に差がある
検定の仕組み:
- 各時点で「もし2群に差がなければ、各群で何人のイベントが起きるはずか」という期待イベント数を計算します
- 実際に観測された観測イベント数と期待イベント数を比較します
- 期待値と観測値のずれが大きいほど、2群間に差があると判断します
直感的な理解:
例えば、高血圧群と非高血圧群で死亡率を比較する場合:
- 両群に差がなければ、各時点での死亡は両群に均等に分布するはず
- 実際には高血圧群に死亡が集中していれば、「期待より多くの死亡」が高血圧群で観測される
- この「期待からのずれ」をカイ二乗統計量として算出し、p値を求めます
分析結果
| 層別因子 | χ² | p値 | 判定 |
|---|---|---|---|
| high_blood_pressure | 4.406 | 0.036 | 有意差あり |
| anaemia | 2.726 | 0.099 | 境界的 |
| diabetes | 0.041 | 0.841 | 有意差なし |
| sex | 0.004 | 0.950 | 有意差なし |
| smoking | 0.002 | 0.964 | 有意差なし |
8. Cox回帰分析
理論
Cox比例ハザードモデルは、複数の共変量がハザードに与える影響を評価する半パラメトリックモデルです。

h(t | X):共変量 X を持つ個体の時刻 t におけるハザード(瞬間的リスク)
h0(t):ベースラインハザード(全ての共変量が0のときのハザード)
β1, β2, …, βp:各共変量の回帰係数(ログハザード比)
X1, X2, …, Xp:共変量(説明変数)
exp(β):ハザード比(HR)= 共変量が1単位増加したときのリスク倍率
| HR | 意味 |
|---|---|
| HR > 1 | リスク増加 |
| HR = 1 | リスクに関連なし |
| HR < 1 | リスク減少(保護因子) |
単変量解析結果
| 変数 | HR | 95% CI | p値 | 判定 |
|---|---|---|---|---|
| age | 1.043 | 1.026 - 1.061 | <0.001 | ✅ |
| ejection_fraction | 0.955 | 0.935 - 0.975 | <0.001 | ✅ |
| serum_creatinine | 1.336 | 1.200 - 1.487 | <0.001 | ✅ |
| serum_sodium | 0.935 | 0.900 - 0.971 | <0.001 | ✅ |
| high_blood_pressure | 1.546 | 1.026 - 2.331 | 0.037 | ✅ |
| anaemia | 1.401 | 0.938 - 2.094 | 0.100 | ⚠️ |
年齢・駆出率・血清クレアチニン・血清ナトリウム・高血圧が単独で死亡リスクと有意に関連していました。これらは他の変数を考慮せず、単一の変数だけで評価した結果です。
多変量解析結果

| 指標 | 値 | 意味 |
|---|---|---|
| Concordance Index | 0.741 | 予測精度。0.5=ランダム、1.0=完全予測。0.7以上で良好 |
| Log-likelihood | -468.23 | モデル適合度。値が大きいほど良い(モデル比較に使用) |
他の変数の影響を調整しても、年齢・駆出率・血清クレアチニンが独立した死亡リスク因子として確認されました。Concordance Index 0.741は「約74%の精度で生存時間の順序を予測できる」ことを意味し、良好な予測性能です。
9. モデル妥当性チェック
9.1 多重共線性(VIF)
| 変数 | VIF | 判定 |
|---|---|---|
| serum_sodium | 2.22 | ✅ |
| sex | 2.10 | ✅ |
| age | 2.09 | ✅ |
| serum_creatinine | 1.93 | ✅ |
| ejection_fraction | 1.93 | ✅ |
| platelets | 1.92 | ✅ |
| smoking | 1.89 | ✅ |
| anaemia | 1.87 | ✅ |
| diabetes | 1.79 | ✅ |
| high_blood_pressure | 1.59 | ✅ |
| creatinine_phosphokinase | 1.44 | ✅ |
| VIF範囲 | 判定 |
|---|---|
| VIF < 5 | ✅ 問題なし |
| 5 ≤ VIF < 10 | 要注意 |
| VIF ≥ 10 | 変数削除を検討 |
9.2 比例ハザード性の検定
Cox回帰モデルは「ハザード比が時間によらず一定」という仮定(比例ハザード仮定)に基づいています。この仮定が満たされないと、回帰係数の解釈が困難になります。Schoenfeld残差を用いた検定で確認します。
| 変数 | p値 | 判定 |
|---|---|---|
| ejection_fraction | 0.013 | ⚠️ |
| その他 | > 0.05 | ✅ |
駆出率(ejection_fraction)でp < 0.05となり、比例ハザード仮定に若干の違反が見られます。これは「駆出率の影響が時間とともに変化する可能性」を示唆しています。ただし、他の変数は問題なく、モデル全体としては許容範囲です。
10. 結果の解釈
独立した死亡リスク因子(多変量解析)
| 因子 | HR | 解釈 |
|---|---|---|
| 年齢 | 1.05 | 1歳増加で リスク5%増 |
| 駆出率 | 0.95 | 1%増加で リスク5%減(保護因子) |
| 血清クレアチニン | 1.38 | 上昇で 38%リスク増 |
| 高血圧 | 1.61 | ありで 61%リスク増 |
| 貧血 | 1.58 | ありで 58%リスク増 |
臨床的示唆
| No. | 知見 |
|---|---|
| 1 | 年齢は心不全患者の死亡リスクに最も強く関連 |
| 2 | 駆出率(心臓のポンプ機能)が高いほど予後良好 |
| 3 | 血清クレアチニン上昇(腎機能低下)は死亡リスクを顕著に増加 |
| 4 | 高血圧は独立したリスク因子 |
11. まとめ
本記事で学んだこと
| 手法 | 目的 | Kaplan-Meier | 生存曲線の推定・可視化 |
|---|---|
| Log-rank検定 | 2群間の生存曲線比較 | Cox回帰 | 複数共変量の影響評価 |
| VIF | 多重共線性の確認 | Schoenfeld残差 | 比例ハザード性の検証 |
生存時間解析の強み
生存時間解析は、主に以下の3点が強みです。
適切に扱える
リスク変化をモデリング
幅広く適用可能
今回は、「生存時間解析」の基礎をデータを活用しながら学習しました。どなたかの統計学の勉強の助けとなっていれば幸いです。