Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

【ML Tech RPT. 】第11回 機械学習のモデルの評価方法 (Evaluation Metrics) を学ぶ (2)

f:id:ssatsuki040508:20181210005017p:plain
DSOC研究員の吉村です. 弊社には「よいこ」という社内の部活のような社内制度があり, 私はその中のテニス部に所属しています. 月一程度で活動をしているのですが, 最近は新たに入社された部員も増えてきて新しい風を感じています.

さて, 今回も前回に引き続き「機械学習のモデルの評価方法 (Evaluation Metrics)」に焦点を当てていきます. (今回も前回同様, "モデル" という言葉を機械学習のモデルという意味で用います.) 前回は, モデルを評価する観点や注意事項について確認しました. 今回からは, 各種問題設定ごとにどのような評価指標が存在し, それらが何を意味するのかについて見ていこうと思います. 今回は二値分類問題を取り扱います. 前回の記事の最後で, 多クラス (マルチクラス) 分類・回帰問題についても本記事で取り扱うと書きましたが, 量が多くなりすぎてしまったため, これら二つは次回以降に説明します. では早速本題に入っていきましょう.

二値分類における精度評価

二値分類は, 機械学習における分類問題の中で最も基本的な問題です. 簡単に説明しておくと, 二値分類とは正か負かを真のラベルに持つ各種事例に対して, モデルでその正負を正しく予測することが目的となる問題設定です .

今回は, モデルの出力が何かによって, 二値分類の評価方法を二つにグループ分けます. 一つがモデルの最終的な出力を  [0, 1] 間の信頼度 (Confidence Score) で扱う方法で, もう一つが, モデルの最終的な出力結果を  \{0, 1\} の二値で扱う方法です. 信頼度が与えられている時には, 閾値を設定することで結果を二値で扱うことができるため, 後者での評価も可能です. 順番は前後しますが, まずはより直感的な後者の方法から見ていきます. なお, 本記事では [*1] を参考にしています.

真のラベルが二値, モデルの出力も二値の場合



このグループの評価指標には, 次のようなものが考えられます.

  1. Confusion Matrix (混合行列)
  2. Accuracy (正答率)
  3. Balanced Accuracy
  4. Precision (適合率)
  5. Recall (再現率), Sensitivity (感度)
  6. F1 Score (F値)
  7. Weighted F Score (重み付きF値)
  8. Detection Prevalence
  9. Specificity (特異度)
  10. Detection Rate
  11. Youden's J Index

それでは, 一つずつ見ていきます. これ以降, 評価対象の事例総数を  M で表すことに注意してください.

Confusion Matrix (混合行列)

Confusion Matrix は, 評価指標というより結果の可視化の方法の一つであり, 真の値と予測結果の組み合わせを表にまとめたものです. 下にConfusion Matrixの例を示します. ただし, この表では  y \in \{0, 1\} は各事例の真の値を表し,  z \in \{0, 1\} は各事例の予測値を表します.

f:id:ssatsuki040508:20191015125815p:plain
Confusion Matrix (混合行列) の例. この場合, 全サンプル数は194件.

Confusion Matrix を用いると, どのような真の値のものをどのように予測したかが一目でわかるため, モデルの概要を知る際に見ると良いと考えられます.


この後の説明の簡略化のために, この表を用いて次の四つの概念についても説明しておきます.

  1. TP (True Positive, 真陽性): 正例に (正しく) 正と予測を与えることができたもの.
  2. TN (True Negative, 真陰性): 負例に (正しく) 負と予測を与えることができたもの.
  3. FP (False Positive, 偽陽性, 第一種過誤,  \alpha過誤): 負例に (誤って) 正と予測を与えてしまったもの.
  4. FN (False Negative, 偽陰性, 第二種過誤,  \beta過誤): 正例に (誤って) 負と予測を与えてしまったもの.
Accuracy (正答率)

Accuracyは評価対象事例全てに対して, 正しく分類できた割合を意味する指標で, 下記の式で与えられます[*2].

 \begin{eqnarray}

\text{Accuracy} &=& \frac{\text{正解した評価事例数}}{\text{評価事例数}} = \frac{\#(TP)+\#(TN)}{\#(TP)+\#(TN)+\#(FP)+\#(FN)}\\
              &=& \frac{\#(TP)+\#(TN)}{M}

\end{eqnarray}

Accuracyを利用する場面では, 正例を正と予測すること (TP) と, 負例を負と予測すること (TN) との重要さが大凡同じであるという仮定が暗黙のうちに置かれています. そのため, 正例と負例のいずれか一方が極端に多く, もう一方が極端に少ないような Imbalanced data (不均衡データ) の場合には, Accuracyを用いて性能評価をすることは適切ではない場合が多いです. 何故ならば, 極端に多い方のラベル (仮に評価対象事例全体の99%とする) を常に出力するようなモデルを作れば, それだけで Accuracyは非常に高い値 (この場合は, 0.99) を達成することになります. このような評価で良いとする場合はほとんどないと考えられます. 何故なら, Imbalanced data に関する予測の場合には, いかに余計なものを拾わずに少ない方のラベルを多く拾い上げられるかに焦点が当てられることが多いためです.

Balanced Accuracy

Balanced Accuracy は, 正例と負例の数を元にAccuracyのバランスをとった指標で, 下記の式で与えられます [*3]. ただし,  Pは正例の数,  Nは負例の数を表します.

 \begin{eqnarray}

\text{Balanced Accuracy} &=& \frac{1}{2}(\frac{\#(TP)}{\#(TP)+\#(FN)} + \frac{\#(TN)}{\#(TN)+\#(FP)}) \\
 &=& \frac{1}{2}(\frac{\#(TP)}{P} + \frac{\#(TN)}{N})
\end{eqnarray}

Balanced Accuracy は Accuracy を用いる際の, 不均衡データに対する性能評価があまり適切ではないという点を考慮した評価指標であり, 式を見ると正例を正しく予測できる割合と, 負例を正しく予測できる割合の平均をとっていることがわかります. これにより, 不均衡データの場合に, 不均衡データだったという理由だけで非常に高い Accuracy を達成するモデルは, Balanced Accuracy ではその値がチャンスレート (完全にランダムに正負を予測した時に得られる評価結果) である 0.5 に近づくように設計されています. そのため, 不均衡データの場合には Accuracy を用いるよりは Balanced Accuracy を用いる方が良さそうです. Balanced Accuracy の数値は, 真の値が0.5ずつの確率で正負をとる場合に, 予測結果が正しく (TP or TN) なる確率と解釈することができます.

Precision (適合率)

Precision は, 全ての正と予測した事例のうち, 実際に正例である割合を表す評価指標であり, 下記の式で与えられます.

$$\text{Precision} = \frac{\#(TP)}{\#(TP)+\#(FP)}$$

Precision を用いるのは, 極力誤りなく正例を検出したいというモチベーションがある時だと考えられます. これは, 疑わしきは罰せずという制約の中で, 出来るだけ正確に罰する対象をあぶり出す際などに有用です.

Recall (再現率), Sensitivity (感度)

Recall (Sensitivity) とは, 全ての正例のうち, 正と予測された事例の割合を表す評価指標であり, 下記の式で与えられます.

$$\text{Recall} = \frac{\#(TP)}{\#(TP)+\#(FN)}$$

Recall を用いるのは, 多少負例を正例と予測しても良いので, 出来るだけ全ての正例を正と予測したい場合だと考えられます. これは, 見落としが出来るだけ少なくなるようにという目的を満たす際の指標としては適切なものと言えます. 基本的には, 先に述べた Precision と Recall は trade-off (片方が向上すれば, 片方が低下する) 関係にあることに注意が必要です.

 \text{F}_1 Score (F値)

 \text{F}_1 Score は, Precision と Recall の調和平均の値で, 下記の式で表されます.

$$\text{F}_1 = \frac{2 \cdot \text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} = \frac{2 \cdot \#(TP)}{2 \cdot \#(TP)+\#(FN)+\#(FP)}$$

Precision と Recall の式を代入して整理すると,  \text{F}_1 ScoreはTP数の2倍とFP数とFN数の和に対する, TP数の2倍の割合ということになります. これから,  \text{F}_1 Scoreの式の中にはTNに関する部分が, 一切評価指標に現れないことがわかります. そのため, TN についての興味が場合にはF1 Score を用いると良いのではないでしょうか.

Weighted F Score (重み付きF値)

Weighted F Scoreは, Recallに対するPrecisionの重要度を  \beta で調整した評価指標で, 下記の式で表されます.

 \begin{eqnarray}
\text{F}_{\beta}&=& \frac{(1+\beta^2) \cdot \text{Precision} \cdot \text{Recall}}{\beta^2 \text{Precision} + \text{Recall}} \\ &=& \frac{(1+\beta^2)\cdot \#(TP)}{(1+\beta^2) \cdot\#(TP)+ \beta^2 \cdot \#(FN)+\#(FP)}

\end{eqnarray}

見ての通り,  \beta=1 \text{F}_1 Score と一致します.  0 < \beta < 1 ではRecall を重視し,  1 < \beta ではPrecisionを重視することになります. 評価に際して新たなパラメータ  \beta が出てくることからもわかる通り, この指標を用いるためには予め  \beta を決めておく必要があります. 事前に決められた  \beta に基づいて計算された, 最終的な  \text{F}_\beta の値が直感的に何を表しているのかを考えるのは難しそうです.

Detection Prevalence

Detection Prevalence は全事例のうち正と予測した割合のことで, 下記の式で表されます.

$$\text{Detection Prevalence} = \frac{\#(TP)+\#(FP)}{\#(TP)+\#(FP)+\#(TN)+\#(FN)}= \frac{\#(TP)+\#(FP)}{M}$$

こちらは見ての通り, モデルがテストデータを入力した時に, 正と予測する割合です. 直接的な評価に用いるというよりは, モデルの傾向を掴む時に用いると良いかもしれません.

Specificity (特異度)

Specificity は負例を正しく負と予測できる件数の割合を表す指標で, 下記の式で表されます.

$$\text{Specificity}=\frac{\#(TN)}{\#(TN)+\#(FP)}$$

簡単に言えば, 負例に着目した Recall のようなものです. 負例を出来るだけ拾い上げたい場合には適切な評価指標だと考えられます.

Detection Rate

Detection Rate は, 全評価対象事例中, TP の割合を表す指標で, 下記の式で表されます.

$$\text{Detection Rate}=\frac{\#(TP)}{\#(TP)+\#(TN)+\#(FP)+\#(FN)} = \frac{\#(TP)}{M}$$

Detection Rate を上げるためには, TP 数を増やすしかないですが, そもそもテストデータの中の正例の数は決まっているため, この値を絶対的なものとして用いることは難しいです. つまり, 負例が一件でもあれば, Detection Rateが1になることはないことには注意が必要です.

Youden's J Index

Youden's J Index は下記の式で与えられる評価指標です.

$$\text{Youden's J Index}=\text{Sensitivity} + \text{Specificity} - 1$$

こちらは, モデル自体の評価というより, 閾値を決める際の指標として用いられているようです. 具体的には, この Youden's J Index が最大になるようにモデルの閾値を決めるようです.

真のラベルが二値, モデルの出力は信頼度の場合



このグループの評価指標には, 次のようなものが考えられます.

  1. AUC
  2. Gini Coefficient (ジニ係数)
  3. Log Loss (クロスエントロピー)
  4. Concordance
  5. Somers' D (ソマーズのD)

では, こちらも一つずつ見ていきます.

AUC (Area Under the Curve)

f:id:ssatsuki040508:20191015172605p:plain
ROC Curve とチャンスレート.
AUCとは, ROC曲線 または, PR曲線 の下側の面積の値のことです. ROC曲線 (Receiver Operator Characteristics curve) [*4] とは, x軸を (1 -Specificity), y軸を Recall として, モデルの出力の信頼度を各閾値で分割した結果をプロットした曲線のことです. また, PR曲線 (Precision Recall Curve)とは, x軸をRecall, y軸をPrecisionとして, モデルの出力の信頼度を各閾値で分割した結果をプロットした曲線のことです. ROC曲線やPR曲線は, 閾値をずらして各軸の値が変わるごとに点をプロットして作図していきますが, 信頼度の大きさの順位によってのみ決まる図であるということには注意が必要です. ROCを用いた場合の AUC (以降, ROC AUC と呼ぶ.) は, チャンスレートが0.5であり, ROC AUC = 0.5 の時のモデルは, 全ての出力をランダムに与えているのと同様の意味を持っており, ROC AUC = 1.0 は全てを完璧に予測できていることを表します. 基本的には, ROC AUC の最低値は0.5であり, 最大値は1.0です. 仮に0.5よりも小さい ROC AUCの値 が得られた場合には, 正負を入れ替えることで, 0.5よりも大きな ROC AUC の値をもつモデルを作成することが可能になります.

Gini Coefficient (ジニ係数)

Gini Coefficient は, ROC AUC の2倍から1を引いた次の式で表される評価指標です.

$$\text{Gini Coefficient} = 2 \cdot (\text{ROC AUC}) - 1$$

ジニ係数は, チャンスレートからのモデルの性能差分を確認する手法です. AUC とどう使い分けるかは難しいところです. ジニ係数はモデルや特徴量選択にも用いられているようです.

Log Loss (クロスエントロピー)

Log Loss はいわゆる, クロスエントロピー損失のことで, こちらは下記の式で表される損失関数として定義されます. ただし,  i は各評価対象事例の添字を表し,  y_i \in \{0, 1\} z_i \in [0,1]はそれぞれ, 評価対象事例 iの真の値と, 信頼度を表します.

$$LogLoss=- \sum_{i=0}^n(y_i \log{z_i} + (1 -y_i)\log{(1-z_i)})$$

Log Loss で評価される値は, 高い信頼度で誤った予測結果に対して, 大きなペナルティが課されます. 例えば, 負例に対して信頼度0.99だった場合, この事例に対する損失は  -\log(1-0.99)=-\log(0.01)=2であり, 同じ負例に対して信頼度0.9999だった場合, この事例に対する損失は  -\log(1-0.9999)=-\log(0.0001)=4 となり, より高い信頼度での誤りに対して厳しい評価を下します. (ただし, この例では底を10としています.) そのため, 高い信頼度で間違えることに対するコストが大きい場合にLogLossは有効です.

Concordance

Concordance は, 全ての正例と負例とのペアに対して, 正例の方が負例より信頼度が高くなるペアが全ペアの何割を占めるかを表す指標で, 次の式で表すことができます. ただし,  \mathcal{P} \mathcal{N} はそれぞれ, 正例と負例の各事例の添字集合を表し,  \mathbb{I}[\cdot] は, その引数の論理式が正の場合に1を, 負の場合に0を返す指示関数とします.

$$\text{Concordance} = \sum_{i \in\mathcal{P}, j \in \mathcal{N}}\frac{\mathbb{I[z_i > z_j]}}{P \cdot N}$$

こちらは, いかに矛盾なく各評価対象事例に対して信頼度が与えられているかを表す指標と言えます.

ちなみに, 正例の方が負例より信頼度が高いペアをConcordantと呼び, 負例の方が正例より信頼度が高いペアDiscordantと呼びます.

Somers' D (ソマーズのD)

Somers' D は, Concordant に加えて, Discordantや差がない場合 (Tie) も考慮した評価指標で, 下記の式で表すことができます.

$$\text{Somers' D} = \frac{\sum_{i \in\mathcal{P}, j \in \mathcal{N}}(\mathbb{I}[z_i > z_j] - \mathbb{I}[z_i < z_j] - \mathbb{I}[z_i = z_j])}{P \cdot N}$$

こちらは, (Concordant数-Discordant数-Tie数) を正例と負例のペアの総数で割った値です. Concordance に比べて, モデル間の小さな性能差はこちらの方が大きな差として現れます.

まとめ

今回は, 二値分類の評価指標に絞って見ていきました. 紹介しただけでも16個もの評価指標があり, 非常に多いことがわかりました. また, それぞれについて, どのような時に用いるのかや, その値をどのように解釈したらいいのかについて, 私なりの考えをまとめました. 一部, 使い所のわからない指標もありましたが, 何れにしても, 自らで何がどうなっていることを測定できる指標なのかというのを分かった上で, 使用することが重要だと思います.

次回は, 今回触れることができなかった, 多クラス分類と回帰問題の評価指標についてまとめていきたいと思います. 今回は, 少し長くなってしまいましたが, 読んでいただきありがとうございました. 引き続き連載を楽しみにしてくださると幸いです.

*1:https://www.machinelearningplus.com/machine-learning/evaluation-metrics-classification-models-r/

*2:高村大也, "言語処理のための機械学習入門," コロナ社, 2010.

*3:K. H. Brodersen, C. S. Ong, K. E. Stephan, and J. M. Buhmann, "The Balanced Accuracy and Its Posterior Distribution," in ICPR, 2010.

*4:平井有三, "はじめてのパターン認識," 森北出版, 2012

© Sansan, Inc.