【初心者向け】 機械学習におけるクラス分類の評価指標の解説

こんにちは。R&Dチームの河野です。主な担当業務は機械学習モデルの開発です。 タイから日本に留学し、卒業後日本企業に就職していました。データ分析・機械学習の業務経験が3年程度で、R&Dチーム唯一の女性かつ外国人のメンバーです。

直近の仕事はディープラーニングによるクラス分類モデルの開発を担当しており、今回はモデル精度評価によく使われる評価指標について初心者向け説明させて頂きたいと思います。機械学習モデルの精度改善には課題に適切な評価指標の選択がすごく重要のため、各評価指標の理解が必要になります。分類モデル開発に興味を持っている方・挑戦してみたい方にご参考になれば幸いです。

基本的な用語

ポジティブとネガティブクラス

注目されたクラスはポジティブクラスと呼ばれ、それ以外のクラスはネガティブクラスと呼ばれます。課題によってポジティブクラスが異なります。

例1)胸部X線画像による新型コロナウイルス感染の判定課題の場合は、陽性かどうかに注目するため、陽性がポジティブクラスとなります。

例2)画像分析で猫と犬の分類課題の場合は、猫と犬の重要性が同程度のためどちらでもポジティブクラスになる場合があります。猫を注目して評価する際は猫がポジティブクラスになり、犬を注目して評価する際は犬がポジティブクラスになります。

混合行列

クラス分類の予測結果が下記の4つの種類に分けられます。分かりやすくするためにウイルス感染検査手法の精度検証課題を例に挙げて説明します。

  • 真陽性(True Positive: TP):ポジティブサンプルに対して正しくポジティブと予測されたサンプル数
    例)ウイルス感染者の中に、正しく陽性と判定された人数

  • 偽陰性(False Negative: FN):ポジティブサンプルに対して間違ってネガティブと予測されたサンプル数
    例)ウイルス感染者の中に、陰性と判定された人数

  • 真陰性(True Negative: TN):ネガティブサンプルに対して正しくネガティブと予測されたサンプル数
    例)ウイルス感染していない人の中に、正しく陰性と判定された人数

  • 偽陽性(False Positive: FP):ネガティブサンプルに対して間違ってポジティブと予測されたサンプル数
    例)ウイルス感染していない人の中に、陽性と判定された人数

上記の情報を下記のように混合行列でまとめられます。

f:id:optim-tech:20210525115913p:plain:w663:h262

評価指標

正解率(Accuracy)

正解率とは、正しく予測されたサンプルの割合であり、以下の式で計算されます。正しく予測できたポジティブクラス(TP)とネガティブクラス(TN)を両方とも着目して評価するため、ポジティブクラスの指定に依存しません。ポジティブクラスを変えても同じ結果が得られます。


Accuracy = \cfrac{TP + TN}{TP + TN + FP + FN}

いつ使うべきか

  • すべてのクラスが同じように重要であるとき。例えば、猫と犬の分類課題など
  • 各クラスに所属するサンプル数には、極端な偏りがないとき。例えば、ウイルス感染を判定する分類モデルを評価する場合、10,000人の受検者数の中に100人が感染し、判定結果が下記とおりになったとしたら正解率が99%ほどになります。しかし、100人の感染者の中に10人しか正しく判定できていないため、良い結果とは言えません。このような不均衡データの場合は、正解率より適合率・再現率またはF値を利用すべきです。

Accuracy=\cfrac{TP+TN}{TP+TN+FP+FN} = \cfrac{10+9,890}{10+9,890+10+90} = 99\%

適合率(Precision)

適合率とは、ポジティブクラスと予測したサンプルの中に、どのくらい正しく予測できたかの割合です。予測結果が陽性になったものを注目しています。ネガティブサンプルの誤認識(FP)が多いほど、適合率が低くなります。以下の式で計算されます。


Precision=\cfrac{TP}{TP+FP}

いつ使うべきか
誤認識・誤検知をなるべく抑えたいとき。例えば、迷惑メール判定課題では正しく迷惑メールを認識できること(TP)は大事ですが、重要なメールの見逃しが発生すると困りますね。そのため、迷惑メールではないものの誤検知(FP)をなるべく抑える必要があります。

再現率(Recall)

再現率とは、ポジティブクラスの中にどのくらい正しく予測できたかの割合です。正解が陽性になったものを注目しています。ポジティブサンプルの見逃し(FN)が多いほど、再現率が低くなります。以下の式で計算されます。


Recall=\cfrac{TP}{TP+FN}

いつ使うべきか
見逃しをなるべく抑えたいとき。例えば、障害や異常検知課題などです。機械の故障が生じると、事故や損害を発生するリスクがあるため、このような課題ではなるべく見逃しを抑える必要があります。しかし、正常時で頻繁に間違って異常として検知されると、そのシステムが使い物にならないですね。そのため、再現率を優先された課題でも、再現率が高いほど良いとは限らず、適合率も許せるレベルまで達成できたかを確認する必要があります。

F値(F1-score)

F値とは、適合率と再現率の調和平均であり、2つの指標をまとめて評価することになります。以下の式で計算されます。


F_1=2\times\cfrac{precision \times recall}{precision+recall}

いつ使うべきか

  • 不均衡データに対してモデル精度を評価したいとき。
  • 適合率と再現率が同等に重要なとき。適合率と再現率をバランスしたいとき。
  • FPとFNを両方とも注目して評価したいとき。(一方、TPとTNを着目して評価したいときは正解率を使うべきです。)

以上、分類モデルの精度評価によく使われる評価指標について説明しました。これからscikit-learnclassification_report関数で分類モデルを評価してみましょう。y_trueは正解クラスのリスト、y_predは予測されたクラスのリストとなります。

>>> from sklearn.metrics import classification_report
>>> print(classification_report(y_true, y_pred, target_names=['クラスA', 'クラスB'], digits=4))
              precision    recall  f1-score   support

        クラスA     0.9750    0.7800    0.8667       100
        クラスB     0.9000    0.9900    0.9429       200

    accuracy                         0.9200       300
   macro avg     0.9375    0.8850    0.9048       300
weighted avg     0.9250    0.9200    0.9175       300

上記の結果では、ポジティブクラスの指定によって異なる適合率(precision)・再現率(recall)とF値(f1-score)の値が算出されました。クラスAとクラスBは同等に重要な場合は、それらの指標の集計結果でモデルの全体精度を評価できます。macro_avgとはクラス別の値を平均した結果で、weighted avgとはクラス別の値の重み付け平均となります。クラスのサンプル数を考慮して評価したい場合、weighted_avgを利用した方が良いでしょう。また、正解率(accuracy)はポジティブクラスの指定に依存しないため、ある分類モデルに対して一つの結果しか得られません。

しきい値とprecision-recallのトレードオフ

一般的な分類モデルの出力は、所属クラス(クラスAまたはクラスB)ではなく、各クラスの所属確率(クラスAの確率とクラスBの確率)になります。ある入力サンプルに対して、全てのクラスの所属確率の和が1になります。所属確率がしきい値以上になったクラスは予測クラスと判断されるため、しきい値によって予測結果が変わります。そのため、上記で紹介した評価指標はしきい値依存となります。一般的には、しきい値=0.5がよく使われますが、上記の指標で分類モデルを評価する前にしきい値を最適化した方が良いでしょう。

f:id:optim-tech:20210525115919p:plain

クラスBをポジティブクラスにしてその所属確率をクラス判別スコアにすると、しきい値とTP/FP/TN/FNの関係は上図の分布図で示されます。黒の点線はしきい値を表し、上図では0.5になっています。しきい値を下げるとTPとFPが多くなり、FNが少なくなります。その結果、再現率が高くなる一方、適合率は低くなる傾向があります。同様に、しきい値を上げると適合率が高くなり、再現率が低下します。このような関係性は、適合率(precision)と再現率(recall)のトレードオフと呼ばれます。

f:id:optim-tech:20210525115924g:plain

ROC曲線とAUC

ROC曲線とは、TPR(True positive rate)とFPR(False positive rate)の割合でプロットされたものです。モデルがどれぐらい上手くポジティブサンプルに高いスコアを付けて、ネガティブサンプルに低いスコアを付けられるかを表します。上記の評価指標のように予測クラスの正確さを着目するのではなく、正解クラスによってモデルが適切に入力サンプルをスコアでランキングできるかどうかを評価するための指標です。


TPR=\cfrac{TP}{TP+FN} \\
FPR=\cfrac{FP}{FP+TN}

AUC(Area under the ROC curve)とは、ROC曲線の下の面積で計算され、すべてのしきい値に対するパフォーマンスを総合的に評価するための指標です。各クラスのサンプル分布が離れるほど、AUCが高くなります。分類モデルの予測結果がランダムと変わらない精度レベルの場合、ROC曲線は直線になり、AUC=0.5程度になります(下記のROC曲線の灰色線)。

f:id:optim-tech:20210525173614g:plain

いつ使うべきか

  • しきい値を考慮せず、とりあえずモデルの分類精度を評価したいとき。
  • 不均等データの問題がないとき。ネガティブサンプルが極端的に多い場合、多数のTNによりFPRが大きく引き下げられるため、実精度より高く評価されてしまうケースがあります。この場合、適合率と再現率でプロットされたPR曲線のAUCを利用すべきです。詳しくは、The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasetsを参考してください。

まとめ

  • 正解率は正しく予測できたサンプル(TPとTN)を着目した指標であり、不均衡なデータの問題には適していません。
  • 不均衡なデータに対して分類モデルを評価する場合、課題の目的に合わせて適合率・再現率またはF値を使うべきです。
  • 適合率または再現率どちらかを優先された課題でも、両方の指標の評価結果を確認すべきです。
  • 正解率・適合率・再現率・F値は、特定のしきい値での評価結果を示すため、事前にしきい値を最適化することが推奨されます。
  • AUCは、すべてのしきい値に対するパフォーマンスでモデル精度を比較するときに使われます。

OPTiMでは、AIとIoT技術でビジネス課題・社会的課題を解決したい、チャレンジ精神・向上心を持っているエンジニアを積極的に募集してます。農業・医療・建設・産業分野などにおいてAIやIoTの活用で推進しているため、関心のある技術領域に挑戦するチャンスがあります。興味のある方は、採用情報をご参考してください。

www.optim.co.jp


参考