Другие распределения и выбор модели

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

Shae Wang

Senior Data Scientist

Какая модель лучше всего описывает данные?

4 кривые выживаемости для одних данных, построенные разными моделями

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

Выбор параметрических моделей

  • Непараметрическое моделирование (например, модель Каплана–Мейера)
    • Точно описывает данные, так как не зависит от распределения
    • Не является гладкой/непрерывной/дифференцируемой
  • Параметрическое моделирование (например, модель Вейбулла)
    • Как правило, даёт больше информации
    • При выборе неверной модели приводит к существенно смещённым выводам
Анализ выживаемости в Python

Распространённые параметрические модели выживаемости

  • Модель Вейбулла
    from lifelines import WeibullFitter
    
  • Экспоненциальная модель
    from lifelines import ExponentialFitter
    
  • Логнормальная модель
    from lifelines import LogNormalFitter
    
  • Логлогистическая модель
    from lifelines import LogLogisticFitter
    
  • Гамма-модель
    from lifelines import GeneralizedGammaFitter
    
Анализ выживаемости в Python

Информационный критерий Акаике (AIC)

  • AIC: оценка ошибки прогноза и относительного качества статистических моделей для заданного набора данных.
  • Оценивает относительный объём информации, теряемой моделью, и штрафует за большое число оцениваемых параметров.
    • Чем меньше информации теряет модель, тем выше её качество.
    • Чем меньше параметров (проще модель), тем выше её качество.
  • Из набора моделей-кандидатов предпочтительна та, у которой минимальное значение AIC.
Анализ выживаемости в Python

Использование AIC для выбора модели

Шаг 1) Обучите параметрические модели в lifelines

Шаг 2) Выведите и сравните свойство AIC_ каждой модели

Шаг 3) Предпочтительна модель с наименьшим значением AIC

from lifelines import WeibullFitter, 
                      ExponentialFitter, 
                      LogNormalFitter
wb = WeibullFitter().fit(D, E)
exp = ExponentialFitter().fit(D, E)
log = LogNormalFitter().fit(D, E)
print(wb.AIC_, exp.AIC_, log.AIC_)
215.9091   216.1183   202.3498
Анализ выживаемости в Python

find_best_parametric_model()

  • find_best_parametric_model(): встроенная функция lifelines для автоматического сравнения моделей по AIC.
  • Перебирает все параметрические модели, доступные в lifelines.

Как использовать?

  • T: длительности, E: цензурирование
    best_model, best_aic_ = find_best_parametric_model(event_times=T,
                                                       event_observed=E,
                                                       scoring_method="AIC")
    print(best_model)
    
<lifelines.WeibullFitter:"Weibull_estimate", 
fitted with 686 total observations, 387 right-censored observations>
Анализ выживаемости в Python

QQ-график

  • QQ-график: сравнивает два вероятностных распределения, отображая их квантили друг относительно друга.
  • Если распределения схожи, точки на QQ-графике располагаются приблизительно на прямой y = x.

пример QQ-графика

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

Использование QQ-графиков для выбора модели

Шаг 1) Обучите параметрические модели в lifelines.

Шаг 2) Постройте QQ-график для каждой модели.

Шаг 3) Предпочтительна модель с QQ-графиком, наиболее близким к y = x.

from lifelines.plotting import qq_plot

for model in [WeibullFitter(), LogNormalFitter(), LogLogisticFitter(), ExponentialFitter()]: model.fit(T, E) qq_plot(model)
plt.show()
Анализ выживаемости в Python

Использование QQ-графиков для выбора модели

QQ-график для сравнения моделей

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

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

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

Preparing Video For Download...