こんにちは、AITCの小川です。
以下、前回のコラムに続く内容で、統計的モデルを使用した生存時間分析について解説します。 前回の記事を読んでいらっしゃらない方は、前回の記事を先に読んでから本記事を読み進めることをおすすめします。
統計的モデルを使用した生存時間分析
ここではCox回帰モデルという統計的モデルを使用します。 生存時間分析をする統計的モデルの中で広く知られるモデルの一つです。 今回のコラムの本筋ではないのでCox回帰モデルの詳細は細かく触れません。詳細が気になる方はこちらの論文をご覧ください。
前回の記事で紹介した、シンプルに生存割合をプロットする方法の代わりに、Cox回帰モデルを使用することで得られる利点は以下の通りです。
- 変数が増加しても各変数が生存時間に与える影響を分離して、他の変数の影響を取り除いた影響を見ることができる
- 各変数が生存時間に与える影響を定量化できる
前回記事で具体例として用いた、架空のジム会員が退会するまでの時間を対象に行った生存時間分析を例にCox回帰モデルについて説明します。 データは前回の記事で扱った架空のジム会員のデータを引き続き使用します。 Cox回帰モデルには基本的に数字しか入力できないので、会員データの文字は以下のように数字に変換します。
0 | 1 | 2 | |
---|---|---|---|
性別 | 男性 | 女性 | |
年代 | 20代 | 30代 | 40代 |
住所 | ジムから500m未満 | ジムから500m以上 | |
会員クラス | プレミアム会員 | 普通会員 |
例えば、性別が男性の場合は0に、女性の場合は1に変換します。
数字に変換した後のデータをCox回帰モデルに入力すると、変数ごとのハザード比という数値を知ることができます。 例えば、以下のような結果を取得できます。(結果は架空のものです)
性別 | 年代 | 住所 | 会員クラス | 先週来店数 | |
---|---|---|---|---|---|
ハザード比 | 1.05 | 0.94 | 1.19 | 1.30 | 0.82 |
表のハザード比の数値の意味を追っていきましょう。
ハザード比
ハザード比とは2つのグループのイベント発生率の比率です。 イベントとは分析したい何か特定の出来事を指します。 今回の例では、イベントは会員がジムを退会することを表します。
ハザード比は2つのグループを比較したとき、基準のグループに比べて、対比されるグループがどれだけイベントが発生しやすいかを表します。 ハザード比が1であれば2つのグループのハザード率が同じ、つまりイベントの発生しやすさが同じであることを意味します。 つまり、その変数は特に生存時間に影響しないことを意味します。 例えば、性別のハザード比は1.05となっているため、性別の差は生存時間(退会までの時間)にほとんど影響を与えないということがわかります。
ハザード比が1でない場合、どのように解釈するとよいのでしょうか。 例えば、表の結果から会員クラスのハザード比が1.3となっています。 これは会員クラスの値が1増加すると、イベント発生確率が1.3倍になることを意味します。 プレミアム会員が0、普通会員が1と変換しているので、普通会員のほうがプレミアム会員に比べて退会する確率が1.3倍ということです。
ここで注意すべきなのが、あくまでもハザード比は「比」であるため、イベント発生率の相対的な値です。 実際にどれくらいの時間でどれだけの割合の人が退会しているのかは、別途生存割合をプロットするなどして確認する必要があります。 これは次の章で確認します。
他の変数の影響も見てみましょう。 先週の来店数は0.82となっています。 つまり、先週の来店数が1回多いと、今週退会する確率が0.82倍になるということです。 逆に先週来ていないと、退会する確率が上がってしまうということを意味します。
以上のように、Cox回帰モデルを使用することで、各変数が生存時間(退会する確率)にどれだけ影響するかが、ハザード比という数値を見ることで定量的にわかります。
統計的モデルを使用して生存割合をプロット
ハザード比は、あくまでもイベント発生確率の相対的な値です。 例えば、イベント発生確率が0.2と0.4のハザード比は2となります。 一方で、イベント発生確率が0.3と0.6のハザード比も2となります。 つまり、相対的な値であるハザード比を見ても、実際にどれくらいの時間でどれだけの割合の人が退会しているのかはわからないです。 別の方法で確認する必要があります。
前回、シンプルに性別の生存時間に対する影響を見るために、データを男性と女性で分けて生存時間をプロットしました。 しかし、このプロットでは性別の影響だけでなく、他の変数の影響も入っています。 他の変数の影響を取り除くには、他の変数の種類ごとにプロットをする必要がありました。 (前回の記事では、年代の影響を除いた性別の影響を知るために、年代が20代、30代、40代ごとにプロットを作成しました)
一方で、Cox回帰モデルを使用すると、1つのプロットだけで他の変数の影響を取り除いて、性別の影響だけ取り出してプロットすることができます。 実際にプロットしてみると以下のようになります。
ハザード比が1.05と1に近いため、ほとんど男性と女性で生存割合はかわりません。
ハザード比が1.3の会員クラスの影響もプロットして見てみましょう 30ヶ月後に普通会員の生存割合が20%であるのに対して、プレミアム会員は生存割合が30%と10%程度高いです。 プロットすることで、ハザード比の相対的な生存時間の関係だけでなく、実際に生存時間と変数との関係がわかります。
生存時間の予測
Cox回帰モデルを使用すると、変数の影響を見るだけでなく、ある条件における時間ごとの生存割合を予測することもできます。 例えば、「男性20代プレミアム会員で、ジムに近所に住み毎週来店する人」であるというような条件を与えてやると、以下のように生存割合のプロットができます。
このプロットから該当の条件の人は30ヶ月後ジムに残っている確率が40%程度であることがわかります。 逆に、60%の確率で30ヶ月後までにジムを退会してしまうということです。
ジムの会員ごとに生存時間を分析することで、より退会しそうな人を見つけ出すことができます。 退会しそうな人にクーポンを発行するなど対策を講じることができるようになります。
最後に
2記事に渡って、生存時間分析について解説しました。 少しマイナーな分析手法ですが、生存時間に影響する変数を知ることができるため、とても有用です。 生存時間分析の有用性を知ってもらうことを優先したため、専門的な細かいことは省略しています。 正しく分析するためには、記事で紹介した以上の細かいことも考慮する必要があります。
Pythonで生存時間分析をする際は以下のライブラリが役に立ちます。 ご参考までに。
- lifelines lifelines.readthedocs.io
- scikit-survival scikit-survival.readthedocs.io
執筆
AIコンサルティンググループ
小川 裕也