正解率(Accuracy)
正解率は、全体に対して予測が当たった割合です。
正解率が評価指標として適切でない場合があります。
例えばスパムメールの分類です。
99%のメールは本物、1%のメールはスパムだと仮定すると、全てのメールを本物と予測するモデルは99%の正解率になりますが、
実際にスパムメールを分類できていません。
この場合、正解率以外の評価指標が必要になります。
混同行列(Confusion Matrix)
混同行列は分類モデルの評価を考える際の基本となる行列で、モデルの予測値と観測値の関係を表すものです。
予測:スパム | 予測:本物 | |
---|---|---|
実際:スパム | True Positive (TP) | False Negative (FN) |
実際:本物 | False Positive (FP) | True Negative (TN) |
混同行列は、sklearn.metricsモジュールのconfution_matrix関数で取得できます。
from sklearn.metrics import confusion_matrix
y_pred = model.predict(X_test)
print(confusion_matrix(y_test, y_pred))
出力
[[176 30]
[ 52 50]]
ちなみに混同行列で正解率を計算する式は以下になります。
\frac{tp + tn}{tp + tn + fp + fn}
適合率(Precision)、再現率(Recall)、F1スコア(F1score)
適合率は、スパムと予測した中で実際にどれだけスパムであったかの割合です。
\frac{tp}{tp + fp}
再現率は、実際はスパムのうち正しくスパムと予測できた割合です。
\frac{tp}{tp + fn}
F1スコアは適合率と再現率の調和平均です。適合率と再現率のどちらを優先すべきかが決まっていない場合、モデルを統合的な評価に使用します。
\frac{2}{\frac{1}{適合率} + \frac{1}{再現率}}
高適合率は、スパムと予測された本物が少ないことを意味します。
高再現率は、ほとんどのスパムを予測できたことを意味します。
上記関連指標は、sklearn.metricsモジュールのclassification_report関数で取得できます。
from sklearn.metrics import classification_report
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
出力
precision recall f1-score support
0 0.77 0.85 0.81 206
1 0.62 0.49 0.55 102
avg / total 0.72 0.73 0.72 308