機械学習でよく使う評価指標まとめ
このポストでは,機械学習でよく使われる評価指標を,回帰・分類に分けて整理します.また,各評価指標の定義だけではなく,その性質や使用上の注意点などにも言及しました.なお,"網羅性"を過度に追求して,世にある評価指標を片っ端からリストアップすると,ポストとしての目的が分からず,何より煩雑で見づらくなってしまうと思ったので,紹介する評価指標については,重要で汎用度の高いものに絞りました.
なお,このポストの内容は,CourseraにあるKaggle講座「How to Win a Data Science Competition: Learn from Top Kagglers」をまとめたものです. ja.coursera.org
※ 評価指標については随時,追加・更新していく予定です.このポストの内容には多分に不足/不備が含まれていると思われますが,些細な点でも,コメントなどにてご指摘いただけるととても嬉しいです.
1. 回帰
- Notation
1.1. MSE, RMSE, R2
- 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} } $$
- R2 (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)} $$
- MSEについて
- MSEは,回帰における最も基本的な評価指標
- 予測値の各要素を定数で固定した場合(),最適な定数 は観測データ の平均値になる. $$ \alpha^{*}_{MSE} := \bar{y} = \frac{1}{N}\sum_{i=1}^{N} y_i $$
- MSE, RMSE, R2の相違点
- 損失関数としての性質
- モデルの予測値に対するモデルパラメータの最適化を考える.MSE・RMSE・R2はいずれも同じ. $$ \begin{eqnarray} MSE(\hat{y}_{\theta_1}) & > & MSE(\hat{y}_{\theta_2}) \\ \Leftrightarrow RMSE(\hat{y}_{\theta_1}) & > & RMSE(\hat{y}_{\theta_2}) \\ \Leftrightarrow \hspace{1.37em} {R^{2}}(\hat{y}_{\theta_1}) & > & {R^{2}}(\hat{y}_{\theta_2}) \end{eqnarray} $$
- パラメータの更新に,勾配法を使う場合は注意.
- RMSEを損失関数にした場合,MSEよりも更新幅が小さくなる. $$ \frac{\partial RMSE}{\partial \hat{y}_{i}} = \frac{1}{2 \sqrt{MSE}} \frac{\partial MSE}{\partial \hat{y}_{i}} $$
- モデルの絶対評価を行う際は,MSEではなくR2(決定係数)がよく使われる.
- R2:データに対するモデルの当てはまりの良さ
- R2の拡張(モデル選択)
- 損失関数としての性質
1.2. MAE
- MAE (Mean Absolute Error, 平均絶対誤差)
$$ MAE(\hat{y}) := \frac{1}{N}\sum_{i=1}^{N} \left| y_i - \hat{y}_{i} \right| $$
MAEについて
Huber損失
- :MSEとMAEをミックスさせた評価指標として,Huber損失*2がある.ロバスト推定やSVMの損失関数に用いられる.
$$
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. $$
- :MSEとMAEをミックスさせた評価指標として,Huber損失*2がある.ロバスト推定やSVMの損失関数に用いられる.
$$
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 ) \\
- Quantile Regression (分位点回帰)
- MAEを損失関数とする回帰は,「Median Regression」とも呼ばれるが,その一般化として,Quantile Regression (分位点回帰)*3というものもある.
1.3. (R)MSPEとMAPE
- 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| ~~~~~~~~ $$
- 相対誤差と絶対誤差*4
- 絶対誤差 =
- 相対誤差 =
- MSPEについて
- MSEを相対誤差で評価したもの.
- %表示(百分率)にすることが多い.
- 例:観測値と予測値()が以下のような場合
- If then,
- If then,
- 損失関数としての性質
- 予測値の各要素を定数 で固定した場合(),最適な定数 は観測データ の重み付き平均値 になる.
- 値が小さいデータに対して過剰にfitしようとする.(バイアス)
- MAPEについて
- MAEを相対誤差で評価したもの.
- %表示(百分率)にすることが多い.
- 例:観測値と予測値()が以下のような場合
- If then,
- If then,
- 損失関数としての性質
- 予測値の各要素を定数で固定した場合(),最適な定数 は観測データの重み付き中央値 になる.
- 値が小さいデータに対して過剰にfitしようとする.(バイアス)
1.4. RMSLE
- 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} $$
- RMSLEについて
- MSEをlogスケールで表現したもの
- 絶対誤差を,相対誤差(MSPE, MAPE)ではなくlogスケールで表現.
の大小を考慮して誤差評価 - 損失関数として用いる場合, に対して凸かつ非対称
- > 極小値 → 傾きが小さい
- < 極小値 → 傾きが大きい
2. 分類
- Notation
- - number of data samples
- - number of classes
- - ground truth (data)
- - predictions (data)
- - probability that -th sample belongs -th label
- - confidence that -th sample belongs -th label
- - indicator factor
- 混同行列 (Confusion matrix)*5
- 二値分類(Binary classification)タスクのみに使う.
- True Positive (TP)
- Positiveサンプルのうち,正しくPositiveと分類されたもの
- False Positive (FP)
- Negativeサンプルのうち,間違ってPositiveと分類されたもの
- False Negative (FN)
- Positiveサンプルのうち,間違ってNegativeと分類されたもの
- True Negative (TN)
- Negativeサンプルのうち,正しくNegativeと分類されたもの
- Negativeサンプルのうち,正しくNegativeと分類されたもの
- True Positive (TP)
- 代表的な評価指標*6
- 正答率 (Accuracy) = (TP+TN) / (TP+FP+TN+FN)
- 精度 (Precision) = TP / (TP+FP)
- 検出率 (Recall) = TP / (TP+FN)
- F値 (F-Measures) =
- ROC曲線 (Receiver Operating Curve, 受信者操作曲線)
- 二値分類(Binary classification)タスクのみに使う.
2.1. Accuracy
- 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} ] $$
- Soft prediction と Hard prediction
- soft labels (soft predictions)
- - 分類モデルの出力スコア
- hard labels (hard predictions)
- - 分類モデルが最大スコアを出力したラベル
- ,b - しきい値
- soft labels (soft predictions)
- Accuracyについて
- Hard predictionなので,解釈が難しい.
- 分類モデルの出力値そのものではなくて,で評価する.
- 損失関数として用いると,最適化が難しい.
- best conts. :最も頻度の高いクラスに固定する.
- 例()
- Dataset
- 10 cats
- 90 dogs
- Dataset
- Hard predictionなので,解釈が難しい.
2.2. LogLoss
- 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} $$
- LogLoss (Logarithmic loss)について
- Soft prediction.
- 損失関数として用いると,最適化が簡単.
- best conts. :i-th クラスの頻度(経験分布)
- 例()
- Dataset
- 10 cats
- 90 dogs
- Dataset
2.3. AUC (ROC)
- AUC (Area Under Roc)
Area under the ROC Curve
- AUC (ROC) について
- AUC*7は,二値分類(Binary classification)タスクのみに使う
- サンプルに対する識別結果の"順序"にのみ依存,分類モデルの"出力値"には非依存.
- best consts. :任意の定数に固定してもAUCの値は同じ.
- AUCは,分類平面(しきい値)に依らない.
- AUCの説明
- ROC(Receiver Operating Curve)曲線の下側面積
- Wilcoxon-Mann-Whitney検定 (WMW検定)
- Brunner-Munzel検定
- サンプルペアの順序
- 正しい順序に分類されたサンプルペアの割合
- ROC(Receiver Operating Curve)曲線の下側面積
- pythonの場合,sklearn.metrics.roc_curve()とsklearn.metrics.auc()を使って計算できる.
2.4. Cohen’s Kappa
- Cohen’s Kappa (係数, 統計量)
$$ Kappa := 1 - \frac{1 - accuracy}{1 - p_{e}} = 1 - \frac{error}{baseline~error} $$ $$ p_{e} := \frac{1}{N^{2}} \sum_{k} n_{k1} n_{k2} $$
・ - 評価者
・ - 識別するクラス
・ - 評価者がクラスであると識別したサンプルの数
・ - サンプルの数
・ - 各サンプルをランダムに識別した場合の平均正答率
- Weighted Kappa (重み付けカッパ係数)
$$ Weighted~Kappa := 1 - \frac{weighted~error}{weighted~baseline~error} $$ $$ weighted~error := \frac{1}{Z} \sum_{i,j} c_{ij} w_{ij} $$
・ - 混同行列の成分
・ - 重み行列の成分
・ - 規格化定数
- Cohen's Kappa について
- Jacob Cohenが1960年に発表.
- 基準となるスコア(baseline)を0に正規化して,任意のモデルの性能を表現.
- 「Kappa - Accuracy の関係性」は,「R2 - MSE の関係性」に似ている.
- Weighted Kappaについて
- Accuracy(Error)に重みづけを行ってKappaを計算.
- :混同行列の成分 ※ - 識別するクラス数
- :重み行列の成分 ※ - 識別するクラス数
- 混同行列
- TP, FP, FN, FP
- 重み行列
- "順序つき"クラスラベルの分類に使う.
- 例:病気のレベルに応じたクラス分類
- 重み行列の構成法
- Linear weights:
- Quadratic weights:
- Quadratic Weighted Kappaを損失関数に使う場合,典型的には,MSEで近似する*8.
- 例()
- Dataset
- 10 cats
- 90 dogs
- 20 tigers
- Dataset
- Accuracy(Error)に重みづけを行ってKappaを計算.
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
- 作者:Andreas C. Muller,Sarah Guido
- 発売日: 2017/05/25
- メディア: 単行本(ソフトカバー)
サーモス 真空断熱タンブラー 2個セット 400ml ステンレス JDI-400P S
- 発売日: 2017/03/01
- メディア: ホーム&キッチン
*1:線形回帰モデルにのみ適用可能
*2:Huber, Peter J. (1964). “Robust Estimation of a Location Parameter”. Annals of Statistics 53 (1): 73–101. doi:10.1214/aoms/1177703732. JSTOR 2238020.
*3:"QUANTILE REGRESSION", Roger Koenker, http://www.econ.uiuc.edu/~roger/research/rq/rq.pdf
*4:参考:相対誤差の計算方法と意義
*5:参考:Understanding Confusion Matrix - Towards Data Science
*6:参考:Accuracy, Precision, Recall or F1? - Towards Data Science
*7:奥村先生によるAUC (ROC)の解説ページ:https://oku.edu.mie-u.ac.jp/~okumura/stat/ROC.html
*8:解析的に解く方法もある."On The Direct Maximization of Quadratic Weighted Kappa"