生存曲線の使い方(生存率の計算方法)

生存曲線の使い方と、Exploratoryが生存曲線に利用しているカプラン・マイヤー法に関してよく聞かれる質問をまとめています。

生存曲線を使うことで、以下のような時間に関する分析が可能です。

  • ユーザーがサービスからチャーン(解約)するまでの時間
  • 従業員が転職・退職してしまうまでの時間
  • とある製品が故障するまでの時間(例:車を使い始めてから故障するまでの時間)
  • ある病気にかかった人の余命 (生存分析という名前の由来)

必要なデータ

生存曲線を描くためには、**1行が1観察対象(例:1行が1顧客)**のデータが必要です。

また、以下の情報も列に必要です。

  • 開始時期:観察対象の観察の開始時期を表す、Data(日付)型、またはPOSIXct(日付時間)型の列
  • 終了時期:観察対象の観察の終了時期を表す、Data(日付)型、またはPOSIXct(日付時間)型の列
  • 生存状態:観察対象のイベントのステータスを表す、ロジカル型の列(例:死亡、キャンセル、など)
  • 色で分割(オプショナル):観察対象をグループ化する他の列があれば、グループごとに、生存曲線を描いて、比較できます。

サンプルデータ

今回はサンプルデータとして、Webサービスの利用状況のデータを使用します。

このデータは、1行が1顧客を表していて、列にはサービス利用開始日や終了日、利用しているOS、生存状態(サービスをキャンセルしているかどうか)の情報があります。

なお生存分析用のデータの作成方法は以下のリンクにて詳しく紹介していますので、よろしければ、ご参考ください。

  • 生存分析用のデータの作成方法 - リンク

生存分析を実行する

アナリティクスビューを選び、タイプに「生存曲線」を選択します。

「開始時期」に「開始日」を選択します。

「終了時期」に、「終了日」を選択します。

「期間の単位」では生存期間の単位を設定できます。デフォルトは「自動」になっており、自動で最適な「期間の単位」が設定されます。

「生存状態(イベント)」に「キャンセル」を選択します。

観察対象をグループに分けて、生存曲線を比較したいときは、「色で分割」にグループの列を選択します。

今回は「os」を選択し、実行します。

生存曲線が描かれました。

結果の解釈

サマリ

サマリタブは「色で分割」に列を選択したときにのみ、内容が表示されます。

ログランク検定のP値は、「色で分割」したグループと生存曲線の間に関係がなかったと仮定したときに、「生存曲線」タブで見えている生存曲線の差がたまたま得られる確率となります。

仮に有意水準のしきい値を0.05(5%)としたときに、ログランク検定のP値が0.05(5%)以下の場合、「色で分割」したグループ間の生存曲線には有意な差があると言えます。

今回の例では、ログランク検定のP値が0.17となるため、「色で分割」に選択している「os」と生存曲線の間には、有意な差があるとは言えません。

生存曲線

生存曲線タブでは、どれだけの観察対象が、観察を始めてからキャンセルや退職などをせずに生き残っているのかを、経過時間ごとにラインチャートで可視化しています。

「色で分割」に列を選択したときにはカテゴリごとの生存曲線が描かれます。

「信頼区間(95%)」にチェックを付けると、生存曲線の信頼区間を表示されます。

今回の例では、「os」が「Mac」のグループの生存曲線と、「Windows」のグループの生存曲線の信頼区間が重なっているため、「os」と生存曲線には有意な関係があるとは言えません。

生存率表

生存率表タブでは、どれだけの観察対象が、観察を始めてから解約や退職などのイベントを経験せずに生き残ったかを、色付きの表で可視化しています。

データ

データタブでは、生存曲線で描かれているデータ確認できます。

各列は以下の情報を表しています。

  • コホート - (オプション)色で分割に選択した列のグループの値
  • 生存期間 - (例 :サインアップしてからの日付)1行が1つの時間を示す
  • 観察対象 - その行の時間が始まるまでにイベントがまだ起こっていない観察対象の数
  • イベント - その行の時間内にイベントが発生した件数
  • 打ち切り - その行の時間内に打ち切りになった件数
  • 生存率 - その行の時間の終わりまでの生存率。このデータが生存曲線の可視化で使われる
  • 標準誤差 - 生存率の標準誤差
  • 信頼区間上限 - 生存率の信頼区間の上限
  • 信頼区間下限 - 生存率の信頼区間の下限

参考

  • SaaS アナリティクス #7 - コホート分析 Part.2 - 生存曲線 - リンク
  • 生存分析用のデータの作成方法 - リンク

生存曲線に関するよくある質問

Exploratoryが「生存曲線」に利用しているカプラン・マイヤー法について、よく聞かれる質問と、その答えをこちらにまとめました。

Q: 生存期間の単位の「月」や「年」はどのように計算されていますか?

Exploratoryの生存曲線では、「期間の単位」から、生存曲線を描く期間の単位の指定が可能です。

この「期間の単位」は、「終了時期」から「開始時期」を引いた生存期間の日数から計算されています。

例えば、1ヶ月あたりの日数は、うるう年を考慮した平均的な月の日数である365.2512ヶ月で割った以下にて計算されます。

30.4375 = 365.25(日)/12(ヶ月)

仮に生存期間が90日だった場合、以下の計算により生存期間は約2.96ヶ月となるため、3ヶ月目までは生存ができなかったことになります。

2.95687885(ヶ月)  = 90 / 30.4375

また、期間の単位に「年」を選択したときは、「生存期間の日数」を365.25で割った値が生存「年」となります。

Q: 「打ち切り」とは何ですか?

とあるサブスクリプション型のビジネスを例に考えてみます。

仮に今月が2024年の4月だったとすると、2024年の1月にサービスの利用を開始した人は、1、2、3月の3ヶ月間しかサービスを利用していないため、4ヶ月目にサービスを継続するかどうかがわかりません。

このように、注目している生存期間までのデータが存在しない観察対象のことを「打ち切り」と呼び、当該期間の生存率の計算対象から省くことになります。なお、打ち切りや生存率の計算方法の詳細はこちらの動画で紹介していますので、ご参考ください。

Q: 想定よりも一区間早く打ち切りやイベントが発生する

多くの場合、これらの疑問は前の項目で説明している生存期間の単位の計算方法を理解することで、解消されます。

例えば、以下のようなデータがあったとします。

userid 開始時期 終了時期 イベント 生存期間(日)
a 2020/1/1 2020/6/30 TRUE 181
b 2020/7/1 2020/12/31 FALSE 183
c 2020/1/1 2020/12/31 FALSE 365
d 2020/1/1 2020/12/31 TRUE 365

開始時期と終了時期を見ると、useridがaの人は6ヶ月間生存しているように見えるため、イベントは7ヶ月目に発生するように感じますが、この人の生存日数は「181」日です。

生存期間の単位の「月」は、生存期間の日数をうるう年を考慮した平均的な月の日数である、30.4375で割るため、生存期間は5.94ヶ月となり、以下のように6ヶ月目にイベントが発生することになるわけです。

同様の理由でuseridがdの人は1年間生存しているように見えるため、イベントは1年と1ヶ月目に発生するように感じますが、この人の生存日数は「365」日です。

生存期間の単位の「年」は、生存期間の日数をうるう年を考慮した平均的な年間の日数である、365.25で割るため、生存期間は約0.999年となる1年間生存できていないことになるわけです。

Q: 打ち切りが「0」になってしまう

生存分析を実行した際、打ち切り対象の観察対象がいるにも関わらず、以下のように打ち切りが「0」になってしまうことがあります。

このようなときには、終了時期に「未来日」があり、その「未来日」がデータ上の最新の日であることで、終了時期の欠損値が「未来日」で埋められてしまっていることが原因と想定されます。

そのようなときには生存曲線の中で、終了時期の欠損値を「今日」あるいは「特定の日時」で埋めることが可能です。

詳しいやり方はこちらで紹介していますので、ご参考ください。

Q: 終了日の欠損値には何を指定すると良いですか?

設定ボタンをクリックすると、「終了時期の欠損値(NA)を埋める」というオプションがあり、3つのタイプがサポートされています。

もし、使用されているデータが定期的に更新される場合、終了時期の欠損値を「今日の日付」で埋めると良いかと思います。

一方で、データが定期的に更新されるわけではなく、都度気になった時に見ていくのであれば、「データの中の最新の日時」や「日時を指定」をすると良いのではないかと思います。

データの中の最新の日時については、終了日の最後の日付で埋められることになり、例えば2023-12-31が最後の日付であればその日で埋めることができます。

Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio