Survival analysis на собеседовании Data Scientist

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

Survival analysis — мощная техника для time-to-event задач. На собесе DS: «churn prediction», «censored data», «Kaplan-Meier».

Censored data

Главный challenge survival analysis. Когда event не произошёл (ещё) на момент observation.

Right-censored. Самый частый. Subject closed observation до event.

User signed up Jan 1, observed until June 30.
- Event (churn) happened Mar 15 → uncensored, time = 73 days.
- No churn until June 30 → censored, time = 180 days (event может быть позже).

Считать censored как event = error. Cтандартная regression / classification искажена.

Kaplan-Meier curve

Non-parametric estimate survival function S(t) = P(time > t).

Алгоритм.

  1. Sort events by time.
  2. На каждом event time:
    • n = at-risk (alive до этого момента).
    • d = events at этом времени.
    • S(t) = S(t-1) × (1 - d/n).
  3. Censored — exit risk set без event.
from lifelines import KaplanMeierFitter

kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed)
kmf.plot_survival_function()

Использование.

  • Сравнение survival между groups (treatment vs control).
  • Median survival time.
  • Confidence intervals.

Hazard function

h(t) = lim_dt→0 P(t ≤ T < t+dt | T ≥ t) / dt

«Мгновенная вероятность event на момент t, given survived until t».

S(t) = exp(-∫₀ᵗ h(u) du)

Hazard и survival связаны.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Cox proportional hazards

Regression для survival.

h(t | x) = h_0(t) · exp(β_1 x_1 + β_2 x_2 + ...)

h_0(t) — baseline hazard (не parametric).

Hazard ratio — exp(β):

  • HR > 1: feature increases hazard (бад).
  • HR = 1: no effect.
  • HR < 1: protective.
from lifelines import CoxPHFitter

cph = CoxPHFitter()
cph.fit(df, duration_col='time', event_col='event')
print(cph.summary)

Assumption: proportional hazards. Hazard ratio constant over time. Если нарушено — time-varying coefficients.

Применения в индустрии

Churn prediction. Time to churn, не binary churn-or-not. Censored = users still active.

Customer lifetime. Когда юзер закроет account.

Equipment failure. Предсказание времени до поломки.

Conversion. Time to purchase в funnel analysis.

Retention curves. Day-1, Day-7, Day-30 retention — это survival.

Связанные темы

FAQ

Survival для recsys?

Можно — time to next click / purchase. Cox / DeepSurv для predicting timing.

Это официальная информация?

Нет. Статья основана на классике (Kaplan-Meier 1958, Cox 1972), документации lifelines.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.