なぜ生存分析を使うのか?

Pythonで学ぶSurvival Analysis

Shae Wang

Senior Data Scientist

平均バッテリー寿命の例

DataFrame 名: battery_df

Battery ID Duration Dead Brand Truck
1 2.5 yrs No Brand A Long
2 6 yrs Yes Brand B Short
3 5 yrs No Brand B Long
... ... ... ... ...
1000 4.5 yrs Yes Brand A Short

平均バッテリー寿命は?

np.average(battery_df["Duration"])
Pythonで学ぶSurvival Analysis

平均バッテリー寿命の例

バッテリー寿命の検閲イラスト。

Pythonで学ぶSurvival Analysis

バッテリー寿命における検閲

バッテリー寿命の検閲イラスト。

  • 死んでいない電池では、$T_{duration} \neq T_{lifetime}$。
  • 失敗が未観測の電池(1, 3, 4 など)は、平均計算で不適切に扱われる
Pythonで学ぶSurvival Analysis

検閲の問題

生存時間が一部しか分からない状態。

検閲はどう起きるか?

  • 観測終了時点で事象が未発生
    • 例: 実験終了時に無料トライアル利用者が未課金。
  • 離脱連絡不能でデータが欠落。
    • 例: 実験で無料トライアル利用者がデータ共有を拒否。
Pythonで学ぶSurvival Analysis

検閲の種類

検閲タイプのイラスト。

  • 未検閲: 事象が発生し、生存期間が既知。
  • 右側検閲: 生存期間は観測期間より長い。
  • 左側検閲: 生存期間は観測期間より短い。
  • 区間検閲: 生存期間はある範囲内だが正確な値は不明。
Pythonで学ぶSurvival Analysis

検閲が悪影響を与える理由

集計統計量

  • 欠測データの一種。
  • 統計量を歪める(例: np.average(), max(), min())。

回帰

  • 直線回帰は二乗誤差和を最小化。
  • 検閲データでは誤差項が不明。
Pythonで学ぶSurvival Analysis

生存関数

  • 検閲データの補完は行わない。
  • 生存期間がある値より大きい確率をモデル化。

  $$S(t)=Pr(T>t)$$

Pythonで学ぶSurvival Analysis

生存分析 vs 検閲

非検閲データのイラスト。

検閲データのイラスト。

Pythonで学ぶSurvival Analysis

検閲の有無をデータで確認

どのデータ点が検閲か判別できますか?

手順1) 検閲を示す列を確認(前処理済みのことが多い)。

検閲が多すぎませんか?

手順2) 検閲データ点の比率を確認(目安は50%)。

検閲は無情報でランダムですか?

手順3) 検閲の原因を調査し、検閲の有無が生存に影響しないことを確認。

Pythonで学ぶSurvival Analysis

Let's practice!

Pythonで学ぶSurvival Analysis

Preparing Video For Download...