R로 ROC 곡선 분석하기

반응형
    반응형

    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 studio 패키지 설치 오류 모음

    R은 패키지 설치가 너무 어렵다R은 깔끔하게 코드를 작성할 수 있어 좋은데 호환성이 너무 안좋습니다. 조금만 엇나가면 바로 안됩니다. 힘드네요. 특히 패키지 설치로 애를 아주 많이 먹었습니

    seong6496.tistory.com

     

     

    [머신러닝] 지도학습 성능 평가방법 총정리

    머신러닝은 지도학습, 비지도 학습, 강화학습 등 다양한 모델이 있습니다. 학습방법에 따라 성능에 대한 고찰도 약간씩 달라집니다.  이번 포스팅에서는 지도학습 모델에서 자주 쓰는 평가방식

    seong6496.tistory.com

     

     

    [머신러닝] 혼동행렬(Confusion matrix)

    이전 포스팅에서 MNIST에서 이진 분류기를 만들어 보았는데 글이 길어지다 보니 검증에 대한 개념을 위한 포스팅을 따로 합니다. 이진 분류기를 만드는 과정과 검증방법은 이전 포스팅에서 확인

    seong6496.tistory.com

     

    댓글

    Designed by JB FACTORY

    ....