왜 생존 분석을 사용할까요?

Python에서의 Survival Analysis

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에서의 Survival Analysis

배터리 평균 수명 예시

배터리 수명 검열 만화.

Python에서의 Survival Analysis

배터리 수명의 검열

배터리 수명 검열 만화.

  • 죽지 않은 배터리에는 $T_{duration} \neq T_{lifetime}$ 입니다.
  • 1, 3, 4번 등 고장이 관측되지 않은 배터리는 평균 계산에 부적절히 반영됩니다.
Python에서의 Survival Analysis

검열 문제

생존 시간이 부분적으로만 알려진 경우입니다.

검열은 어떻게 발생하나요?

  • 관측 종료 시점까지 사건이 아직 발생하지 않음.
    • 예: 무료 체험 사용자가 실험 종료 시 유료 전환하지 않음.
  • 이탈 또는 연락 두절로 개인의 데이터가 누락됨.
    • 예: 무료 체험 사용자가 실험 데이터 제공을 거부함.
Python에서의 Survival Analysis

검열의 유형

검열 유형 만화.

  • 비검열: 사건이 발생했고 생존 기간을 앎.
  • 우측 검열: 생존 기간이 관측 기간보다 김.
  • 좌측 검열: 생존 기간이 관측 기간보다 짧음.
  • 구간 검열: 생존 기간이 어떤 범위 내에 있으나 정확히는 모름.
Python에서의 Survival Analysis

검열이 왜 문제인가요?

집계 통계

  • 결측치의 한 형태입니다.
  • np.average(), max(), min() 등의 통계를 왜곡합니다.

회귀

  • 선형회귀선은 제곱오차 합을 최소화합니다.
  • 검열 자료는 오차항을 알 수 없습니다.
Python에서의 Survival Analysis

생존함수

  • 검열 데이터를 대체(impute)하지 않습니다.
  • 생존 기간이 어떤 값보다 클 확률을 모델링합니다.

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

Python에서의 Survival Analysis

생존 분석 vs. 검열

비검열 데이터 만화.

검열 데이터 만화.

Python에서의 Survival Analysis

데이터의 검열 점검

어떤 데이터가 검열되었는지 식별할 수 있나요?

1단계) 검열 여부 컬럼이 있는지 확인합니다(종종 전처리됨).

검열된 데이터가 너무 많나요?

2단계) 검열 데이터 비율을 확인합니다(경험칙: 50%).

검열이 비정보성이고 무작위인가요?

3단계) 검열 원인을 조사해, 검열 여부가 생존에 영향이 없음을 확인합니다.

Python에서의 Survival Analysis

연습해 봅시다!

Python에서의 Survival Analysis

Preparing Video For Download...