代表的な面接トピック

データサイエンス面接:打ち切りのあるイベント発生時間データをどう分析するか?

データ普通
Offer.cc 編集チーム公開日 更新日

質問

サブスクリプションチームが解約までの時間を把握したいと考えていますが、分析終了時点で多くのユーザーがアクティブなままです。アクティブユーザーを失敗(解約)として扱わずに、リテンションを推定しコホートを比較するにはどうすればよいですか?

プロンプトと設定

解約、再発、マシンの故障などのイベントが発生するまでの時間を分析しています。観測のカットオフ時点でまだアクティブなユーザーについては、正確なイベント発生時間は不明です。そのレコードは右側打ち切り(right-censored)であり、ゼロや失敗(イベント発生)ではありません。

面接官がテストするポイント

  • 観測時間とイベントインジケーターを正しく表現できるか。
  • Kaplan–Meierのリスクセットと、なぜ打ち切りによって対象者がその打ち切り時間以降にのみ除外されるのかを説明できるか。
  • Cox比例ハザードモデルや競合リスク分析が適切なタイミングを理解しているか。

回答前に確認すべき質問

  • イベントの定義、時間の起点、および分析上の観測カットオフは何ですか?
  • 観測された共変量を条件とした上で、打ち切りは将来のイベント時間と独立であると妥当に見なせますか?
  • アップグレードや死亡など、解約の発生を妨げる競合イベントはありますか?
  • 目的は記述的なリテンションの把握、コホート比較、または因果的処置効果の推定のどれですか?

30秒の回答フレームワーク

durationeventフラグを保持し、右側打ち切りされたユーザーを最終観測時間までリスクセットに残した上で、Kaplan–Meier生存曲線を推定します。事前に定めた推定量と信頼区間を用いて曲線を比較し、比例ハザード性の仮定を検証した後にのみCoxモデルを使用します。競合イベントによって「生存」の意味が変わる場合は、競合イベントを黙って打ち切るのではなく、原因別(cause-specific)ハザード分析または累積発生率(cumulative-incidence)分析を報告します。

ステップごとの詳細解説

1. 観測データをエンコードする

各対象者について、共通の起点からイベント発生または最終確認フォローアップまでの時間を記録し、イベントが発生した場合にのみevent = 1を付与します。30日目にアクティブなユーザーは30日目まで情報を寄与し、そこで打ち切られます。このレコードは30日目以降の解約を主張するものではありません。

2. Kaplan–Meier推定量を構築する

各イベント発生時間において、その直前のリスク集合数に対するイベント数の比率を1から引いて、生存割合を計算します。これらの条件付き割合を掛け合わせることで、階段状の生存推定値が得られます。打ち切られた観測値は以降のリスクセットのメンバー構成を変更しますが、イベントのステップ(低下)を生み出すことはありません。NISTは、完全データおよび打ち切りサンプルのためのこの積限界法(product-limit procedure)について記述しています。

3. 打ち切りの仮定を明示する

脱落したユーザーの将来のリスクが体系的に異なる場合、右側打ち切りは情報性打ち切り(informative)となります。分析の仮定のもとで(場合によっては測定された共変量を条件として)、打ち切りがイベント時間と独立である場合にKaplan–Meierは妥当です。コホート別および時間別に打ち切り率と理由を比較し、仮定が疑わしい場合は打ち切りの逆確率重み付け(IPCW)や感度シナリオを使用します。

4. コホートを慎重に比較する

30日または90日生存率、制限付き平均生存時間(RMST)、あるいは曲線が0.5に到達する場合にのみ中央値など、事前に指定した評価期間(ホライズン)を使用します。ログランク検定は曲線全体の広範な差異を強調するため、ハザードが交差している場合は誤解を招く可能性があります。p値だけを報告するのではなく、リスク集合数、信頼帯、および絶対差を提示します。

5. Cox回帰で共変量を追加する

Coxモデルは、比例ハザード性の仮定のもとでハザード比を推定します。時間依存効果と残差診断を確認してください。単一のハザード比は、生存確率の一定の差を意味するわけではありません。比例ハザード性が成り立たない場合は、時間との交互作用、層別化、加速故障時間(AFT)モデルを使用するか、特定のホライズンごとの効果を報告します。

質の高い回答例

「モデリングの前に、解約、起点、カットオフ、およびイベントフラグを定義します。アクティブユーザーは最終観測時点で右側打ち切りとなるため、その時点まで各リスクセットに留まります。リスク集合数と信頼区間を含むKaplan–Meier曲線をプロットし、30日および90日生存率や制限付き平均生存時間を報告し、打ち切り状況がコホートごとに異なっていないか点検します。比例ハザード性を確認した後にのみCox回帰を使用します。アップグレードによって解約が発生しなくなる場合は、単にフォローアップが終了したかのように打ち切るのではなく、競合イベントとして扱い累積発生率を報告します。」

よくある間違い

  • すべてのアクティブユーザーを失敗として記録する → リテンションが下方に偏る(過小評価される) → イベントインジケーターを使用し、最終フォローアップ時点で右側打ち切りにする。
  • 打ち切りユーザーを除外する → リスクセットに選択バイアスが生じる → 打ち切りまでの観測された寄与を保持する。
  • 曲線が到達しない中央値を報告する → 統計量が未定義となる → 固定ホライズンの推定値または制限付き平均生存時間を使用する。
  • Coxのハザード比を確率の比として解釈する → ハザードと生存確率は異なる → 具体的な評価時点(ホライズン)での効果に換算する。

追加質問と回答

打ち切られたユーザーは何を寄与しますか?

そのユーザーは人時間(person-time)を寄与し、打ち切り時間までリスクにさらされ続けます。その時間を過ぎると、分析上はイベントが発生したかどうかに関する観測情報は存在しません。

競合イベントを打ち切るべきではないのはどのような場合ですか?

アップグレードによって解約が恒久的に発生しなくなる場合、アップグレードを打ち切りとして処理すると解約確率を過大評価する可能性があります。病因論的な問いには原因別ハザードを、観測される各イベントの発生確率には累積発生関数を使用します。

ハザードが交差する場合はどうしますか?

ログランク検定や単一の比例ハザード比では、そのパターンが見えなくなる可能性があります。曲線をプロットし、制限付き平均生存時間や特定の評価時点ごとの差を報告し、時間依存効果をモデル化します。

公開情報ソース

関連する質問