R로 ROC 곡선 분석하기
- R
- 2024. 7. 25.
반응형
반응형
R로 ROC 곡선 분석하기
R에서도 머신러닝이 되는만큼 모델 평가 중 하나인 ROC 곡선 분석을 할 수 있습니다. pROC 패키지로 가능한데요. 다만, pROC패키지는 2진 분류만 가능합니다.
예제로 간단하게 iris 데이터를 이진분류를 한 후 ROC 곡선으로 평가해보겠습니다.
iris를 이용한 ROC 곡선 평가
먼저, iris는 세가지 클래스(setosa,versicolor,virginica)를 포함하고 있으므로, 두개의 클래스로 변환후 이진 분류를 수행합니다. roc는 0,1로 된 범주형 변수로 되어야 하므로 맞게 변환합니다.
# 필요한 패키지 로드
library(pROC)
# versicolor와 virginica만 선택
iris_binary <- subset(iris, Species %in% c("versicolor", "virginica"))
# Species를 이진형 변수로 변환
iris_binary$Species <- factor(iris_binary$Species, levels = c("versicolor", "virginica"))
# 0과 1로 변환
iris_binary$Species_binary <- as.numeric(iris_binary$Species) - 1
# 데이터 확인
head(iris_binary)
versicolor,virginica 으로 나누고 Species_binary에 0,1로 다시 표현했습니다.
이제 분류 모델인 로지스틱 회귀 모델을 이용하여 진행합니다.
# 로지스틱 회귀 모델 생성
model <- glm(Species ~ Petal.Length + Petal.Width, data = iris_binary, family = binomial)
# 모델 요약
summary(model)
Roc로 평가
# 예측
iris_binary$predicted_prob <- predict(model, type = "response")
# roc 함수 사용
roc_curve <- roc(response = iris_binary$Species_binary, predictor = iris_binary$predicted_prob)
# ROC 곡선 그리기
plot(roc_curve, col = "blue", main = "ROC Curve for Logistic Regression Model")
# AUC 값 출력
auc_value <- auc(roc_curve)
print(paste("AUC:", auc_value))
프롬프트에는 AUC가 나오고 오른쪽 하단 그림에는 아래와 같이 나옵니다.
AUC 가 1에 가까울수록 성능이 좋은 모델입니다. 현재 예제는 0.9972로 성능이 너무 좋습니다. 과대적합이 된 것 같긴 하다만 예제니까요. 분야마다 다르겠지만 보통 0.7~0.8정도 나오면 아주 훌륭한 모델이니 참고가 되셨으면 좋겠네요.
마치며
R로 ROC로 성능평가를 해봤습니다. 이진 분류만 가능한게 아쉽지만 코드가 아주 간편하니 활용해보시기 바랍니다.
함께 보면 좋은 글
'R' 카테고리의 다른 글
[R] 데이터 타입 변경하기 (0) | 2024.07.29 |
---|---|
R로 데이터 불러오기와 저장하기 (0) | 2024.07.26 |
세상 간단한 R로 웹 스크래핑하기 (0) | 2024.07.24 |
R studio 패키지 설치 오류 모음 (0) | 2024.07.20 |
R을 활용한 독립표본 t검정하기 (2) | 2024.07.18 |