LoginSignup
4
1

More than 1 year has passed since last update.

分類モデルの評価-ROC曲線とAUC

Posted at

ROC(Receiver Operating Characteristic)曲線とは

ROC曲線は、縦軸に真陽性率(tpr: true positive rate)、横軸に偽陽性率(fpr: false positive rate)の値をプロットした曲線です。
真陽性率は、実際の正例のうちどれだけ正例を予測できたかの割合です。(=再現率)
偽陽性率は、実際の負例のうち正例と予測されてしまった割合です。

予測確率を予測ラベルに変換する際の閾値を1.0と0.0の間で徐々に変化させ、真陽性率と偽陽性率の関係をプロットします。

閾値(Threshold)とは

ロジスティック回帰は予測確率を出力します。予測確率を予測ラベルに変換する際に使用する値が閾値です。
例えばスパムメールの分類で、閾値を0.5と設定した場合、
予測確率が0.5より大きい場合スパムであると判定します。
予測確率が0.5未満の場合本物メールであると判定します。

ロジスティック回帰

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4, random_state=42)

logreg = LogisticRegression()
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)

print(y_pred)

出力:

[0 0 0 0 0 0 0 1 0 1]

ロジスティック回帰の閾値はデフォルト0.5です。

また、予測確率は以下のように計算できます。

y_pred_prob = logreg.predict_proba(X_test)[:,1]
print(y_pred_prob)

出力:

[0.39590165 0.23957606 0.20329823 0.22763991 0.42805118 0.48236847
 0.06612875 0.64996227 0.49846704 0.63918863]

ROC曲線のプロット

from sklearn.metrics import roc_curve

# 予測確率の計算
y_pred_prob = logreg.predict_proba(X_test)[:,1]
print(y_pred_prob)

# ROC曲線の値の生成:fpr、tpr、閾値
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)

# ROC曲線のプロット
plt.plot([0, 1], [0, 1], 'k--')
plt.plot(fpr, tpr, label='Logistic Regression')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.show()

image.png

AUC(Area Under the Curve)とは

AUCは、ROC曲線の下部分の面積です。
AUCの面積が大きいほど機械学習の性能が良いです。

AUCの計算

from sklearn.metrics import roc_auc_score
from sklearn.model_selection import cross_val_score

y_pred_prob = logreg.predict_proba(X_test)[:,1]

# AUCの計算
print("AUC: {}".format(roc_auc_score(y_test, y_pred_prob)))

# AUCの計算(交差検証)
cv_auc = cross_val_score(logreg, X, y, cv=5, scoring='roc_auc')
print("5回の交差検証で計算されたAUC: {}".format(cv_auc))

出力:

AUC: 0.8254806777079764
5回の交差検証で計算されたAUC: [0.80148148 0.8062963  0.81481481 0.86245283 0.8554717 ]

参考情報

4
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
4
1