-Python- 分類器の性能評価

2値分類器の混同行列(Confusion Matrix)を以下に示します.

混同行列(Confusion Matrix)
    Prediction
    Positive Negative
Result Positive True Positive (TP) False Positive (FP)
Negative False Positive (FP) True Positive (TP)

 

分類器の性能指標としてよく使われるのは,以下の3つになります.
  • 正答率(Accuracy)= (TP + TN) / (TP + FP + FN + TN)
  • 適合率(Precision)= (TP) / (TP + FP)
  • 再現率(Recall) = (TP) / (TP + FN)
分類器の性能は,大まかには正答率(Accuracy)でみますが,ラベル間でデータ数が大きく異なる場合(ex. NegativeのテストデータがPositiveに比べてとても少ないなど)は,特に注意が必要です.
適合率と再現率は異なる性質を持っていますが,混合率と再現率の調和平均であるF値(F-measure)は,2つの指標を総合的にみるときに使用します.
  • F値(F-measure)= 2 / *1 = (2Precision・Recall) / (Precision + Recall)
通常,平均というと対象の数値を全て足して個数で割った値(算術平均,相加平均)が使用されます.一方で,平均には異なる定義のものがあり,先述の調和平均もその一つです.
調和平均は,率の平均ということもでき,以下のような計算式となります.
 
a1,a2,…,anに対して    n / (1/a1 + 1/a2 + … + 1/an)
 
調和平均の例題:時速40kmの車aと時速60kmの車bが120kmの距離を失った場合の平均速度を求める.
 
距離が120kmなので,aが走る時間は 120 / 40 = 3時間,bが走る時間は 120 / 60 = 2時間
距離は2台合わせて240kmなので,平均は 240 / (3 + 2) = 48km/s となります.
これは,aの速度を va,bの速度をvb,距離をdとすると
 
(2 * d) / (d/va + d/vb) = 2 / (1/va + 1/vb) = 2 / (1/40 + 1/60)
 
となる.このように,速度のように2つの値(速度では距離と時間)の比で表せる数値の平均には調和平均を用います.
 
また,幾何平均(相乗平均)は
a1,a2,…,anに対して    (a1 a2  … an)^(1/n)
となります.幾何平均は金利計算のような積を累積させる場合に使用されます.

Pythonでは正答率はscikit-learnのmetricsモジュールを用いて,以下のコマンドで求めることができます(以下の例では,'x'に対する結果を求めています..
from sklearn import metrics
 
print('Accuracy: \n'metrics.accuracy_score(expected, predicted))
 
混合行列は,以下のコマンドで求めることができます.
from sklearn import metrics
 
print('\nConfusion matrix: \n'metrics.confusion_matrix(expected, predicted))
 
適合率は,以下のコマンドで求めることができます.
from sklearn import metrics
 
print('\nPrecision: \n'metrics.precision_score(expected, predicted, pos_label=x))
 
再現率は以下のコマンドで求めることができます.
from sklearn import metrics
 
print('\nRecall: \n'metrics.recall_score(expected, predicted, pos_label=x))

F値は以下のコマンドで求めることができます.
from sklearn import metrics
 
print('\nF-measure: \n'metrics.f1_score(expected, predicted, pos_label=x))
 
以前に投稿した,分類器を使った評価に,上記を x = 3として付記すると以下のような結果が返ってきます.
 
Accuracy: 
 0.8531468531468531
 
Confusion matrix: 
 [[60 15]
 [ 6 62]]
 
Precision: 
 0.9090909090909091
 
Recall: 
 0.8
 
F-measure: 
 0.8510638297872342

すなわち,この結果は’3’に対する適合率が90%,再現率80%,F値は85%となりました.混同行列は以下のようになります.
    Prediction
    3(Positive) 8(Negative)
Result 3(Positive) 60(TP) 15(FP)
8(Negative) 6(FP) 62(FN)
 

ここで,改めて正答率,適合率,再現率,F値といった複数の性能指標について確認します.
正答率は,分類器に対して1つの数値を出すので,当該分類器の大まかな性能をみるのに適しています.ただし,ラベル間のサンプル数に大きな偏りがあるときには注意が必要です.例として,製品の欠陥を見つける分類器があったとして,その分類器で以下のような結果が得られたとします.

    製品総数:16,195,正常数:15,724,欠陥数:471

また,混同行列は以下のようになったとします.
    Prediction
    Normal Defect
Result Normal 15,649 75
Defect 148 323
 

この分類器の性能評価は以下のようになります.
        正答率:98.6%,
        正常適合率:99.1%,正常再現率:99.5%,正常F値:99.3%,
        欠陥適合率:81.2%,欠陥再現率:68.6%,欠陥F値:74.3%

正答率が98.6%,正常適合率が98.6%,正常再現率が99.5%という値をみると,とても優れた分類器のように感じます.一方で,欠陥側の指標をみると,適合率81.2%,再現率68.6%なので,欠陥品と判別したもののうち,2割程度は誤検出であり,欠陥品の約3割を見落としているということになります.
製品の場合は,欠陥品の出荷を避けることが重要な目的なので,着目するのは,欠陥適合率や欠陥再現率ということになります.

適合率と再現率はトレードオフの関係にあります.分類器の誤検出(分類の誤り)を防ごうとすれば,予測の確度が高いものだけを拾い上げることになるので,見落としの確率を増やす(再現率の低下)ことになります.なので,課題によって,どちらの値を重要視すべきなのかを見極めるのは大切なことです.また,これらの2つの値を見て,ラベルの総合的な分類性能を判断したいような場合は,F値を重要視します.

*1:1 / Precision) + (1 / Recall