[AI] ROC곡선

2026. 3. 1. 17:37·AI/Machine Learning
반응형

들어가며

이번 글에서는 저번 글에서 나왔던 정밀도/재현율 곡선과 비슷한 개념인 ROC곡선에 대해 알아볼 것이다

ROC곡선도 이진 분류에서 자주 사용되는 도구이다

정밀도/재현율 곡선(PR)과 적절한 임계값을 찾는것이 목표라는 점은 비슷하지만

정밀도에 대한 재현율 곡선이 아닌 거짓 양성 비율에 대한 진짜 양성 비율(재현율)의 곡선을 의미한다

PR과 함께 적절한 임계값을 선택할 때 참고하는 또 다른 도구라고 생각하면된다

 

ROC곡선

ROC곡선은 거짓 양성 비율에 대한 진짜 양성 비율(재현율)의 곡선을 말한다

거짓 양성 비율(FPR)은 양성으로 잘못 분류된 음성 비율의 샘플을 의미한다

이 비율은 1에서 진짜 음성 비율(TNR)을 뺀 값과도 같다

TNR을 다른 말로 특이도라고도 불러서 FPR을 1-특이도라고도 한다

 

사이킷런에서 roc_cerve()함수를 사용하면 여러 임계값에서 FPR과 TPR(재현율)을 계산해준다

이를 바탕으로 ROC곡선 그래프를 그리면 아래와 같다

이 곡선에도 PR과 마찬가지로 트레이드오프 현상이 나타난다

TPR(재현율)이 높을수록 거짓 양성 비율이 늘어난다

둘 다 늘어나는게 트레이드오프인가? 라는 의문이 들 수 있지만 

FPR은 낮을수록 좋은것이므로 높아지게되면 FPR이 희생되는 구조이므로

본질적으로 보았을 때 트레이드오프라고 볼 수 있다

 

또한 중간에 y=x처럼 보이는 곡선을 볼 수 있을 것이다

이 곡선은 랜덤 분류기의 ROC 곡선을 의미하고 랜덤 분류기는 말그대로 랜덤으로 분류하는 것으로

양성을 맞추는 정도와 음성을 양성이라고 맞추는 정도가 똑같다

즉 FPR=TPR이고 그러므로 ROC곡선이 y=x 형태가 나오게되는 것이다

 

그래프에서 알 수 있는 또 다른 정보는 곡선 아래의 면적(AUC)이다

완벽한 분류기는 ROC의 AUC가 1이다

완벽한 분류기란 FPR=0이고 TPR=1인 상태에 도달한 y=1 형태의 분류기를 의미한다

위의 ROC곡선의 면적을 사이킷런으로 계산해보면 아래와 같다

from sklearn.metrics import roc_auc_score

roc_auc_score(y_train_5, y_scores)
-> 0.9604938554008616

거의 완벽한 분류기에 근접한 AUC가 나온 것을 볼 수 있다

 

좋은 분류기일수록 ROC곡선에서 왼쪽 위로 붙게된다

반면 PR에서는 오른쪽 위로 붙게된다 

 

ROC곡선 / PR곡선 선택

ROC곡선과 PR곡선이 비슷한 느낌이여서 어떤 것을 사용해야 할지 궁금할 수 있다

일반적으로 양성 클래스가 드물거나 거짓 음성보다 거짓 양성이 더 중요할 때 PR곡선을 사용하고

그렇지 않으면 ROC곡선을 사용한다

 

예를 들어 거짓 음성보다 거짓 양성이 중요한 경우는 스팸 필터를 분류하는 경우가 있고

거짓 음성이 거짓 양성보다 중요한 경우는 암 진단 판정을 분류하는 경우가 있다

 

마치며

이번 글에서는 ROC곡선에 개념과 ROC와 PR중 어떤 것을 선택해야 할지에 대하여 알아보았다

상황에 맞게 적절한 지표와 곡선을 사용하여 어떤 모델을 선택할 지 판단하는 것이 중요하다고 생각했다

ROC곡선과 PR곡선에 대해 공부해보면서 오차행렬이라는 하나의 정보에서

엄청나게 많은 지표들과 또 다른 정보들이 파생될 수 있다는 것이 복잡하지만 이해할 수록 신기하고

한편으로는 무서운 느낌도 들었다 만약 나중에 어떤 만족스럽지 못한 결과를 도출해냈는데 

그게 어떤 원인으로 인한 건지 밝히려면 굉장히 오래 걸릴 것 같다는 생각이 들어서였다

공부에는 끝이 없다는 생각이 다시 한 번 들었다

반응형

'AI > Machine Learning' 카테고리의 다른 글

[AI] 오차 행렬을 통한 오류 분석  (1) 2026.03.02
[AI] 다중 분류(multiclass classifier)  (0) 2026.03.02
[AI] 정밀도/재현율 트레이드오프  (1) 2026.02.28
[AI] 오차 행렬(Confusion Matrix)과 정밀도(Precision), 재현율(Recall)  (1) 2026.02.28
[AI] 그리드 서치(Grid Search), 랜덤 서치(Random Search)  (1) 2026.02.08
'AI/Machine Learning' 카테고리의 다른 글
  • [AI] 오차 행렬을 통한 오류 분석
  • [AI] 다중 분류(multiclass classifier)
  • [AI] 정밀도/재현율 트레이드오프
  • [AI] 오차 행렬(Confusion Matrix)과 정밀도(Precision), 재현율(Recall)
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    인공지능
    백준
    머신러닝
    오프라인 학습
    Spring Boot
    ML
    딥러닝
    그레디언트 클리핑
    주성분변환
    게시판
    list
    AI
    연결리스트
    DL
    github
    Java
    홀드아웃 검증
    알고리즘
    Aimers
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[AI] ROC곡선
상단으로

티스토리툴바