1. AUROC(Area Under ROC Curve)
AUROC는 Area Under ROC(Receiver Operating Characteristic) Curve의 약어로, K-S통계량(자세한 설명은 K-S통계량 포스팅 참고)과 더불어 분류모델(Classificaiton Model)의 성능을 나타내는 주요 지표 중 하나입니다. AUROC는 어떤 이벤트가 발생할 확률에 따른 집단2의 누적구성비(X축)와 집단1의 누적구성비(Y축)가 그리는 그래프 아래쪽에 곡선형태의 면적을 의미하는데요(집단1: 이벤트 발생 집단, 집단2: 이벤트 미발생 집단). 말로 설명하니, 잘 와닿지 않는 것 같아요. 예를 들어 설명해 보도록 하겠습니다.
2. AUROC(Area Under ROC Curve) 산출하기
신용평가모형 역시 분류모델 중 하나입니다. 신용평점이 높을수록 신용도가 좋다는 의미이고, 반대로 신용평점이 낮을수록 신용도가 나쁘다는 의미입니다(이에 대한 쉽고 자세한 설명은 역시 K-S통계량 포스팅 참고하세요.)
신용평가모형이 좋은 성능을 보일려면, 신용평점이 낮은 구간에는 신용도가 안 좋은 고객(불량회원)이 많이 분포되어 있어야 합니다. 반대로 신용평점이 높은 구간에는 신용도가 좋은 고객(우량고객)이 많이 분포되어 있어야 합니다. 신용평점 기준 하위 5% 인 구간에는 우량회원 중에서 일부만 포함되고, 불량회원은 매우 많이 포함되어야 좋은 성능을 보입니다. 신용평점 하위 30%는 우량회원의 포함비율이 증가하고, 불량회원도 증가하게 되죠. 하위 100%면 모든 우량회원과 모든 불량회원이 포함됩니다. 이를 그림으로 그리면, 원의 1사분면 모양이 되고, 이 포물선이 좌측 상단으로 갈수록 모형의 성능은 올라가게 됩니다. 즉, 이 곡선의 아래면적이 커질수록 좋은 성능을 나타내는 모형이 됩니다.
3. AUROC 산출 실습
그럼 아래 첨부 파일과 R코드를 이용해서 실제 AUROC값을 산출해 보자.
위의 첨부 파일을 D드라이브에 저장하고, 실습을 진행하자.
install.packages("dplyr") # dplyr 패키지 설치 (실습 pc에 이미 패키지가 설치되어 있다면, 실행할 필요 없음)
library(dplyr) # dplyr 패키지 로딩
# D 드라이브에 있는 test.csv 파일을 auroc_test 에 저장
auroc_test <- read.csv("D:/test.csv")
# 데이터의 구조가 어떻게 이루어져 있는지 상위 6개 데이터만 출력
head(auroc_test)
# prob: 이벤트 발생(engine_type = 1) 확률 값
# engined_type : 이벤트 발생 여부 (집단1: 이벤트 발생 집단, 집단2: 이벤트 미발생 집단)
auroc <- auroc_test %>% # auroc_test 라는 데이터에 대해서
group_by(prob) %>% # 이벤트 발생 확률별
summarise(t1_cnt = sum(ifelse(engine_type == 1,1,0)), # 이벤트 발생 집단의 전체 수 산출
t2_cnt = sum(ifelse(engine_type == 0,1,0))) %>% # 이벤트 미발생 집단의 전체 수 산출하여
arrange(desc(prob)) # 이벤트 발생 확률에 따라 오른차순으로 정렬
tot_t1_cnt <- sum(auroc$t1_cnt) # 이벤트 발생 집단의 전체 수 저장
tot_t2_cnt <- sum(auroc$t2_cnt) # 이벤트 미발생 집단의 전체 수 저장
t1_cnt_pct <- auroc$t1_cnt / tot_t1_cnt # 이벤트 발생 확률별 이벤트 발생 비율(구성비) 산출
t2_cnt_pct <- auroc$t2_cnt / tot_t2_cnt # 이벤트 발생 확률별 이벤트 미발생 비율(구성비) 산출
cum_t1_cnt <- 0 # 이벤트 발생 누적 구성비 저장을 위한 변수 초기값 셋팅
cum_t2_cnt <- 0 # 이벤트 미발생 누적 구성비 저장을 위한 변수 초기값 셋팅
# 이벤트 발생 확률에 따른 이벤트 발생/미발생 누적 건수 산출
for(i in 1:nrow(auroc)){
if(i == 1){
cum_t1_cnt[i] <- auroc$t1_cnt[i]
cum_t2_cnt[i] <- auroc$t2_cnt[i]
}
else{
cum_t1_cnt[i] <- cum_t1_cnt[i-1] + auroc$t1_cnt[i]
cum_t2_cnt[i] <- cum_t2_cnt[i-1] + auroc$t2_cnt[i]
}
}
cum_t1_pct <- cum_t1_cnt / tot_t1_cnt # 이벤트 발생 확률별 이벤트 발생 누적비율(누적구성비) 산출
cum_t2_pct <- cum_t2_cnt / tot_t2_cnt # 이벤트 발생 확률별 이벤트 미발생 누적비율(누적구성비) 산출
# AUROC 산출
auroc <- sum(0.5 * t2_cnt_pct * t1_cnt_pct + (1 - cum_t2_pct) * t1_cnt_pct)
# 결과 확인
print(auroc)
=> 예제 수행 결과 분류모델(classification mode)의 AUROC는 0.9484127로 매우 높음을 알 수 있다.
'CSS(Credit Scoring System) > 신용평가모형 검증지표' 카테고리의 다른 글
[파이썬실습]신용평가 모형 검증(Information Value 산출하기) (0) | 2021.08.24 |
---|---|
[파이썬실습]신용평가 모형 검증(K-S 통계량 산출하기) (0) | 2021.08.23 |
[R실습]PSI 산출하기 (0) | 2021.07.07 |
[R실습]Information Value 산출하기 (0) | 2021.07.04 |
[R실습]K-S 통계량 산출하기 (0) | 2021.07.03 |
댓글