ROC 곡선이란?
ROC(Receiver Operating Characteristic, 수신자 조작 특성) 곡선은 이진 분류 모델의 성능을 시각적으로 평가하는 대표적인 도구입니다. X축에는 위양성률(FPR, False Positive Rate), Y축에는 진양성률(TPR, True Positive Rate)을 표시하며, 곡선 아래 면적(AUC)이 1에 가까울수록 더 우수한 분류 모델임을 의미합니다.
scikit-learn에서는 metrics.plot_roc_curve() 메서드를 사용해 학습된 분류기의 ROC 곡선을 손쉽게 그릴 수 있습니다.
ROC 곡선 그리는 단계
- 분류용 데이터셋 생성 –
make_classification()메서드로 무작위 n클래스 분류 문제를 만듭니다. 이 함수는 표준편차가 1인 정규분포를 따르는 점들의 클러스터를n_informative차원 하이퍼큐브의 꼭짓점 주변에 생성하고, 각 클래스에 동일한 수의 클러스터를 할당합니다. 또한 특성 간 상호 의존성을 부여하고 다양한 유형의 노이즈를 데이터에 추가합니다. - 학습/테스트 데이터 분할 –
train_test_split()메서드를 사용해 배열이나 행렬을 무작위 학습 세트와 테스트 세트로 나눕니다. - SVM 모델 학습 –
fit()메서드를 사용해 주어진 학습 데이터에 맞춰 SVM(Support Vector Machine) 모델을 훈련합니다. - ROC 곡선 플롯 –
plot_roc_curve()메서드를 사용해 수신자 조작 특성(ROC) 곡선을 그립니다. - 그래프 출력 –
plt.show()메서드로 결과 그림을 화면에 표시합니다.
전체 예제 코드
import matplotlib.pyplot as plt
from sklearn import datasets, metrics, model_selection, svm
X, y = datasets.make_classification(random_state=0)
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, random_state=0)
clf = svm.SVC(random_state=0)
clf.fit(X_train, y_train)
metrics.plot_roc_curve(clf, X_test, y_test)
plt.show()
실행 결과
코드를 실행하면 대각선 기준선(y=x) 위에 위치한 ROC 곡선이 그려지며, 곡선 아래 면적(AUC) 값이 함께 표시됩니다. AUC가 0.5에 가까우면 무작위 예측 수준, 1에 가까우면 완벽한 분류 성능을 뜻합니다.

참고: 최신 scikit-learn 버전 사용 시
plot_roc_curve()는 scikit-learn 1.0부터 지원 중단(deprecated)되었으며, 1.2 버전에서 완전히 제거되었습니다. 최신 버전에서는 아래와 같이 RocCurveDisplay 클래스를 사용하는 것이 좋습니다.
from sklearn.metrics import RocCurveDisplay
RocCurveDisplay.from_estimator(clf, X_test, y_test)
plt.show()
이 방법은 기존 코드와 동일한 ROC 곡선을 출력하며, 앞으로도 안정적으로 유지될 공식 API입니다.