Tech Blog

Information Technology / Machine Learning / Data Analysis / Big Data / System Integration

モデルの精度評価(分類問題)

分類問題の精度評価についてまとめておきます。
代表的な評価指標にはどのようなものがあるのか、その中でどれを使えばいいのか、回帰分析の精度は使えるか、について順に書いていきます。

今回は、下記の混合行列で表されるような疾病検査を例にとって説明します。陽性・陰性は予測クラス、疾病あり・疾病なしは正解クラスです。

疾病あり 疾病なし
陽性 {a} {b}
陰性 {c} {d}

評価指標には何かあるか?

一般的によく使われる評価指標に、Precision, Recall, Specificity, F-measure, Accuracy, AUCがある。

1. Precision

 { \displaystyle Precision = \frac{a}{a+b} }

  • 陽性と判定された人のうち、実際に疾病がある人の割合。
  • Precision(精度、適合率), Positive Predictive Value(陽性予測値)と呼ばれる。

2. Recall

 { \displaystyle Recall = \frac{a}{a+c} }

  • 実際に疾病がある人のうち、陽性と判定される人の割合。
  • Recall(再現率), Sensitivity(感度), True Positive Rate(真陽性率)と呼ばれる。

3. Specificity

 { \displaystyle Specificity = \frac{d}{b+d} }

  • 実際に疾病がない人のうち、陰性と判定される人の割合。
  • Specificity(特異度), True Negative Rate(真陰性率)と呼ばれる。

4. F-measure

 { \displaystyle F measure = \frac{2 Precision Recall}{Precision+Recall} }

  • PrecisionとRecallの調和平均。
  • F-measure(F値), F1-measure(F1値)と呼ばれる。Fβ-measureのβ=1の場合に相当している。

5. Accuracy

 { \displaystyle Accuracy = \frac{a+d}{a+b+c+d} }

  • 陽性・陰性が疾病あり・なしを当てる割合。
  • Accuracy(正確度)と呼ばれる。

6. AUC

  • AUC(Area Under the Curve)は、陽性/陰性の閾値を変えながらRecallとSpecificityをプロットした曲線(ROC曲線)の下の面積。
  • 「疾病あり・疾病なしの中から1人ずつランダムに抽出したときに、疾病ありの人の陽性度が疾病なしの人よりも高い確率」を表している。*1
  • 他の指標と異なり、閾値を一意に特定せずに算出する。

評価指標をどう使い分けるか?

上記のように評価指標には様々なものがある。では、どれを使えばいいのか?
一般に、この評価指標が常に有用である、というようなものはない。何を目標にするかによって、それに応じた評価指標を用いるべきである。
その際の指針としては、以下が役立つと思う。

(1) 特定の閾値を設定せずに評価したい場合→AUC
(2) 特定の閾値を設定して評価したい場合
  (a) 疾病あり・疾病なしの重要度が同じ場合→Accuracy
  (b) 疾病ありがより重要である場合
    (ⅰ) 以下の(ⅱ), (ⅲ)の両方に着目したい場合→F-measure
    (ⅱ) 陽性と判定された人のうち疾病の人の割合が重要である場合→Precision
    (ⅲ) 疾病の人のうち陽性と判定される人の割合が重要である場合→Recall

上記の理由を以下で説明する。
まず、特定の閾値を設定せず、モデルそのものの精度を出したい場合は、AUCがよく使われる。その他の指標は閾値を設定後に算出される指標である。
次に、閾値を設定して評価する場合。Accuracyは、正例・負例を逆にしても(つまり、疾病あり・なしと陽性・陰性を同時に逆にしても)、値は変わらない。一方で、Precision, Recall, F-measureの定義は{a}{d}に関して対称ではないため、正例・負例を逆にすると値が違ってくる。すなわち、Accuracyは正例・負例を平等に扱っているのに対して、Precision, Recall, F-measureは正例に着目した指標と言える。
そこで、正例と負例を平等に扱いたいのであれば、Accuracyを利用すべきである。疾病検査の場合、本来の目的は「疾病の人を陽性と判断すること」であり、「疾病でない人を陰性と判断すること」は副次的なものであるため、Accuracyはあまり適切でない。また、疾病が全体の1%程度であるような、データが不均衡である場合は、Accuracyを用いるべきでない。なぜなら、全員に対して陰性と判定することでAccuracyは99%と非常に高くなるが、1%の疾病の人をすべて見逃すことになるからである。
逆に、正例を優先的に扱う場合はPrecision, Recall, F-measureを利用する。Precision, Recallのどちらも着目する場合はその平均であるF-measureを用いるのが良い。Precisionのみ、Recallのみに注目するというシチュエーションは、あまり考えにくい。評価指標がRecallのみだと全員を陽性と判定することによりRecallを1にすることができてしまうし、Precisionのみではそのような極端なことはないが、陽性の閾値を高く設定することで高くすることができてしまう。

回帰分析の評価指標との関係は?

回帰分析は、分類問題の目的変数が連続値バージョンとみることができる。分類問題の学習アルゴリズムの中には、回帰分析を応用させた手法が多く、その場合回帰分析で用いられる評価指標を分類問題でも適用させることができる。
回帰分析の精度指標として、AIC, BICがある:
 { AIC = -2 L + 2 k }
 { BIC = -2 L + k \log n }
ただし、{L}は最大対数尤度、{k}はパラメータ数、{n}はデータ数を表す。
AIC, BICはモデル選択の指標になりにくい。AICBICはテストデータの数によって値や選択されるモデルが大きく変わってしまうし、決定木やランダムフォレストなどの分類問題に特有の手法では算出できないからである。AIC, BICは変数選択の指標にはなるが、モデル選択は分類問題の精度指標を用いるべきであると考えられる。*2
AICBICの使い分けについては、赤池先生が以下のように述べている。*3

(1) 有意なパラメータが容易に識別できるような場合→BIC
(2) 有意性が微妙なパラメータもモデルに含めたい場合→AIC

上記の理由は以下のとおり。データ数が多い場合、BICは第2項のパラメータ数が大きく効いてくるようになる。すなわち、パラメータ数を極力少なくするようなモデルが選択される。一方で、AICの第2項はデータ数によらないため、BICに比べて複雑な(パラメータ数の多い)モデルが選択されやすい。