파이썬 사이킷런(sklearn) 패키지에서 ROC곡선 쉽게 그리는 방법!

2019. 10. 23. 06:34

ROC곡선은 receiver operating characteristic의 약자로 y축에는 재현율, x축에는 특이도를 축으로 그리는 그래프이다. 모델을 평가하기 위해선 많이 사용하는 그래프 중의 하나이다. 하지만 파이썬의 사이킷런(scikit-learn) 패키지에는 해당 그래프를 그리는 모듈이 없다.

오늘은 파이썬 싸이킷런 패키지에서 ROC곡선을 쉽게 그리는 방법에 대해서 알아보도록 하겠다.


ROC곡선



ROC Curve를 잠깐 짚고 넘어가자.


그리는 방법을 알아보기 전에 잠깐 ROC Curve에 대해서 알아보고 가자. ROC곡선은 y축에는 재현율을, x축에는 특이도를 축으로 하는 그래프이다. 컷오프에 따른 값들을 찍으면 되겠다. 재현율은 실제 1을 1이라고 예측한 비율을 말한다. 특이도는 실제 0을 0이라고 예측한 비율이다. 판다스 데이터프레임에서 축을 지정할 때 행은 0, 열은 1로 하는데 그 반대로 생각하면 기억하기 좋을 듯 하다.


두 숫자 모두 높으면 좋겠지만, 두 숫자는 약간의 트레이드 오프(trade-off)가 있다. 예를 들어 모든 값을 1이라고 예측하면 재현율은 1이 된다. 실제 1인 값을 모두 1이라고 예측했기 때문이다. 하지만, 특이도는 0이 된다. 실제 0을 모두 1이라고 예측했기 때문이다.


예측을 랜덤하게 하면 우상향의 직선 그래프가 나오고, 모델을 활용하면 이 직선을 기준으로 좌측으로 볼록한 그래프가 된다. 이 볼록한 부분이 많을수록 모형의 성능이 좋은 것이다. 이 볼록한 면적을 AUC(Area Under Curve)라고 한다.



ROC Curve를 쉽게 그리는 방법은?


사이킷런에서 이 기능을 제공하고 있지 않기 때문에, ROC Curve를 그리려면 좀 복잡하다. 다행히 yellow brick이라는 패키지에서 ROC Curver를 쉽게 그릴 수 있다. yellow brick은 머신러닝의 시각화를 지원해주는 패키지이다. 여러가지 값을 비교하고 평가를 할 때 시각화를 통해서 좀 더 빠르고 쉽게 할 수 있도록 지원해 주는 것이다.


이 패키지는 아나콘다 배포판에 포함되어 있지 않다. 장기적으로 포함되지 않을까 한다. 현재는 yellow brick패키지를 별도로 설치해줘야 한다. pip install yellowbrick이라고 실행하면 쉽게 설치할 수 있다.
( 참조: 파이썬(python) - 아나콘다(anaconda) 배포판 설치하기파이썬 패키지 설치하기(numpy 예시) )


사용방법은 간단한다. ROCAUC모듈을 사용하면 된다. 먼저 모델을 만들고 모델의 fit함수를 실행하여 학습을 한다. 다음 ROCAUC객체를 만들고, 이 객체로 fit를 한다. 그러면 ROC곡선을 그리고, AUC값을 알 수 있다. score함수에서 값을 그리고, show함수에서 레전드를 그린다. 코드를 정리해보면 아래와 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
 
    from xgboost import XGBClassifier
    from yellowbrick.classifier import ROCAUC
 
 
    xgb_basic = XGBClassifier()
    xgb_basic.fit(X_train, df["y"])
 
    visualizer = ROCAUC(xgb_basic, classes=[01], micro=False, macro=True, per_class=False)
    visualizer.fit(X_train, df["y"])
    visualizer.score(X_train, df["y"])
    visualizer.show()
 
cs



위 코드를 실행하면 아래와 같이 ROC곡선을 얻을 수 있다.


ROC_Curve



yellow brick에 대해서 더 자세히 알고 싶다면, 아래 홈페이지를 참조해보자.
( 참조: yellow brick 홈페이지 바로가기 )



오늘은 이렇게 파이썬 사이킷런 패키지에서 ROC곡선을 쉽게 그리는 방법에 대해서 알아보았다. 사이킷런 패키지에서는 해당 기능을 제공하고 있지 않지만, yellow brick이라는 패키지를 통해서 쉽게 그릴 수 있었다. 시각화로 모델을 만들고 분석을 한다는 것은 재미있는 일이다. 다음에는 yellow brick에 대해서 좀 더 알아보도록 하자.


몇 가지 팁이나 방법을 알면 파이썬을 더 효율적으로 코딩할 수 있는 방법들이 있다. 자세한 내용이 궁금하다면, 아래 링크를 참조해보자.
( 참조: 파이썬 효율적인 코딩팁과 방법들 )


파이썬을 직접 활용하는 것만큼 효과적인 공부는 없다. 그래서 파이썬을 활용해서 할 수 있는 일드을 정리해보았다. 자세한 내용은 아래 포스팅을 참조해보자.
( 참조: 파이썬 활용, 파이썬 프로젝트로 할 수 있는 일들을 알아보자! )

  1. 2020.01.02 19:39 댓글주소  수정/삭제  댓글쓰기

    ----> 6 xgb_basic.fit(X_train, df["y"])
    7
    8 visualizer = ROCAUC(xgb_basic, classes=[0, 1], micro=False, macro=True, per_class=False)

    TypeError: 'module' object is not subscriptable 라고 나오는데...어떤게 잘못된걸까요.. ? 아나콘다도 이제 yello쥬갸차 xgboost 지원됩니다.!