機械学習系のメトリクスの基礎

この辺りの基礎を抑えたいと思ったので、メモとしてまとめました。


# Confusion Matrix系
![img](https://cdn-images-1.medium.com/max/1600/1*0exdQRxrXQgIBZdPFIxbTw.png)

上記のベン図において、想像しやすくするように、1をガンがある状態、0をガンがない状態としてみる。二軸の `Actual` は実際の状態、 `Predicted` は予想した状態。もっとも基本的なもので、正答率を見るために上記の図が描かれる。実際に学習の際に用いられることはないが、ここで登場する用語は別のメトリクスでも用いられる。

1. **TP (True Positive)** : 1と予測したものが実際に1だった場合。上記の例だと、ガンだと予測された人が実際にガンであった場合。
2.  **TN (True Negative)** : 0と予測したものが実際に0だった場合。上記の例だと、ガンではないと予測された人が実際にガンでなかった場合
3. **FP (False Positive)** : 1と予測したものが実際には0だった場合。上記の例だと、ガンだと予測された人はガンではなかった場合。
4. **FN (False Negative) ** : 0と予測したものが実際には1だった場合。上記の例だと、ガンではないと予測された人が実際にはガンだった場合。

基本的には  **FP** または **FN** は誤検知であるので、これらを減らしたい。

### False Negative の最小化

先述のガンの例を元にすると、最悪のシナリオは、 **ガンではないと予測してしまったが、実際にはガンであり** その結果患者が亡くなることである。ただし、ガン自体は非常に発生確率が低く、例えば、1%しか発生確率がない場合、すべての患者に **ガンではないと診察するだけで、99%の正答が可能** になってしまう。このように、取り返しのつかない致命的なことが生じる場合や発生確率が低い場合では、False Negative を最小化させる方が好ましい。

### False Positive の最小化

致命的なものとは真逆で、頻繁に起こりうる上に、False Negative を見逃してもさほど影響のない事例に当てはまる。具体例は メールのスパム判定。上記の Confusion Matrix の 1をメールがスパムである、0をメールはスパムではないとする。この際の False Positive はスパムだと判定したが、実際はスパムではなかった、 False Negative はスパムではないと判定したが、実際にはスパムだった。具体的なシーンで説明すると、重要なメールを誤検知でスパムだと認識し、勝手に削除される（False Positive）か、メールボックスに誤ってスパムメールが紛れ込むかの違いである。後者は削除していけば良いので、False Positive を最小化していく方法の方が今回には好ましいと言える。

### Accuracy

![img](https://cdn-images-1.medium.com/max/1600/1*5XuZ_86Rfce3qyLt7XMlhw.png)

Accuracy は 全体から TP と TN に分類された数を正解とする方法で、FP と FN を最小化する。目的変数のクラス（多項クラス）がほぼほぼ均等にばらけている時に用いることが可能。逆に、目的変数が一つのクラスに偏りがある場合では、絶対にこの手法を用いてはいけない。

### Precision

![img](https://cdn-images-1.medium.com/max/1200/1*KhlD7Js9leo0B0zfsIfAIA.png)

Precision は Positive を予測されたものに対する正答率を指標にする。機械学習の指標にする場合、FPが最小化されていくので、先述のスパム検知に用いられる。

### Recall

![img](https://cdn-images-1.medium.com/max/1200/1*a8hkMGVHg3fl4kDmSIDY_A.png)

Recall は 実際の状態に対する正答率を指標にする。機械学習の場合、FN が最小化されていくので、ガンの検知のように、見過ごすことができないものに対しては向いている指標である。

### Specificity

![img](https://cdn-images-1.medium.com/max/1200/1*deegiX75imQsVXYVpG_SDQ.png)

Recall の逆で、実際の状態が異なっていると明確に言うための指標。ガンの例を出すのであれば、ガンではないことを言うためのモデルである。

### F1 score

![img](https://cdn-images-1.medium.com/max/1200/1*YjBz5UyU04AqDtS-EagBVw.png)

Recall と Precision を同時に評価したいときに用いる。Precision と Recall のスコアを計算し、その算術平均や加重平均、幾何平均を計算する。




## Regression 系

### Mean Absolute Error

![MAE Equation](https://i.imgur.com/BmBC8VW.jpg)

Mean Absolute Error は 残差の計算として予測値と実際の値との距離の平均値を指標とする方法。しかしながら、残差の平均を取っているために、外れ値などの取り扱いにより、Mean Absolute Value の摂動が大きくなる可能性が高い。

### Mean Squared Error

![MSE Equation](https://i.imgur.com/vB3UAiH.jpg)

Mean Squared Error は、残差の計算として予測値と実際の値の差の二乗の平均値を指標とする。そのために、Mean Absolute Error よりも値は大きくなるので、 MAE と MSE を比較することはできない。また、外れ値が大きくなる設計により、外れ値を大きなペナルティとして機能できるので、それを修正できる。

### Mean Absolute Percentage Error

![MAPE Equation](https://i.imgur.com/YYMpqUY.jpg)

Mean Absolute Percentage Error は、残差の計算として、予測値と測定値の差を測定値の割合で指標とする。測定値が大きくなればなるほど、その誤差は大きくなるはずだが、MAE も MSE も測定値に従わずに一定で計算してしまう。もちろん、外れ値に対してロバストなものであるが、最大の欠点は、yがゼロに近い値になると、無限大に発散してしまう上に、yが極大に発散すると、誤差を過小評価としてみなす恐れがある。

### Mean Percentage Error

![MPE Equation](https://i.imgur.com/ndIXERr.jpg)

MAPE からAbsolute をなくしたもの。MAPE  と同じように実測値が0を含んだり、極端に大きいものがあると計算できない。正値と負値がよしなにキャンセルしてくれるので、そのようなデータセットには使える可能性がある。ただし、割合で残差を計算する際は多くの場合、MAPE の方が有益に働く。

### 一覧表

| Acroynm | Full Name                      | Residual Operation? | Robust To Outliers? |
| ------- | ------------------------------ | ------------------- | ------------------- |
| MAE     | Mean Absolute Error            | Absolute Value      | Yes                 |
| MSE     | Mean Squared Error             | Square              | No                  |
| RMSE    | Root Mean Squared Error        | Square              | No                  |
| MAPE    | Mean Absolute Percentage Error | Absolute Value      | Yes                 |
| MPE     | Mean Percentage Error          | N/A                 | Yes                 |⏎


### References

[Performance Metrics for Classification problems in Machine Learning](https://medium.com/greyatom/performance-metrics-for-classification-problems-in-machine-learning-part-i-b085d432082b)
[Understanding Regression Error Metrics](https://www.dataquest.io/blog/understanding-regression-error-metrics/)