サバイバル分析? 難しくないよ!RでKaplan-Meierモデルを簡単に理解しよう

サバイバル分析という言葉を聞いたことがありますか? 初めて聞くと難しいと感じるかもしれませんが、実は知ってみるとそれほど複雑な概念ではありません。 今日は Kaplan-Meier 生存分析モデルをRを使って簡単に紹介やってみようと思います。

生存分析は主にライフサイエンスや医学研究でよく使われますが、 顧客離脱分析イナ 製品の寿命を測定するのにもよく使われる強力なツールです。生存分析の代表的なモデルであるKaplan-Meierモデルを例として一緒に見てみましょう。

Kaplan-Meier生存分析とは?

生存分析は、時間の経過とともに 事件(例:廃業、離脱、死亡など)。が発生する確率を推定する方法です。 このモデルを使用すると、特定のイベントが発生するまでの時間を分析することができます。 例えば、 顧客がサービスから離脱する確率イナ 製品が故障するまでの期間を測定することができます。

Kaplan-Meierモデルは生存曲線を作って 時間の経過とともにイベントが発生する可能性を視覚的に示しています。この曲線が下がるたびにイベントが発生したことを意味します。

簡単な例でKaplan-Meierモデルを学ぶ

それでは、実生活で応用できる簡単な例を挙げてみましょう。 顧客離脱分析を例にとってみましょう。 10人の顧客がサービスを利用していると仮定します。このうち何人はサービスを使い続け、何人は離脱するでしょうか? Kaplan-Meierモデルを使って離脱する確率を分析することができます。

Rコードを使ってこのプロセスを可視化します。

# 必要なライブラリを呼び出します。
library(survival)
library(survminer)

# 10人の顧客データを生成します。
# 顧客がサービスを利用した年と離脱した年を記録します。
data <- data.frame(
    customer = 1:10、
    start_year = rep(2020, 10), # すべての顧客が2020年にサービスを開始します。
    leave_year = c(2021, NA, 2022, NA, 2023, 2024, NA, NA, NA, 2023, 2024) # 離脱していない場合 NA
)

# 顧客がサービスを利用した期間を計算します。
data$time_in_service <- ifelse(is.na(data$leave_year), 2024 - data$start_year, data$leave_year - data$start_year)

#顧客の離脱の有無を1と0で表示します(1: 離脱、0: まだ使用中)。
data$status <- ifelse(is.na(data$leave_year), 0, 1)

コードの説明:

  1. データ生成を作成します:2020年にサービスを開始した10人の顧客データを作成します。一部の顧客は2021年から離脱し始め、残りの顧客はまだサービスを利用しています。
  2. 離脱期間の計算: 各顧客が何年間サービスを使用したかを計算します。離脱していないお客様は、2024年までサービスを利用したものとみなされます。
  3. 離脱の有無: 顧客が離脱したかどうかを1(離脱)と0(まだ使用中)で表示します。

Kaplan-Meier サバイバルカーブの可視化

それでは、データをもとにKaplan-Meier生存曲線を描いてみましょう。顧客がどれくらい長くサービスを利用したかを視覚的に示す曲線を作成してみましょう。

# Kaplan-Meier 生存モデルを適用します。
fit <- survfit(Surv(time_in_service, status) ~ 1, data = data)

# 生存曲線を可視化します (データを明示的に渡します).
ggsurvplot(fit、
           data = data, # ggsurvplotにデータを渡します。
           conf.int = TRUE, #信頼区間を表示する
           xlab = "サービス使用期間(年)", # x軸ラベル
           ylab = "サービスを利用している顧客の割合", # y軸ラベル
           title = "サービスを利用している顧客の生存曲線", # グラフタイトル
           palette = "blue"、#グラフの色
           risk.table = TRUE, # 各年度のリスクテーブルを追加します。
           ggtheme = theme_minimal()) #ミニマリストテーマ適用

コードの説明:

  1. Kaplan-Meierモデルの適用: 顧客データにKaplan-Meier生存モデルを適用し、離脱確率を計算します。
  2. 生存曲線の可視化: ggsurvplot 関数を使用して、サービス利用期間による顧客の生存曲線を描きます。 conf.int = TRUEは信頼区間を示し、結果の信頼性を高めます。
  3. リスクテーブルの追加: 各年度ごとにサービスを使用している顧客数を表示するテーブルをグラフの下に追加します。

可視化結果の解釈

Kaplan-Meier 생존 분석 시각화

1.サバイバルカーブの概要

  • このグラフは、サービス利用顧客の生存曲線を示しています。
  • x軸はサービス利用期間(年)を示します、 Y軸は、まだサービスを利用しているお客様の割合を示しています。
  • 当初はすべての顧客(100%)がサービスを利用しており、時間が経つにつれて顧客が離脱し、生存曲線が段階的に低下します。

2.曲線の主なポイント

  • グラフは 0年から始まり、最初はすべての顧客(10人)がサービスを使用していることを示しています。
  • 1年が経過して最初の逸脱が発生し、この時、生存曲線が100%で約100%で、約 90%に落ちます。
  • 2年が過ぎると再び離脱が発生し、サバイバル曲線が 約80%に落ちます。
  • 3年 以来、生存曲線が再び下降しています、 60%のお客様だけが残ってサービスを使い続けています。
  • 4年 時点では、生存曲線がさらに下がり、最終的には、約 50%のお客様だけが残ります。

3.信頼区間(グレーシェード)

  • 青い生存曲線周辺の グレーの色合い信頼区間(Confidence Interval)を表します。
  • これは、各ポイントでの生存確率の信頼度を示し、陰影が広いほど予測の不確実性が大きいことを意味します。
  • 信頼区間はサバイバルカーブが下がるたびに広がり、時間の経過とともに予測の不確実性が大きくなります。

4.危険にさらされている数(Number at Risk)表

  • グラフの下部に「Number at Risk」という表があります。
  • この表は、各年度ごとにまだサービスを利用しているお客様の数を示しています。
  • 0年 現時点では、10名のお客様全員がサービスを利用中です。
  • 1年 後は9人のお客さんが残っていて、 2年 後は8人、 3年 その後も6人がまだサービスを利用しています。

5.曲線解析

  • 生存曲線の低下曲線が下降している部分は、顧客がサービスを離脱したことを示しています。サービス利用期間が長くなればなるほど、離脱する顧客数が増え、それに応じて生存曲線が徐々に下降します。
  • 最後の生存率: 4年後、半分(50%)の顧客がサービスを使い続けています。 つまり、残りの50%はサービスから離脱したことになります。

このグラフは、Kaplan-Meierサバイバル分析により、顧客のサービス利用期間と離脱傾向を視覚的に示しています。時間の経過とともにサービスから離脱する顧客の割合を明確に把握することができます。

まとめ:Kaplan-MeierモデルR分析、もう難しくありません!

今日はKaplan-Meier生存分析モデルを簡単に理解し、Rを使って直接視覚化までしてみました。 このモデルは最初は難しく感じるかもしれませんが、このように顧客離脱分析のような実際の事例に適用すると、はるかに理解しやすくなります。今後も様々なデータ分析にこのモデルを活用してみてください!

下記のコード全体を一度にコピーして RStudioに貼り付けて実行することができます。 もしかしたら、このカプラン-マイヤーモデルの実際の適用事例が気になる方は 白黒料理人でも避けられないミシュランの呪い: Rで分析した物語 ぜひポストをレビューしてみてください。

#フルRコード

# 必要なライブラリを呼び出します。
library(survival)
library(survminer)

# 10人の顧客データを生成します。
# 顧客がサービスを利用した年と離脱した年を記録します。
data <- data.frame(
    customer = 1:10、
    start_year = rep(2020, 10), # すべての顧客が2020年にサービスを開始します。
    leave_year = c(2021, NA, 2022, NA, 2023, 2024, NA, NA, NA, 2023, 2024) # 離脱していない場合 NA
)

# 顧客がサービスを利用した期間を計算します。
data$time_in_service <- ifelse(is.na(data$leave_year), 2024 - data$start_year, data$leave_year - data$start_year)

#顧客の離脱の有無を1と0で表示します(1: 離脱、0: まだ使用中)。
data$status <- ifelse(is.na(data$leave_year), 0, 1)

# Kaplan-Meier 生存モデルを適用します。
fit <- survfit(Surv(time_in_service, status) ~ 1, data = data)

# 生存曲線を可視化します (データを明示的に渡します).
ggsurvplot(fit、
           data = data, # ggsurvplotにデータを渡します。
           conf.int = TRUE, #信頼区間を表示する
           xlab = "サービス使用期間(年)", # x軸ラベル
           ylab = "サービスを利用している顧客の割合", # y軸ラベル
           title = "サービスを利用している顧客の生存曲線", # グラフタイトル
           palette = "blue"、#グラフの色
           risk.table = TRUE, # 各年度のリスクテーブルを追加します。
           ggtheme = theme_minimal()) #ミニマリストテーマの適用

類似の投稿