LoginSignup
0
1

ROC曲線とAUCを理解しよう - Python実装入門

Last updated at Posted at 2023-05-18

はじめに

ROC曲線とAUCは、機械学習の分類問題を評価するための重要なツールです。しかし、これらの概念を理解するのは少し難しく感じるかもしれません。この記事では、これらの概念を分かりやすく説明し、Pythonを使って実装する方法を示します。

ROC曲線とは?

ROC曲線(Receiver Operating Characteristic curve)は、分類器のパフォーマンスを視覚的に示すためのグラフです。ROC曲線を作成するためには、偽陽性率(FPF)を横軸に、真陽性率(TPF)を縦軸にプロットします。

  • 真陽性率(TPF): 実際に陽性であるサンプルを陽性と正しく予測した割合(敏感度または再現率とも呼ばれます)。
  • 偽陽性率(FPF): 実際には陰性であるサンプルを陽性と誤って予測した割合(1から引いたものが特異度です)。
  • AUCとは?
    AUC(Area Under the Curve)は、ROC曲線の下の領域の面積を指します。AUCは0から1までの値を取り、値が大きいほど(つまり、1に近いほど)分類器の性能が良いことを示します。

Pythonでの実装

Pythonでは、scikit-learnとmatplotlibを使ってROC曲線とAUCを簡単に計算・描画することができます。

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt

## データ生成
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

## モデル学習
model = LogisticRegression()
model.fit(X_train, y_train)

## 予測値の取得
y_scores = model.predict_proba(X_test)[:, 1]

## ROC曲線の描画
fpr, tpr, thresholds = roc_curve(y_test, y_scores)
plt.plot(fpr, tpr, label='ROC curve (area = %.2f)'%roc_auc_score(y_test, y_scores))
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

上記のコードは、2クラス分類問題に対するROC曲線を描画する例です。まず、データセットを生成し、それを訓練データとテストデータに分割します。次に、モデルを訓練し、テストデータに対する予測値を取得します。最後に、roc_curve関数を使用してROC曲線を描画し、roc_auc_score関数でAUCを計算します。

まとめ

この記事では、ROC曲線とAUCの基本的な概念と、それらをPythonで計算・描画する方法を説明しました。これらのツールは、モデルの性能を理解し、異なるモデルを比較するのに非常に便利です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1