ROC曲線とAUCの解釈 | モデルの評価と改善 | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

ROC曲線とAUCの解釈

ROC曲線(Receiver Operating Characteristic Curve)は、分類モデルの性能を評価するために使われる代表的な指標の一つです。特に、二値分類モデルにおいて、しきい値を変化させたときに「正しく陽性と判定できる割合」と「誤って陽性と判定してしまう割合」がどのように変化するかを確認できます。

AUC(Area Under the Curve)は、ROC曲線の下側の面積を表す指標です。AUCの値が大きいほど、モデルが陽性と陰性をうまく区別できていると判断できます。

この記事では、ROC曲線とAUCの基本的な考え方、TPRとFPRの意味、AUCの読み取り方、Pythonでの実装例について解説します。

ROC曲線とAUCの関係を図で理解する

ROC曲線とAUCの関係を図で理解する

ROC曲線とは?

ROC曲線とは、分類モデルのしきい値を変化させたときの、True Positive Rate(TPR)False Positive Rate(FPR)の関係をグラフにしたものです。

分類モデルでは、多くの場合、「陽性である確率」のようなスコアを出力します。そのスコアに対して、どこから陽性と判定するかを決める境界がしきい値です。

たとえば、スパムメール判定で考えると、モデルが「スパムである確率」を出力し、その確率が0.5以上ならスパム、0.5未満なら通常メールと判定する、といった使い方です。

しきい値を変えると、陽性と判定される件数が変わります。その結果、正しく陽性と判定できる割合も変わりますが、同時に誤って陽性と判定してしまう割合も変わります。ROC曲線は、この関係を確認するためのグラフです。

TPRとFPRの意味

ROC曲線を理解するためには、TPRとFPRの意味を押さえる必要があります。

指標 意味
TPR 実際に陽性のデータのうち、モデルが正しく陽性と予測できた割合です。感度、再現率とも呼ばれます。
FPR 実際には陰性のデータのうち、モデルが誤って陽性と予測してしまった割合です。

式で表すと、次のようになります。

TPR = TP / (TP + FN)

FPR = FP / (FP + TN)

それぞれの意味は次の通りです。

  • TP:実際に陽性で、予測も陽性だった件数
  • FN:実際に陽性だが、予測は陰性だった件数
  • FP:実際には陰性だが、予測は陽性だった件数
  • TN:実際に陰性で、予測も陰性だった件数

しきい値を変えると何が起こるか

ROC曲線では、分類のしきい値を変えながらTPRとFPRを計算します。

しきい値を低くすると、陽性と判定されるデータが増えます。そのため、実際の陽性を見つけやすくなり、TPRは上がりやすくなります。一方で、実際には陰性のデータまで陽性と誤判定しやすくなるため、FPRも上がりやすくなります。

反対に、しきい値を高くすると、陽性と判定されるデータは少なくなります。誤判定は減りやすくなりますが、実際の陽性を見逃す可能性も高くなります。

しきい値 特徴
低い 陽性と判定されやすい。TPRは上がりやすいが、FPRも上がりやすい。
高い 陽性と判定されにくい。FPRは下がりやすいが、TPRも下がりやすい。

ROC曲線は、このようなしきい値の変化によるトレードオフを視覚的に確認できる点が特徴です。

ROC曲線の読み方

ROC曲線では、横軸にFPR、縦軸にTPRを取ります。

  • 横軸:FPR(誤って陽性と判定した割合)
  • 縦軸:TPR(正しく陽性と判定した割合)

一般的には、ROC曲線が左上に近いほど良いモデルとされます。

左上に近いということは、FPRが低く、TPRが高い状態です。つまり、「誤判定を少なくしながら、陽性をしっかり見つけられている」ことを意味します。

曲線の位置 解釈
左上に近い 良い分類性能を持つモデル
対角線に近い ランダム予測に近いモデル
対角線より下 予測の向きが逆になっている可能性があるモデル

AUCとは?

AUC(Area Under the Curve)は、ROC曲線の下側の面積を表します。

AUCは0から1の範囲を取り、値が大きいほど、モデルが陽性と陰性をうまく区別できていることを示します。

AUCの値 解釈
1.0に近い 非常に高い分類性能を持つ
0.5前後 ランダム予測と同程度
0.5未満 予測の向きが逆になっている可能性がある

AUCは、特定のしきい値だけでなく、さまざまなしきい値における分類性能をまとめて評価できる点が特徴です。

PythonでROC曲線とAUCを計算する

Pythonでは、scikit-learnを使ってROC曲線とAUCを簡単に計算できます。

from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt

# 実際のクラス
y_true = [0, 0, 1, 1]

# モデルが出力した陽性クラスの予測スコア
y_scores = [0.1, 0.4, 0.35, 0.8]

# ROC曲線の計算
fpr, tpr, thresholds = roc_curve(y_true, y_scores)

# AUCの計算
auc = roc_auc_score(y_true, y_scores)

# ROC曲線の描画
plt.plot(fpr, tpr, label=f'ROC curve (AUC = {auc:.2f})')
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.show()

このコードでは、roc_curve()でFPR、TPR、しきい値を計算し、roc_auc_score()でAUCを計算しています。その後、Matplotlibを使ってROC曲線を描画しています。

ROC曲線とAUCを使うときの注意点

ROC曲線とAUCは便利な評価指標ですが、どのような場面でも万能というわけではありません。

データの偏りが大きい場合は注意する

陽性データと陰性データの数に大きな偏りがある場合、ROC-AUCだけではモデルの実用上の性能を判断しにくいことがあります。

たとえば、不正検知や病気の検査のように陽性が非常に少ない場合は、適合率や再現率、PR曲線などもあわせて確認することが重要です。

実際のしきい値選びは別途考える

AUCはモデル全体の識別性能を評価する指標ですが、実際に運用する際には、どのしきい値で陽性と判定するかを決める必要があります。

誤検知を減らしたいのか、見逃しを減らしたいのかによって、適切なしきい値は変わります。

AUCだけでモデルを判断しない

AUCが高いモデルであっても、業務目的に合っているとは限りません。混同行列、適合率、再現率、F1スコアなども併用して、総合的に評価することが大切です。

まとめ

ROC曲線とAUCは、分類モデルの性能を評価するための重要な指標です。

  • ROC曲線は、しきい値を変えたときのTPRとFPRの関係を表す
  • TPRは、実際の陽性を正しく陽性と判定できた割合
  • FPRは、実際の陰性を誤って陽性と判定した割合
  • AUCはROC曲線の下側の面積を表す
  • AUCが1に近いほど、陽性と陰性をうまく区別できている
  • データの偏りが大きい場合は、PR曲線やF1スコアなども確認する

ROC曲線とAUCを理解すると、分類モデルの性能をしきい値の変化も含めて評価できるようになります。ただし、実際のモデル選択では、AUCだけでなく、データの偏りや業務上の目的もあわせて考えることが重要です。