1. ROC 곡선의 개념
1) ROC 곡선
- 정의: 식별 모델의 성능 평가 방법
- 유래: 제 2차 세계대전 때 수신된 레이더 신호에서 적 전투기를 찾으려는 미국의 레이더 연구에서 탄생한 개념으로 글자가 구성되어 수신자 조작 특성을 의미함
- 두 개의 범주를 가지고 있는 분류 모형의 성능을 평가하기 위해 쓰는 그래프
- 민감도(Sensitivity)와 특이도(Specificity)를 알아보는데 주로 사용
* 특징
- 신호감시이론의 한 분야
- 세계 2차 대전 당시, 레이더가 감지한 신호를 통해 적함/아군함/단순 잡음인지를 판별하는데 사용
- 레이더를 수신하는 수신기의 특성을 요약하여 보여준다는 점에서 착안하여 이름이 정해짐
- 1970년 이후, 의료와 금융 등 분류가 필요한 분야에 유용하게 사용
2) 민감도(Sensitivity)와 특이도(Specificity)
* 민감도
- 진양성율(True Positive Rate)
- 실제 양성의 수에서 예측 양성이 어느 정도 적합했는지를 보는 비율
- 실제로 양성인 샘플에서 양성이라고 판정된 샘플의 비율
* 특이도
- 진음성율(True Negative Rate)
- 실제에는 음성인 샘플에서 음성인 것으로 판정된 샘플의 비율
예측값 | |||
Positive | Negative | ||
실제값 | Positive | a | b |
Negative | c | d |
민감도: a / (a + b)
a | b |
특이도: d / (c + d)
c | d |
2. ROC 곡선의 사례와 활용
1) ROC 곡선 활용 및 적합도 판단 기준
* ROC 곡선의 활용
- 민감도와 특이도를 활용하여 그려짐
- 분류 모형의 적합도를 알 수 있음
-> 적합도는 곡선 아래의 면적(AUC: Area Under Curve)으로 판단
-> 1에 가까울수록 좋은 모형
- 여러 개의 분류 모형 중 가장 좋은 모형을 선택하는 기준으로 활용됨
-> 곡선 아래의 면적을 선택 기준으로, 면적이 가장 넓은 모형을 채택하는 것이 바람직함.
* 적합도 판단 기준
- 곡선이 Y축(민감도) = 1.0 부분에서 직각으로 꺾이는 형태가 면적이 1에 가까울수록 적합도가 좋다고 판단
- AUC 판단 기준
AUC 판단 기준 | |
0.9 ~ 1 | Excellent(A) |
0.8 ~ 0.9 | Good(B) |
0.7 ~ 0.8 | Fair(C) |
0.6 ~ 0.7 | Poor(D) |
0.5 ~ 0.6 | Fail(F) |
- ROC 곡선은 Cut-off Point(곡선의 증가율이 가장 큰 지점, 조사목적을 위하여 데이터가 충분히 얻어졌을 때, 어떤 점에서 추출 과정을 인위적으로 절단하는 지점)를 찾는 데에도 활용이 가능함
2) ROC 곡선의 활용 사례
* (예시) 신용등급 분류 모델 성능 평가
신용등급 | 정상 | 부도 |
4등급 이하 | 22 | 3 |
5 ~ 6등급 | 8 | 14 |
7 ~ 8등급 | 5 | 28 |
9등급 이상 | 4 | 32 |
전체 | 39 | 77 |
=> 대출 대상을 5등급 이하의 고객으로 제한할 경우, 전체 정상 고객 중 4등급 이상 고객의 비율
True Positive = 0.56 (22/39)
같은 방식으로 Cut-Off Point 계산
Cut-Off Point | True Positives | False Positives |
5등급 | 0.56 | 0.04 |
7등급 | 0.77 | 0.22 |
9등급 | 0.90 | 0.58 |
- ROC 곡선이 Y축 꼭지점에 근접할수록 평가모형이 우수함
3. R을 이용한 ROC 곡선 기법 이용 분류 모델 성능 평가
* Import
# ROC 곡선 생성 및 분류 모델 형성을 위한 패키지 설치
install.packages('ROSE')
install.packages('DMwR')
library(ROSE) # data
library(DMwR) # 데이터 마이닝을 도와주는 패키지(ex: 결측값 대치)
library(rpart)
# R 제공 데이터 hacide 사용(ROSE안에 있는 데이터)
data(hacide)
# 데이터 속성 확인
str(hacide.train)
# 1000개 데이터, 3개의 변수(cls, x1, x2)
# cls: 2개의 factor
# x1, x2: num 변수
# 타겟 변수 분포 확인
table(hacide.train$cls)
# 타겟 변수 분포 비율 확인
prop.table(table(hacide.train$cls))
# 의사결정나무 생성 후 정확도 산출(분류모델 생성)
tree = rpart(cls ~., data = hacide.train)
pred.tree = predict(tree, newdata = hacide.test)
accuracy.meas(hacide.test$cls, pred.tree[, 2])
# precision: 정밀도
# recall: 재현율
# F 통계량
# ROC 곡선을 통한 분류 모델 정확도 측정
roc.curve(hacide.test$cls, pred.tree[, 2], plotit=T)
# 가로축: 특이도
# 세로축: 민감도
# AUC: 0.6 -> 본 모형의 적합도는 판단 기준에 의해 안 좋음
# -> 그래프 역시 낮은 Y축 cut point를 보이며 그래프를 통한 모형 적합도 역시 낮은 것으로 나타남
'프로그래밍' 카테고리의 다른 글
[Big Data] 빅데이터 모델 운영시스템 및 생명 주기 (0) | 2021.06.06 |
---|---|
[R] 내부 평가를 이용한 분류 모델 성능 평가 (0) | 2021.06.05 |
[R] Confusion Matrix를 통한 분류 모델 성능 평가 (0) | 2021.06.05 |
[R] 교차 유효성 검사를 통한 예측 모델 성능 평가 (0) | 2021.06.05 |
[Hive] MySQL 설치 - Hive 연동 (0) | 2021.06.04 |