웹사이트 검색

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 곡선을 그릴 것입니다. 여기에서 데이터 세트를 찾을 수 있습니다!

  1. 처음에는 read.csv() 함수를 사용하여 환경에 데이터세트를 로드합니다.
  2. 데이터 세트의 분할은 모델링 이전의 중요한 단계입니다. 따라서 R 문서의 createDataPartition() 함수를 사용하여 데이터 세트를 교육 및 테스트 데이터 값으로 샘플링합니다.
  3. F1 점수, ROC 플롯 등을 포함하는 모델의 기능을 평가하기 위해 특정 오류 메트릭을 설정했습니다.
  4. 마지막으로 R glm() 함수를 사용하여 데이터 세트에 로지스틱 회귀를 적용합니다. 또한, predict() 함수를 사용하여 테스트 데이터에서 모델을 테스트하고 오류 메트릭 값을 가져옵니다.
  5. 마지막으로 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 플롯의 개념을 구현해 보고 의견 섹션에서 이해한 내용을 알려주십시오.

그때까지 계속 지켜봐주시고 행복한 학습하세요!! :)