Подгонка модели Вейбулла

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

Shae Wang

Senior Data Scientist

Вероятностные распределения

Вероятностное распределение

Математическая функция, описывающая вероятность различных исходов события.

нормальное распределение

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

Вероятностные распределения

Вероятностное распределение

Математическая функция, описывающая вероятность различных исходов события.

равномерное распределение

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

Знакомство с распределением Вейбулла

Распределение Вейбулла

Непрерывное вероятностное распределение, хорошо описывающее данные о времени до наступления события (изначально применялось для моделирования распределения размеров частиц).

Функция плотности вероятности Вейбулла

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k}$$ $$x\geq0,k>0,\lambda>0$$

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

Знакомство с распределением Вейбулла

$k$

Определяет форму

varying_k

$\lambda$

Определяет масштаб

varying_lambda

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

Подгонка распределения Вейбулла к данным

Компания эксплуатирует парк машин, склонных к поломкам...

гистограмма отказов оборудования

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

Подгонка распределения Вейбулла к данным

Компания эксплуатирует парк машин, склонных к поломкам...

распределение Вейбулла для отказов оборудования

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

От распределения Вейбулла к функции выживания

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k} \quad\rightarrow\quad\qquad\qquad S(t)=e^{-(t/\lambda)^\rho}$$

от распределения Вейбулла к функции выживания

$\rho$ — то же, что k

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

Параметры: k и lambda

k и $\lambda$
  • k (или $\rho$): определяет форму
  • $\lambda$: определяет масштаб (показывает, когда 63,2% популяции испытали событие)

$$f(x;\lambda,k)=\frac{k}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^{k-1}e^{-(x/\lambda)^k} \quad\rightarrow\quad f(x;\lambda,k=3)=\frac{3}{\lambda}\bigg(\frac{x}{\lambda}\bigg)^2e^{-(x/\lambda)^3}$$

  • Распределение Вейбулла: интенсивность отказов/событий пропорциональна степени времени.
Анализ выживаемости в Python

Интерпретация k (или $\rho$)

k<1, интенсивность событий убывает

  • При $k<1$ интенсивность отказов/событий убывает со временем.
Анализ выживаемости в Python

Интерпретация k (или $\rho$)

k=1, интенсивность событий постоянна

  • При $k=1$ интенсивность отказов/событий постоянна во времени.
Анализ выживаемости в Python

Интерпретация k (или $\rho$)

k>1, интенсивность событий возрастает

  • При $k>1$ интенсивность отказов/событий возрастает со временем.
Анализ выживаемости в Python

Анализ выживаемости с распределением Вейбулла

  1. Импортируйте класс WeibullFitter
    from lifelines import WeibullFitter
    
  2. Создайте экземпляр класса WeibullFitter
    wb = WeibullFitter()
    
  3. Вызовите .fit(), чтобы подогнать оценщик к данным
    wb.fit(durations, event_observed)
    
  4. Используйте .survival_function_, .lambda_, .rho_, .summary, .predict()
Анализ выживаемости в Python

Пример модели Вейбулла

Название DataFrame: mortgage_df

id duration paid_off
1 25 0
2 17 1
3 5 0
... ... ...
1000 30 1
from lifelines import WeibullFitter
wb = WeibullFitter()
wb.fit(durations=mortgage_df["duration"],
       event_observed=mortgage_df["paid_off"])
Анализ выживаемости в Python

Пример модели Вейбулла

wb.survival_function_.plot()
plt.show()

пример кривой выживания Вейбулла

print(wb.lambda_, wb.rho_)
6.11  0.94
print(wb.predict(20))
0.05
Анализ выживаемости в Python

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

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

Preparing Video For Download...