Зачем нужен анализ выживаемости?

Анализ выживаемости в Python

Shae Wang

Senior Data Scientist

Пример: средний срок службы батареи

Имя DataFrame: battery_df

Battery ID Duration Dead Brand Truck
1 2.5 yrs No Brand A Long
2 6 yrs Yes Brand B Short
3 5 yrs No Brand B Long
... ... ... ... ...
1000 4.5 yrs Yes Brand A Short

Каков средний срок службы батареи?

np.average(battery_df["Duration"])
Анализ выживаемости в Python

Пример: средний срок службы батареи

Иллюстрация цензурирования данных о сроке службы батареи.

Анализ выживаемости в Python

Цензурирование в данных о сроке службы батарей

Иллюстрация цензурирования данных о сроке службы батареи.

  • $T_{duration} \neq T_{lifetime}$ для батарей, которые ещё не вышли из строя.
  • Батареи 1, 3, 4 и другие, отказ которых не наблюдался, учтены некорректно при вычислении среднего.
Анализ выживаемости в Python

Проблема цензурирования

Когда время выживания известно лишь частично.

Как возникает цензурирование?

  • Событие не наступило к концу периода наблюдения.
    • Например, пользователь бесплатного периода так и не перешёл на платный тариф к концу эксперимента.
  • Данные об участнике отсутствуют из-за выбывания или потери связи.
    • Например, пользователь бесплатного периода отказался предоставлять данные для эксперимента.
Анализ выживаемости в Python

Виды цензурирования

Иллюстрация видов цензурирования.

  • Без цензурирования: событие произошло, продолжительность выживания известна.
  • Правое цензурирование: продолжительность выживания превышает наблюдаемую.
  • Левое цензурирование: продолжительность выживания меньше наблюдаемой.
  • Интервальное цензурирование: продолжительность выживания находится в определённом диапазоне, но точно неизвестна.
Анализ выживаемости в Python

Чем опасно цензурирование?

Агрегированные статистики

  • Разновидность пропущенных данных.
  • Искажают статистики: np.average(), max(), min().

Регрессия

  • Линейная регрессия минимизирует сумму квадратов ошибок.
  • Для цензурированных данных члены ошибки неизвестны.
Анализ выживаемости в Python

Функция выживаемости

  • Не выполняет импутацию цензурированных данных.
  • Моделирует вероятность того, что продолжительность выживания превысит заданное значение.

  $$S(t)=Pr(T>t)$$

Анализ выживаемости в Python

Анализ выживаемости и цензурирование

Иллюстрация нецензурированных данных.

Иллюстрация цензурированных данных.

Анализ выживаемости в Python

Проверка данных на цензурирование

Можно ли определить, какие наблюдения цензурированы?

Шаг 1. Найдите столбцы с признаком цензурирования (часто уже предобработаны).

Не слишком ли много цензурированных данных?

Шаг 2. Проверьте долю цензурированных наблюдений (ориентир — 50%).

Является ли цензурирование неинформативным и случайным?

Шаг 3. Изучите причины цензурирования, чтобы убедиться, что факт цензурирования не влияет на выживаемость.

Анализ выживаемости в Python

Давайте потренируемся!

Анализ выживаемости в Python

Preparing Video For Download...