R 프로그래밍에서 ROC 곡선 그리기
안녕하세요 여러분! 이 기사에서는 기계 학습의 중요한 오류 메트릭인 R 프로그래밍에서 ROC 곡선 플로팅에 대해 자세히 살펴보겠습니다.
그럼 시작하겠습니다!!
ROC 곡선의 필요성
오류 메트릭을 사용하면 특정 데이터 세트에서 모델의 기능을 평가하고 정당화할 수 있습니다.
ROC 플롯은 그러한 오류 메트릭 중 하나입니다.
ROC AUC 곡선이라고도 하는 ROC 플롯은 분류 오류 메트릭입니다. 즉, 분류 기계 학습 알고리즘의 기능과 결과를 측정합니다.
정확히 말하면 ROC 곡선은 값의 확률 곡선을 나타내는 반면 AUC는 서로 다른 값/레이블 그룹의 분리 가능성을 측정한 것입니다. ROC AUC 곡선
을 사용하면 레이블에 따라 올바르게 모델에 의해 구별되고 분류된 값의 양을 분석하고 결론을 도출할 수 있습니다.
AUC 점수가 높을수록 예측 값의 분류가 더 좋습니다.
예를 들어 던지기 결과가 '앞면'인지 '뒷면'인지 예측하고 분류하는 모델을 생각해 보십시오.
따라서 AUC 점수가 높으면 모델이 '앞면'을 '앞면'으로, '꼬리'를 '꼬리'로 더 효율적으로 분류할 수 있음을 나타냅니다.
기술적인 용어로 ROC 곡선은 모델의 True Positive Rate와 False Positive Rate 사이에 그려집니다.
이제 다음 섹션에서 ROC 곡선의 개념을 구현해 봅시다!
방법 I: plot() 함수 사용
앞에서 설명한 것처럼 ROC 플롯을 사용하여 기계 학습 모델을 평가할 수 있습니다. 따라서 로지스틱 회귀 모델에 대해 ROC 곡선의 개념을 구현해 보겠습니다.
시작하자!! :)
이 예에서는 로지스틱 회귀를 통한 모델링을 위해 Bank Loan defaulter 데이터 세트를 사용합니다. 우리는 'pROC' 라이브러리의 plot() 함수
를 사용하여 ROC 곡선을 그릴 것입니다. 여기에서 데이터 세트를 찾을 수 있습니다!
- 처음에는 read.csv() 함수를 사용하여 환경에 데이터세트를 로드합니다.
- 데이터 세트의 분할은 모델링 이전의 중요한 단계입니다. 따라서 R 문서의
createDataPartition() 함수
를 사용하여 데이터 세트를 교육 및 테스트 데이터 값으로 샘플링합니다. - F1 점수, ROC 플롯 등을 포함하는 모델의 기능을 평가하기 위해 특정 오류 메트릭을 설정했습니다.
- 마지막으로 R
glm() 함수
를 사용하여 데이터 세트에 로지스틱 회귀를 적용합니다. 또한, predict() 함수를 사용하여 테스트 데이터에서 모델을 테스트하고 오류 메트릭 값을 가져옵니다. - 마지막으로
roc() 메서드
를 통해 모델의 roc AUC 점수를 계산하고 'pROC' 라이브러리에서 사용할 수 있는 plot() 함수를 사용하여 동일하게 플롯합니다.
rm(list = ls())
#Setting the working directory
setwd("D:/Edwisor_Project - Loan_Defaulter/")
getwd()
#Load the dataset
dta = read.csv("bank-loan.csv",header=TRUE)
### Data SAMPLING ####
library(caret)
set.seed(101)
split = createDataPartition(data$default, p = 0.80, list = FALSE)
train_data = data[split,]
test_data = data[-split,]
#error metrics -- Confusion Matrix
err_metric=function(CM)
{
TN =CM[1,1]
TP =CM[2,2]
FP =CM[1,2]
FN =CM[2,1]
precision =(TP)/(TP+FP)
recall_score =(FP)/(FP+TN)
f1_score=2*((precision*recall_score)/(precision+recall_score))
accuracy_model =(TP+TN)/(TP+TN+FP+FN)
False_positive_rate =(FP)/(FP+TN)
False_negative_rate =(FN)/(FN+TP)
print(paste("Precision value of the model: ",round(precision,2)))
print(paste("Accuracy of the model: ",round(accuracy_model,2)))
print(paste("Recall value of the model: ",round(recall_score,2)))
print(paste("False Positive rate of the model: ",round(False_positive_rate,2)))
print(paste("False Negative rate of the model: ",round(False_negative_rate,2)))
print(paste("f1 score of the model: ",round(f1_score,2)))
}
# 1. Logistic regression
logit_m =glm(formula = default~. ,data =train_data ,family='binomial')
summary(logit_m)
logit_P = predict(logit_m , newdata = test_data[-13] ,type = 'response' )
logit_P <- ifelse(logit_P > 0.5,1,0) # Probability check
CM= table(test_data[,13] , logit_P)
print(CM)
err_metric(CM)
#ROC-curve using pROC library
library(pROC)
roc_score=roc(test_data[,13], logit_P) #AUC score
plot(roc_score ,main ="ROC curve -- Logistic Regression ")
산출:
방법 II: roc.plot() 함수 사용
R 프로그래밍은 모델의 ROC-AUC 곡선을 그리기 위해 '검증'이라는 또 다른 라이브러리를 제공합니다.
이 기능을 사용하려면 검증 라이브러리
를 설치하고 환경에 가져와야 합니다.
이를 완료한 후 아래와 같이 데이터 값의 '민감도'와 '특이도' 사이의 명확한 평가를 위해 roc.plot() 함수
를 사용하여 데이터를 플로팅합니다.
install.packages("verification")
library(verification)
x<- c(0,0,0,1,1,1)
y<- c(.7, .7, 0, 1,5,.6)
data<-data.frame(x,y)
names(data)<-c("yes","no")
roc.plot(data$yes, data$no)
산출:
결론
이상으로 이 주제를 마치겠습니다. 궁금한 점이 있으면 아래에 의견을 남겨주세요.
다른 기계 학습 모델로 ROC 플롯의 개념을 구현해 보고 의견 섹션에서 이해한 내용을 알려주십시오.
그때까지 계속 지켜봐주시고 행복한 학습하세요!! :)