[python] SciPy를 사용하여 ROC 곡선 그리기

일반적으로 분류 모델의 성능을 평가하기 위해 ROC (Receiver Operating Characteristic) 곡선을 사용합니다. ROC 곡선은 분류 모델의 임계값을 변화시키면서 진양성율 (True Positive Rate)과 가양성율 (False Positive Rate) 사이의 관계를 시각화합니다. 이번 포스트에서는 Python의 SciPy 라이브러리를 사용하여 ROC 곡선을 그리는 방법에 대해 알아보겠습니다.

SciPy

SciPy는 과학적이고 기술적인 컴퓨팅을 위한 Python의 라이브러리입니다. 다양한 수학, 과학, 공학적인 계산과 관련된 기능들을 제공합니다.

ROC 곡선 그리기

먼저, 필요한 모듈을 import 합니다.

import matplotlib.pyplot as plt
import numpy as np
from scipy import interp
from sklearn.metrics import roc_curve, auc

그리고 분류 모델의 예측 점수와 실제 클래스를 준비합니다. 예를 들어, 이진 분류 모델을 사용한다고 가정하겠습니다.

y_true = np.array([0, 0, 1, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8, 0.9])

SciPy의 roc_curve 함수를 사용하여 ROC 곡선을 계산합니다.

fpr, tpr, thresholds = roc_curve(y_true, y_scores)

fpr은 가양성율 (False Positive Rate)의 배열, tpr은 진양성율 (True Positive Rate)의 배열, thresholds는 각 임계값의 배열입니다. 이제 AUC (Area Under Curve)를 계산하고, 그래프를 그립니다.

roc_auc = auc(fpr, tpr)

plt.figure()
plt.plot(fpr, tpr, lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], lw=2, linestyle='--', color='r', label='Random')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

그 결과, ROC 곡선과 AUC 값이 나타납니다.

결론

이처럼 SciPy와 올바른 평가 지표를 사용하여 ROC 곡선을 그릴 수 있습니다. ROC 곡선은 분류 모델의 성능을 시각적으로 평가하는 데 유용하며, 분류 모델의 임계값을 조정하거나 다른 모델과 비교할 때 도움이 됩니다.