본문 바로가기
데이터 분석/통계, 분석기법

생존분석(Survival Analysis) : Kaplan-Meier / Cox Proportional Hazard / BYTD

by 장찐 2021. 11. 15.

◈ 개념  

 

• 종속변수 : 특정 이벤트가 발생할 때, 발생하기까지 걸린 시간 

• non-parametric / semi-parametric 으로 구분됨 → 모수적 방법이 훨씬 좋으나, 현실적으로 한계가 있기 때문에 비모수적 방법 사용함 

• Death의 경우 죽었는지를 확인할 수 있지만, Survival의 경우 언제 죽는지 알 수 없다 (분석 기간 후에 사망할 수도) 

 

✅ 사용 분야 

: 원래 의학 분야에서 개발됐지만, 경영학에서도 고객 이탈 분석에서 사용됨 

 

Acquisition Analytics : 사용자 획득 단계 분석 

• 최소 비용으로 최대의 마케팅 효•율 내는 광고 채널 선택 

 

Experience Analytics : 인앱에서 행동 분석 

• 앱 설치 직후 행태 분석 → 지속 사용 유저 파악 

• 로그인 유저와 비 로그인 유저 행동패턴 파악 / 성별에 따른 차이 파악 / 언제 Exit ? 

 

Conversion Analytics : 최종 목적 달성 여부 분석 

• Purchase, Download, Ads conversion 

 

 

✅ Censoring Issue 

•Obs4는 관측 기간동안은 살아있다가 이후에 사망함 → Right Censoring 되었다고 표현 

•마찬가지로 Obs5도 관측 기간을 훨씬 지나서 사망함. 하지만 이 분석 결과에서는 4,5 모두 생존했다고 분석하게 됨 

•Obs6의 경우 화살표 시점까지는 생존했다는걸 알지만, 그 이후로는 어떤 이유에 의해서 관측하지 못한 경우 

 


 

✅ Kaplan-Meier Model 

•파라미터가 없는 non-parametric 모델.

•그룹간 비교에 사용(treatment vs control). 결과가 직관적임 

•그룹 간 비교를 위해서 매칭을 실시하거나, 각 그룹에서 변수의 비율을 일정하게 유지해야함 → 그룹 간의 homogeneity 확보 

설명 변수가 discrete 변수이어야함 (continuous 변수는 사용 불가) 

 

 

• C, V의 경우 Censored Data 로, 관측 기간내에 생존하거나 정확하게 관측을 못 한 경우 

• 두 개의 그룹이 있고, 해당 기간 내에서 몇 년째에 이벤트가 발생하면 1 로, 관측이 안 되면  0으로 나타냄. 이를 그림으로 나타내면 아래와 같음 : Kaplan-Meier Curve  (y축 : 생존률, x축 : 시간) 

 

<Kaplan-Meier Curve> 

• 각 참여자들에 대해서 이벤트가 발생한 기간에 따라서 drop이 발생함 (serial time 열과 연결해서 살펴보면 됨) 

• Censored Data(C, V)는 point로 표현 됨 

 

• Group1 보다 Group 2 가 관측 기간 내에 생존률이 빠르게 줄어드는 것을 확인할 수 있음. KM 커브에서 보통 위쪽에 있으면 생존률이 높다고 볼 수 있다. 하지만 정확하게는 통계 검증을 해야하지만 비모수적 방식이어서 통계 검정이 어려움. 

 

• 통계 검정이 어렵지만, 임시 방편으로 psedo confidence level등을 만들어서 검정 실시함 (이 방식이 인기가 많기 때문에, 조금 더 설명력 있는 모델을 만들기 위해서 추가했다고 보면 됨) 

 

 


 

✅ Cox Proportional Hazard Model 

• Semi-Parametric한 모델 (가정사항이 있음) 

• KM 모델과는 다르게 continous 변수도 설명변수로 사용이 가능함 

•람다0 : Baseline Hazard 

•람다0일 때 대비, 위험률이 어떻게 되는지 파악하는 것 

 

•가정 : 

•람다 / 람다0의 값이 time constant 해야함 

 


✅ Buy Till you Die (BTYD) 모델 

• Fully Parametric 모델 (vs. Survival 모델) 

• 고객들의 non-contractual 구매 행동을 파악하기 위해 사용. 고객들이 inactive 하기 전까지 얼마나 구매하는지 분석 

 • 어떤 관계를 묘사하는 parametric한 모델을 개발하면, 그 모델은 flexible 하게 표현할 수 있어야 함. 즉 파마리터 값에 따라서 다양한 분포를 설명할 수 있어야 한다 → 대표적인 예시가 Pareto NBC, 지수 분포 등 

• flexible function 의 여러 종류 중에 하나가 BTYD 모델이다. 

• CLV : Customer Lifetime Value 

• DET  : Recency와 Frequency 기반으로 계산. 향후에 얼마나 거래를 할 지를 최대한 flexible한 형태로 계산하는 것. 

 

 


 

◈ 실습 

 

KM 모델 

## Load lung cancer data
library(survival)
data(cancer)

## status == 2 이 죽은 경우를 나타냄 
#생존 분석을 위해서 Survival Object 생성 : +라고 붙는 변수는 censor된 데이터임 
cancer$SurvObj <- with(cancer, Surv(time, status == 2))
head(cancer)

attach(cancer)

#Kaplan-Meier estimator without grouping
## Kaplan-Meier estimator. The "log-log" confidence interval is preferred.
km.as.one <- survfit(SurvObj ~ 1, data = cancer, conf.type = "log-log")
km.as.one

• 생존 분석을 위해서는 survival object 를 생성해야 함 

• events : 해당 이벤트가 발생한 횟수 

• median : death한 사람들이 death 까지 걸린 시간 

 

 

<성별에 따른 차이 확인> 

#성별에 따른 차이 확인 
km.by.sex <- survfit(SurvObj ~ sex, data = cancer, conf.type = "log-log")
km.by.sex

•  male =1, female = 2 나타냄. 단순 비율로는 여성의 생존률이 더 높고, 살아남은 기간(median)도 높게 나타났지만, 통제 변수가 빠져있음. 남성vs여성의 차이만으로 이러한 결과가 나타나는지 확인할 수 없음. 

 

 

Kaplan-Meier Curve 그리기 

plot(km.by.sex, conf.int = T, lty=c(1,3), main="Kaplan-Meier estimate", xlab="time", ylab="survival function")
legend(800, 1.0, c("Male", "Female") , lty=c(1,3) )

•  Pseudo Confidence Level의 Overlap이 있는 경우 차이가 유의할 수도/아닐수도 있다. overlap 없는 경우 차이 유의하다고 볼 수 있음 

• time = 500 근처에서는 CI의 overlap 이 있으므로 별도로 분석이 필요하다. 

• 그래프로 봤을 때, 결과과 굉장히 직관적임을 알 수 있음. 즉, 두 그룹의 homogeneity만 유지되면 어느 그룹의 생존률이 더 나은지 확인할 수 있음 

• KM 모델은 방법론적으로 나이, 혈압 등의 연속형 변수를 통제변수로 사용할 수 없음. 사전에 매칭을 이용해서 차이를 없애고 KM 모델을 적용해야 함. 

 

 

✅ COX 모델 

## Fit Cox regression: age, sex, Karnofsky performance score, wt loss
res.cox1 <- coxph(SurvObj ~ age + sex + ph.karno + wt.loss, data = cancer)
res.cox1

• ph.karno : 신체의 퍼포먼스를 나타내는 인덱스 중 하나 

• regression 처럼 결과가 나타남 

• age가 1살 많을수록 hazard가 1.0152 증가함, p값을 살펴본 결과 유의한 변수는 아님 

• 남성=1 이기 때문에, 남성일 경우, hazard가 0.5981 증가함, p값을 살펴본 결과 유의한 변수 

 

 

 

✅ COX 모델 가정사항 확인 : time constant

## Check for violation of proportional hazard (constant HR over time)
res.zph1 <- cox.zph(res.cox1)
res.zph1

## Displays a graph of the scaled Schoenfeld residuals, along with a smooth curve.
plot(res.zph1)

 

•아래의 p값을 통해서 확인 가능 : 너무 낮으면 가정사항 위반 가능성 높음 (0.05보다 크면 violation 없다고 해석) 

•but, 데이터의 수가 많은 경우 그래프를 보고 time에 따라서 일정하게 parallel 하게 나타나면 그냥 넘어가도 됨 

•ph.karno의 경우 판단이 애매함 --> stratify 방법 등을 사용할 수 있음 

 

 

< 실제 사례 : 교수님 논문> 

 

• p 값이 0.05보다 크더라도, 시각화 했을 때 아래와 같이 일정하게 나타났으므로 가정사항 만족했다고 봄 

 

댓글