機械学習でよく使う評価指標まとめ

![20190528210419[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295228/99617ba8-8ee2-ae47-275b-fef8a651bad3.png)

# 0. はじめに

このポストでは，CourseraにあるKaggle講座 <b>[How to Win a Data Science Competition: Learn from Top Kagglers](https://ja.coursera.org/learn/competitive-data-science)</b> の講義メモとして，機械学習でよく使われる評価指標を，<b>回帰・分類</b>に分けて整理する．それぞれの評価指標について、定義(①)に加えて，その性質(②)や使用上の注意点(③)なども記す．

- 注1) 紹介する評価指標については，重要で汎用度の高いものに絞っています．辞書的な網羅性はありません．
- 注2) 内容の不足・不備については，些細な点でも，コメントなどにてご指摘いただけると嬉しいです．

# 1. 回帰

- <span style="font-size: 110%">Notation</span>
    - $N$ - number of data samples
    - $y \in \mathbb{R}^{N}$ - target vector (data set)
    - $ \hat{y} \in \mathbb{R}^{N}$ - predicted vector (data set) 
    - $ y\_i \in \mathbb{R} $ - target value (data) 
    - $ \hat{y}\_{i} \in \mathbb{R}$ - predicted value (data) 

### 1.1. MSE, RMSE, R^2

#### 1.1.1. 定義

- `MSE` (Mean Square Error, 平均二乗誤差)
  $$
  MSE(\hat{y}) := \frac{1}{N}\sum\_{i=1}^{N} { ( y\_i - \hat{y}\_{i} ) }^{2}
  $$
- `RMSE` (Root Mean Square Error, 二乗平均平方根誤差)
  $$
  RMSE(\hat{y}) := \sqrt{ \frac{1}{N}\sum\_{i=1}^{N} { ( y\_i - \hat{y}\_{i} ) }^{2} }
  $$
- `R^2` (R-squared, 決定係数)
  $$
  {R^{2}}( \hat{y} ) := 1 - \frac{ \frac{1}{N} \sum\_{i=1}^{N} { ( {y}\_i - \hat{y}\_{i} ) }^{2} }{ \frac{1}{N} \sum\_{i=1}^{N} { ( {y}\_i - \bar{y}) }^{2} } = 1 - \frac{M S E(\hat{y})}{Var(y)}
  $$

#### 1.1.2. 性質

- `MSE`について
  - [MSE](https://en.wikipedia.org/wiki/Mean_squared_error)は，回帰における最も基本的な評価指標
  - 予測値$\hat{y}$の各要素を定数$\alpha$で固定した場合（$\hat{y}\_i = \alpha$），最適な定数$\alpha^{\*}_{MSE}$ は観測データ$y$の平均値$\bar{y}$になる．
      $$
       \alpha^{*}\_{MSE} := \bar{y} = \frac{1}{N}\sum\_{i=1}^{N} y\_i
      $$
- `MSE`, `RMSE`, `R^2`の相違点
  - 損失関数としての性質
    - モデルの予測値$\hat{y}$に対するモデルパラメータ$\theta$の最適化を考える．MSE最小化・RMSE最小化・R^2最大化はいずれも同じ最適解$\theta^*$をもつ．
        $$
        \begin{align}
        MSE(\hat{y}\_{\theta\_1}) &> MSE(\hat{y}\_{\theta\_2}) \\\
        \Leftrightarrow ~~ RMSE(\hat{y}\_{\theta\_1})   &>   RMSE(\hat{y}\_{\theta\_2}) \\\
        \Leftrightarrow ~~ \hspace{1.5em} {R^{2}}(\hat{y}\_{\theta\_1})   &<   {R^{2}}(\hat{y}_{\theta\_2})
        \end{align}
        $$
    - パラメータの更新に，勾配法を使う場合は注意．
      - <a href="https://ja.wikipedia.org/wiki/%E4%BA%8C%E4%B9%97%E5%B9%B3%E5%9D%87%E5%B9%B3%E6%96%B9%E6%A0%B9">`RMSE`</a>を損失関数にした場合，`MSE`よりも更新幅が小さくなる．
        $$
        \frac{\partial RMSE}{\partial \hat{y}\_{i}} = \frac{1}{2 \sqrt{MSE}} \frac{\partial MSE}{\partial \hat{y}\_{i}}
        $$
  - モデルの絶対評価を行う際は，MSEではなく<a href="https://ja.wikipedia.org/wiki/%E6%B1%BA%E5%AE%9A%E4%BF%82%E6%95%B0">`R^2` (`決定係数`)</a>がよく使われる．
    - R^2：データに対するモデルの当てはまりの良さ
    - R^2の拡張（モデル選択）
      - <a href="https://en.wikipedia.org/wiki/Coefficient_of_determination#Adjusted_R2">Adjusted R^2  (自由度調整済み決定係数)</a>
      - <a href="https://en.wikipedia.org/wiki/Mallows%27s_Cp">MallowsのCp規準  (※線形回帰モデルにのみ適用可能)</a>
      - <a href="https://ja.wikipedia.org/wiki/%E8%B5%A4%E6%B1%A0%E6%83%85%E5%A0%B1%E9%87%8F%E8%A6%8F%E6%BA%96">AIC  (赤池情報量規準)</a>



### 1.2. MAE

#### 1.2.1. 定義

- `MAE` (Mean Absolute Error, 平均絶対誤差)
  $$
  MAE(\hat{y}) := \frac{1}{N}\sum\_{i=1}^{N} \left| y\_i - \hat{y}\_{i} \right|
  $$

#### 1.2.2. 性質

- `MAE`について
  -  予測値$\hat{y}$の各要素を定数 $ \alpha$ で固定した場合（$\hat{y}\_i = \alpha$），最適な定数 $ \alpha^{\*}\_{MAE}$は観測データ$y$の中央値$median(y)$になる．
      $$
       \alpha^{*}_{MAE} := median(y)
      $$
  - 損失関数としての性質
    - <a href="https://en.wikipedia.org/wiki/Mean_absolute_error">MAE</a>を損失関数とする場合，勾配法はあまり使われない
    - 予測値 $\hat{y}$の各要素を定数$\alpha$で固定した場合（$\hat{y}\_i = \alpha$），
      - $ \frac{\partial MAE}{\partial \hat{y}\_{i}} ~$ : ステップ関数 (原点では微分不可能)
      - $ \frac{{\partial}^{2} MAE}{\partial {\hat{y}\_{i}}^{2}}$ : 常に0 (原点では微分不可能) <br>
  - MSEよりも，データに対する`ロバスト性`が高い．
    - データに外れ値があった場合，`MSE`が評価する誤差は，`MAE`の2倍．
    - データの`平均値`は外れ値に影響されるが，`中央値`は外れ値に対して頑健．
  - MSEよりも，指標としての解釈性が高い．
    - ファイナンスの文脈でよく使われる．<br><br>

- `Huber損失`
  - MSEとMAEをミックスさせた評価指標として，<a href="http://ibisforest.org/index.php?Huber%E9%96%A2%E6%95%B0">`Huber損失`</a>がある．`ロバスト推定`や`SVM`の損失関数に用いられる．
    - Cf.) Huber, Peter J. (1964). “Robust Estimation of a Location Parameter”. Annals of Statistics 53 (1): 73–101. doi:10.1214/aoms/1177703732. JSTOR 2238020.
    $$
    Huber~loss := \frac{1}{N} \sum\_{i=1}^{N} {L}\_{\delta}(y\_i, \hat{y}\_{i}) \\\
    {L}\_{\delta}(y\_i, \hat{y}\_{i}) = \left\\{
    \begin{array}{c} 
    \frac{1}{2} {( y\_{i} - \hat{y}\_{i} )}^{2} \hspace{4em} ( |y\_{i} - \hat{y}\_{i}| \leq \delta )   \\\  
    \delta \cdot ( |y\_{i} - \hat{y}\_{i}| - \frac{1}{2}\delta)  \hspace{1em} ( |y\_{i} - \hat{y}\_{i}| \gt \delta )  
    \end{array}
    \right.
    $$
- `Quantile Regression` (分位点回帰)
  - MAEを損失関数とする回帰は，`Median Regression`とも呼ばれるが，その一般化として，<a href="https://en.wikipedia.org/wiki/Quantile_regression">`Quantile Regression` (分位点回帰)</a>というものもある．
    - Cf.) <a href="http://www.econ.uiuc.edu/~roger/research/rq/rq.pdf">Koenker, Roger & Kevin F. Hallock. 2001. "Quantile Regression." Journal of Economic Perspectives, 15 (4): 143-156.DOI: 10.1257/jep.15.4.143</a>


### 1.3. (R)MSPEとMAPE

#### 1.3.1. 定義

- `MSPE` (Mean Square Percentage Error, 平均平方二乗誤差率)
  $$
  MSPE(\hat{y}) := \frac{100}{N} \sum\_{i=1}^{N} { \left( \frac{y\_i - \hat{y}\_{i} }{y\_i} \right) }^{2} 
  $$
- `MSAE` (Mean Absolute Percentage Error, 平均絶対誤差率)
  $$
  MSAE(\hat{y}) := \frac{100}{N} \sum\_{i=1}^{N} \left| \frac{y\_i - \hat{y}\_{i} }{y\_i} \right| 
  $$

#### 1.3.2. 性質

- `相対誤差`と`絶対誤差`
  - 絶対誤差 = $ y_i - \hat{y}\_{i} $
  - 相対誤差 = $ (y\_i - \hat{y}\_{i}) ~/~ y\_{i} $
    - Cf.) <a href="https://mathwords.net/soutaigosa">相対誤差の計算方法と意義</a>
- `MSPE`について
  - MSEを相対誤差で評価したもの．
  - %表示（百分率）にすることが多い．
  - 例：観測値$ y_i $と予測値$ \hat{y}\_{i}$（$N=1$）が以下のような場合
    - If  $ ({y}\_{1} = 90, ~~ \hat{y}\_{1} = 100) $  then,  $ MSE=100, ~~ MSPE=1 $
    - If  $ ({y}\_{2} = 900, ~~ \hat{y}\_{2} = 1000) $  then,  $ MSE=10000, ~~ MSPE=1 $
  - 損失関数としての性質
    - 予測値$\hat{y}$の各要素を定数$\alpha$で固定した場合（$\hat{y}\_{i} = \alpha$），最適な定数 $\alpha^{*}\_{MSPE}$ は観測データ$y$の重み付き平均値 $w(\bar{y})$ になる．
    - 値が小さいデータに対して過剰にfitしようとする．（バイアス）
- `MAPE`について
  - MAEを相対誤差で評価したもの．
  - %表示（百分率）にすることが多い．
  - 例：観測値$ y_i $と予測値$ \hat{y}\_{i}$（$N=1$）が以下のような場合
    <br> If  $ ( y\_1 = 90, ~~~ \hat{y}\_1 = 100) ~~ $ then, $ MAE=10, ~~~ MAPE=1 $
    <br> If  $ ( y\_2 = 900, ~ \hat{y}\_2 = 1000) $ then, $ MAE=100, ~ MAPE=1 $
  - 損失関数としての性質
    - 予測値$\hat{y}$の各要素を定数$ \alpha$で固定した場合（$ \hat{y}\_{i} = \alpha$），最適な定数 $ \alpha^{*}\_{MAPE}$ は観測データ$y$の重み付き中央値 $ w(\text{median}(y))$になる．
    - 値が小さいデータに対して過剰にfitしようとする．（バイアス）

### 1.4. RMSLE

#### 1.4.1. 定義

- `RMSLE` (Root Mean Square Logarithmic Error, 平均平方二乗対数誤差)
  $$
  \begin{eqnarray}
  RMSLE(\hat{y}) &:=& \sqrt{ \frac{1}{N}\sum\_{i=1}^{N} { \left\\{ \log(y\_i + 1) - \log(\hat{y}\_{i} + 1) \right\\} }^{2} } \\
&=& \sqrt{ MSE(\log(y\_i + 1), \log(\hat{y}\_{i} + 1) ) }
  \end{eqnarray}
  $$

#### 1.4.2. 性質

- `RMSLE`について
  - MSEをlogスケールで表現したもの
  - 絶対誤差を，相対誤差(MSPE, MAPE)ではなくlogスケールで表現．<br>$y_i$ の大小を考慮して誤差評価
  - 損失関数として用いる場合，$ \hat{y} $ に対して凸かつ非対称
    - $ \hat{y} $ > 極小値 → 傾きが小さい
    - $ \hat{y} $ < 極小値 → 傾きが大きい


<br><br>

# 2. 分類

- <span style="font-size: 110%">Notation</span>
    - $N$ - number of data samples
    - $L$ - number of classes       
    - $y_i$ - ground truth (data) 
    - $\hat{y}_{i}$ - predictions (data)
    - $ y_{il}$ - probability that $i$-th sample belongs $l$-th label
    - $\hat{y}_{il}$ - confidence that $i$-th sample belongs $l$-th label
    - $ \[ a = b\]$ - indicator factor

<div></div>

### 二値分類の基本指標

- `混同行列` (`Confusion matrix`)
    - 二値分類(Binary classification)タスクのみに使う．
        - `True Positive` (`TP`)
            - Positiveサンプルのうち，正しくPositiveと分類されたもの
        - `False Positive` (`FP`)
            - Negativeサンプルのうち，間違ってPositiveと分類されたもの
        - `False Negative` (`FN`)
            - Positiveサンプルのうち，間違ってNegativeと分類されたもの
        - `True Negative` (`TN`)
            - Negativeサンプルのうち，正しくNegativeと分類されたもの
        - Cf.) <a href="https://towardsdatascience.com/understanding-confusion-matrix-a9ad42dcfd62">Understanding Confusion Matrix - Towards Data Science</a>
    - 代表的な評価指標
        - `正答率` (`Accuracy`) = (TP+TN) / (TP+FP+TN+FN)
        - `精度` (`Precision`) = TP / (TP+FP)
        - `検出率` (`Recall`) = TP / (TP+FN)
        - `F値` (`F-Measures`) = $ \frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}$
        - Cf.) <a href="https://towardsdatascience.com/accuracy-precision-recall-or-f1-331fb37c5cb9">Accuracy, Precision, Recall or F1? - Towards Data Science</a>
    - ROC曲線 (Receiver Operating Curve, 受信者操作曲線)
        - しきい値$b$を変化させたときの真陽性率 (TP Rate)と偽陽性率 (FP Rate)の関係を曲線でプロットしたもの
          - `真陽性率` (TP Rate) = TP / (TP+FN) = `感度` (`Sensitivity`) = `検出率` (`Recall`)
          - `偽陽性率` (FP Rate) = FP / (FP+TN)
          - `偽陰性率` (FN Rate) = FN / (TP+FN)
          - `真陰性率` (TN Rate) = TN / (FP+TN) = `特異度` (`Specificity`)
      - Cf.) <a href="https://www-users.cs.umn.edu/~kumar001/dmbook/ch3_classification.pdf">Pang-Ning Tan, Introduction to Data Mining (2nd Edition), Chapter 3 "Classification: Basic Concepts and Techniques"</a>


### 2.1. Accuracy

#### 2.1.1. 定義

- `Accuracy` (正答率)
  $$
  Accuracy := \frac{1}{N}\sum\_{i=1}^{N} \[ y\_i = \hat{y}\_{i} \]
  $$
- `Error` (誤り率)
  $$
  Error := \frac{1}{N}\sum\_{i=1}^{N} \[ y\_i \neq \hat{y}\_{i} \]
  $$

#### 2.1.2. 性質

- `Soft prediction` と `Hard prediction`
    - `soft labels` (= soft predictions)
        - $ f(x) \in \mathbb{R}^{L}$ - 分類モデル$f$の出力スコア
    - `hard labels` (= hard predictions)
        - $ \underset{i}{\rm argmax} ~ f\_{i} (x)$ - 分類モデル$f$が最大スコアを出力したラベル
        - $ \left\[ b \lt f(x) \in \mathbb{R}^{L} \right\]$，$b$: しきい値
- `Accuracy`について
    - `Hard prediction`なので，解釈が難しい．
        - 分類モデル$f$の出力値そのものではなくて，$\text{argmax}()$で評価する．
    - 損失関数として用いると，最適化が難しい．
    - best conts. $\alpha^{\*}(x)$：最も頻度の高いクラスに固定する．
    - 例（$N = 100$）
        - Dataset
            - 10 cats
            - 90 dogs
        - $\alpha^{\*}(x) = "dogs"$

### 2.2. LogLoss

#### 2.2.1. 定義

- `Binary LogLoss`
  $$
  Losloss := - \frac{1}{N}\sum\_{i=1}^{N} \left\\{ y\_i \log \hat{y}\_{i} + (1 - y\_i) \log (1 - \hat{y}\_i) \right\\}, ~~ y\_i, \hat{y}\_{i} \in \mathbb{R}
  $$
- `Multiclass LogLoss`
  $$
  Logloss := - \frac{1}{N} \sum\_{i=1}^{N} \sum\_{l=1}^{L} y\_{il} \log \hat{y}\_{il}, ~~ y\_i, \hat{y}\_{i} \in \mathbb{R}^{L}
  $$

#### 2.2.2. 性質

- `LogLoss` (Logarithmic loss)について
    - LogLoss $\in$ `Soft prediction`．
    - 損失関数として用いると，最適化が簡単．
    - best conts. $\alpha^{\*}\_{i}(x)$
        - これは，$i$-th クラスの頻度（経験分布）．
    - 例（$N = 100$）
        - Dataset
            - 10 cats
            - 90 dogs
        - $ \alpha^{\*}(x) = \[0.1, 0.9 \]$


### 2.3. AUC (ROC)

#### 2.3.1. 定義

- `AUC` (Area under the ROC Curve)
  $$
  AUC := \frac{(\text{correctly orderd pairs})}{(\text{total number of pairs})}
  $$

#### 2.3.2. 性質

- `AUC`（`ROC`）について
    - AUCは，`二値分類タスク`（Binary classification）のみに使う
        - Cf.) <a href="https://okumuralab.github.io/">奥村先生</a>による<a href="https://oku.edu.mie-u.ac.jp/~okumura/stat/ROC.html">AUC (ROC)の解説ページ</a>
    - サンプルに対する識別結果の"順序"にのみ依存，分類モデルの"出力値"には非依存．
    - best consts. $ \alpha^{\*}_{i}(x)$：任意の定数に固定してもAUCの値は同じ．
        - AUCは，分類平面（しきい値）に依らない．
    - AUCの説明
        - AUC := ROC曲線（Receiver Operating Curve）の下側面積
            - `Wilcoxon-Mann-Whitney検定`（WMW検定）
            - `Brunner-Munzel検定`
        - サンプルペアの順序
            - 正しい順序に分類されたサンプルペアの割合
              $$ AUC := \frac{(\text{correctly orderd pairs})}{(\text{total number of pairs})} $$
    - pythonの場合，<a href="https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html">`sklearn.metrics.roc_curve()`</a>と<a href="https://scikit-learn.org/stable/modules/generated/sklearn.metrics.auc.html">`sklearn.metrics.auc()`</a>を使って計算できる．

### 2.4. Cohen’s Kappa

#### 2.4.1. 定義

- `Cohen’s Kappa` ($ \kappa$係数, $\kappa$統計量)
  $$
  \text{Kappa} := 1 - \frac{1 - \text{accuracy}}{1 - p\_{e}} = 1 - \frac{(\text{error})}{(\text{baseline error})} \\\\
  p\_{e} := \frac{1}{N^{2}} \sum\_{k} n\_{k1} n\_{k2}
  $$
    - Notations
        - $i$ - 評価者
        - $k$ - 識別するクラス
        - $n_{ki}$ - 評価者 $i$ がクラス $k$ であると識別したサンプルの数
        - $N$ - サンプルの数
        - $p_{e}$ - 各サンプルをランダムに識別した場合の平均正答率

- `Weighted Kappa` (重み付けカッパ係数)
  $$
  \text{Weighted Kappa} := 1 - \frac{(\text{weighted error})}{(\text{weighted baseline error})}  \\\\
  \text{weighted error} := \frac{1}{Z} \sum_{i,j} c_{ij} w_{ij}
  $$
    - Notations
        - $c_{ij}$ - 混同行列$C$の$(i, j)$成分
        - $w_{ij}$ - 重み行列$W$の$(i, j)$成分
        - $Z$ - 規格化定数

#### 2.4.2. 性質

- `Cohen's Kappa` について
    - <a href="https://en.wikipedia.org/wiki/Jacob_Cohen_(statistician)">Jacob Cohen</a>が1960年に発表．
    - 基準となるスコア(baseline)を0に正規化して，任意のモデルの性能を表現．
        - 「`Kappa` - `Accuracy` の関係性」は，「`R^2` - `MSE` の関係性」に似ている．
- `Weighted Kappa`について
    - Accuracy(Error)に重みづけを行ってKappaを計算．
        - $ weighted~error := \frac{1}{Z} \sum_{i,j} c_{ij} w_{ij}$
        - $ c_{ij} $：混同行列$ C \in \mathbb{R}^{L \times L}$の$(i, j)$成分　※$L$ - 識別するクラス数
        - $ w_{ij} $：重み行列$ W \in \mathbb{R}^{L \times L}$の$(i, j)$成分　※$L$ - 識別するクラス数
    - 混同行列$C$
        - TP, FP, FN, FP
    - 重み行列$W$
        - "順序つき"クラスラベルの分類に使う．
        - 例：病気のレベルに応じたクラス分類    - 重み行列$W$の構成法
        - `Linear weights`：$ w_{ij} = |i - j|$
        - `Quadratic weights`：$w_{ij} = {(i - j)}^{2}$
    - `Quadratic Weighted Kappa`を損失関数に使う場合，典型的には`MSE`で近似する．
        - Cf.) 解析的に解く方法もある．<a href="https://arxiv.org/abs/1509.07107">"On The Direct Maximization of Quadratic Weighted Kappa" (2015)</a>
    - 例（$N = 100$）
        - Dataset
            - 10 cats
            - 90 dogs
            - 20 tigers

以上です。
最後まで読んでいただきありがとうございます。

<div class='pixels-photo'>
<a href='https://500px.com/photo/1020512355/*-by-kostoula-mazaraki' alt='* by Kostoula Mazaraki on 500px.com'>
  <img src='https://drscdn.500px.org/photo/1020512355/m%3D900/v2?sig=d27580e5c9d86ebcd88d788ec9b5ba42378b788888dcc726aa4bc9682a71d042' alt='* by Kostoula Mazaraki on 500px.com' />
</a>
</div>

<script type='text/javascript' src='https://500px.com/embed.js'></script>