機械学習

分類性能指標

正解率だけに頼らず、誤りのコストとクラスの偏りに合わせて分類性能指標を選ぶための俯瞰ノート。

  • B|標準
  • 機械学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

分類性能指標は、予測が当たった割合だけでなく、どの種類の誤りをどれだけ許したかを測る物差しです。モデルの優劣は指標の数値だけでは決まらず、正例・負例の意味と運用上の損失を合わせて読んで決めます。

健康診断の判定を考えると、全員を「異常なし」にすれば全体の正解率は高く見える一方、見逃しは増えます。検査の性能を語るには、受診者全体の的中率と、異常を拾う力を分けて見る必要があります。

なぜ必要か

正解率は、予測が正しかった件数を全件数で割った値です。たとえば異常が全体の1%しかない検知問題で、常に「正常」と予測すれば正解率は99%になります。しかし、検知したい異常を一件も拾えていません。クラス比率が偏るほど、正解率は多数派クラスを当てた結果に引っ張られます。

そこで、予測と正解の組合せを4つのマスに分け、見逃しと誤警報を別々に数えます。正例を正しく正例とした件数をTP、正例を負例とした件数をFN、負例を正例とした件数をFP、負例を正しく負例とした件数をTNと呼びます。各指標はこの4マスのどこを重く見るかの違いです。なお、マスの名称は「モデルが陽性と判定したか」と「実際に陽性か」の順を混同しないことが試験でも実装でも要点です。

実際は正例実際は負例
正例と予測TP(真陽性)FP(偽陽性)
負例と予測FN(偽陰性)TN(真陰性)

仕組み

二値分類では、4マスから代表的な指標を次のように組み立てます。NN は全サンプル数です。

accuracy=TP+TNN,precision=TPTP+FP,recall=TPTP+FN\mathrm{accuracy}=\frac{TP+TN}{N},\qquad \mathrm{precision}=\frac{TP}{TP+FP},\qquad \mathrm{recall}=\frac{TP}{TP+FN}

正解率は全体の的中、適合率は陽性と予測したものの確かさ、再現率は実際の陽性を拾う割合を表します。F1は適合率と再現率を調和平均した値で、どちらか一方だけが低い場合に高くなりにくい指標です。ここでは式の暗記より、分母が「予測した陽性」なのか「実際の陽性」なのかを区別します。

閾値を動かすと、同じスコア列でも予測ラベルが変わり、4マスと指標も変化します。閾値を下げれば陽性と判定する件数が増え、一般に見逃しは減る一方、誤警報は増えます。したがって、検証時に一つの閾値の数値だけを固定して比較すると、運用条件を隠した比較になり得ます。多クラスではクラスごとの指標を出した後、各クラスを同じ重みで平均するmacro、support(各クラスの正解件数)で重み付けするweighted、全クラスのマスを合算して計算するmicroを使い分けます。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
不均衡データの評価少数クラスを含むクラス別指標やmacro平均も確認する正解率99%だけで高性能と判断する
指標の選択見逃しと誤警報のどちらが高コストかを先に置く常にF1を選べばよいとする
多クラスの平均クラス均等ならmacro、件数重視ならweighted、全体の寄与ならmicromacroとweightedを同じ意味で扱う
閾値の影響閾値を変えると4マスと指標が変わる指標をモデル固有の不変値とみなす

実装で確かめる

同じ予測スコアに対して閾値だけを変え、正解率と再現率の材料となるマスが変わることを確認します。y_score は正例らしさ、threshold は陽性と判定する境目です。

import numpy as np

y_true = np.array([1, 1, 0, 0, 0])
y_score = np.array([0.55, 0.45, 0.40, 0.35, 0.10])
for threshold in (0.5, 0.3):
    y_pred = (y_score >= threshold).astype(int)
    tp = np.sum((y_true == 1) & (y_pred == 1))
    fn = np.sum((y_true == 1) & (y_pred == 0))
    accuracy = np.mean(y_true == y_pred)
    recall = tp / (tp + fn)
    print(threshold, accuracy, recall)

取り違えやすいもの

比較対象切り分け
正解率全体の当たり具合。クラス比率の偏りを受けやすい
適合率・再現率FPを抑えるかFNを抑えるかという、異なる業務上の優先度を表す
F1適合率と再現率を一つにまとめる。誤りの金額を直接表す指標ではない
macro・weighted・micro多クラスの集計方法の違い。指標そのものの定義とは別の選択
閾値モデルのスコアをラベルへ変換する設定。指標と一緒に記録する

想起チェック

不均衡データで正解率だけを見る危険は何か

多数派を当てるだけで高い値になり、少数派の見逃しを隠すことです。

指標を選ぶ前に決める業務上の判断は何か

誤警報(FP)と見逃し(FN)のどちらが高くつくかです。そこから適合率や再現率などの優先度を決めます。

閾値を下げたとき、なぜ指標が変わるのか

陽性と判定するサンプルが増え、TP・FP・FN・TNの数え上げが変わるからです。

出典