生存曲線の使い方と、Exploratoryが生存曲線に利用しているカプラン・マイヤー法に関してよく聞かれる質問をまとめています。
生存曲線を使うことで、以下のような時間に関する分析が可能です。
生存曲線を描くためには、**1行が1観察対象(例:1行が1顧客)**のデータが必要です。
また、以下の情報も列に必要です。
今回はサンプルデータとして、Webサービスの利用状況のデータを使用します。
このデータは、1行が1顧客を表していて、列にはサービス利用開始日や終了日、利用しているOS、生存状態(サービスをキャンセルしているかどうか)の情報があります。
なお生存分析用のデータの作成方法は以下のリンクにて詳しく紹介していますので、よろしければ、ご参考ください。
アナリティクスビューを選び、タイプに「生存曲線」を選択します。
「開始時期」に「開始日」を選択します。
「終了時期」に、「終了日」を選択します。
「期間の単位」では生存期間の単位を設定できます。デフォルトは「自動」になっており、自動で最適な「期間の単位」が設定されます。
「生存状態(イベント)」に「キャンセル」を選択します。
観察対象をグループに分けて、生存曲線を比較したいときは、「色で分割」にグループの列を選択します。
今回は「os」を選択し、実行します。
生存曲線が描かれました。
サマリタブは「色で分割」に列を選択したときにのみ、内容が表示されます。
ログランク検定のP値は、「色で分割」したグループと生存曲線の間に関係がなかったと仮定したときに、「生存曲線」タブで見えている生存曲線の差がたまたま得られる確率となります。
仮に有意水準のしきい値を0.05(5%)としたときに、ログランク検定のP値が0.05(5%)以下の場合、「色で分割」したグループ間の生存曲線には有意な差があると言えます。
今回の例では、ログランク検定のP値が0.17となるため、「色で分割」に選択している「os」と生存曲線の間には、有意な差があるとは言えません。
生存曲線タブでは、どれだけの観察対象が、観察を始めてからキャンセルや退職などをせずに生き残っているのかを、経過時間ごとにラインチャートで可視化しています。
「色で分割」に列を選択したときにはカテゴリごとの生存曲線が描かれます。
「信頼区間(95%)」にチェックを付けると、生存曲線の信頼区間を表示されます。
今回の例では、「os」が「Mac」のグループの生存曲線と、「Windows」のグループの生存曲線の信頼区間が重なっているため、「os」と生存曲線には有意な関係があるとは言えません。
生存率表タブでは、どれだけの観察対象が、観察を始めてから解約や退職などのイベントを経験せずに生き残ったかを、色付きの表で可視化しています。
データタブでは、生存曲線で描かれているデータ確認できます。
各列は以下の情報を表しています。
Exploratoryが「生存曲線」に利用しているカプラン・マイヤー法について、よく聞かれる質問と、その答えをこちらにまとめました。
Exploratoryの生存曲線では、「期間の単位」から、生存曲線を描く期間の単位の指定が可能です。
この「期間の単位」は、「終了時期」から「開始時期」を引いた生存期間の日数から計算されています。
例えば、1ヶ月あたりの日数は、うるう年を考慮した平均的な月の日数である365.25
を12ヶ月
で割った以下にて計算されます。
30.4375 = 365.25(日)/12(ヶ月)
仮に生存期間が90日だった場合、以下の計算により生存期間は約2.96ヶ月となるため、3ヶ月目までは生存ができなかったことになります。
2.95687885(ヶ月) = 90 / 30.4375
また、期間の単位に「年」を選択したときは、「生存期間の日数」を365.25
で割った値が生存「年」となります。
とあるサブスクリプション型のビジネスを例に考えてみます。
仮に今月が2024年の4月だったとすると、2024年の1月にサービスの利用を開始した人は、1、2、3月の3ヶ月間しかサービスを利用していないため、4ヶ月目にサービスを継続するかどうかがわかりません。
このように、注目している生存期間までのデータが存在しない観察対象のことを「打ち切り」と呼び、当該期間の生存率の計算対象から省くことになります。なお、打ち切りや生存率の計算方法の詳細はこちらの動画で紹介していますので、ご参考ください。
多くの場合、これらの疑問は前の項目で説明している生存期間の単位の計算方法を理解することで、解消されます。
例えば、以下のようなデータがあったとします。
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年間生存できていないことになるわけです。
生存分析を実行した際、打ち切り対象の観察対象がいるにも関わらず、以下のように打ち切りが「0」になってしまうことがあります。
このようなときには、終了時期に「未来日」があり、その「未来日」がデータ上の最新の日であることで、終了時期の欠損値が「未来日」で埋められてしまっていることが原因と想定されます。
そのようなときには生存曲線の中で、終了時期の欠損値を「今日」あるいは「特定の日時」で埋めることが可能です。
詳しいやり方はこちらで紹介していますので、ご参考ください。
設定ボタンをクリックすると、「終了時期の欠損値(NA)を埋める」というオプションがあり、3つのタイプがサポートされています。
もし、使用されているデータが定期的に更新される場合、終了時期の欠損値を「今日の日付」で埋めると良いかと思います。
一方で、データが定期的に更新されるわけではなく、都度気になった時に見ていくのであれば、「データの中の最新の日時」や「日時を指定」をすると良いのではないかと思います。
データの中の最新の日時については、終了日の最後の日付で埋められることになり、例えば2023-12-31が最後の日付であればその日で埋めることができます。