このように、値がN回不連続的に飛び飛びの値をとることがわかり、0になるには約
N 2 \frac{N}{2} 2 N 回飛ばなければならないことが分かります。グラフの様にその値はターゲットの中央値(target median)となることが分かります。Nが偶数奇数の場合分けが必要ですが、いずれの場合もbest constantはtarget medianとなります。
note: MAEのbest constantはターゲットの中央値であることから、MAEはターゲットの外れ値(outliers)の影響を受けずらいことが分かる。一方MSEはoutliersの影響を受けやすい。よって、ターゲットにouteliersを含む場合はMAEがよりrobustな評価指標と言える。
最適化の仕方
MAEも目的関数として扱うことができますが、
y ^ i = y i \hat y_i=y_i y ^ i = y i の時に微分可能でないのでsmoothingして0に近いエラーに関しても処理できるようにする必要があります。このsmoothingには様々な方法がありますが、有名なものに
Huber loss があります。0に近い時はMSE、エラーが大きい値ではMAEのような挙動を示す関数です。詳しくは各ライブラリのdocを読みましょう。
(R)MSPE, MAPE: Percentage Error
単純なMSEやMAEでは、ターゲットの値が大きい時に同じ精度の予測値に対して過小評価されてしまいます。例えば、
M S E ( 10 , 9 ) = 1
MSE(10,9)=1
MSE ( 10 , 9 ) = 1
M S E ( 1000 , 900 ) = 10000
MSE(1000,900)=10000
MSE ( 1000 , 900 ) = 10000
のように同じ90%の予測精度でもMSEの値が大きくなることが分かります。そこで、MSE・MAEそれぞれに対し、ターゲット値の逆数で重みを付けた評価指標がそれぞれMSPE・MAPEという訳です。
M S P E ( y , y ^ ) = 100 % N ∑ i = 1 N ( y i − y ^ i y i ) 2
MSPE(y,\hat y)=\frac{100\%}{N}\sum^N_{i=1}(\frac{y_i-\hat y_i}{y_i})^2
MSPE ( y , y ^ ) = N 100% i = 1 ∑ N ( y i y i − y ^ i ) 2
M A P E ( y , y ^ ) = 100 % N ∑ i = 1 N ∣ y i − y ^ i y i ∣
MAPE(y,\hat y)=\frac{100\%}{N}\sum^N_{i=1}|\frac{y_i-\hat y_i}{y_i}|
M A PE ( y , y ^ ) = N 100% i = 1 ∑ N ∣ y i y i − y ^ i ∣
それではそれぞれのbest constantはどの値をとるのでしょうか?
MSPE、MAPEそれぞれその値は重み付け平均値、重み付け中央値を取ります。小さい値のターゲットに重みを大きくつけた新しいターゲット値の平均、中央値という訳です。ターゲット値に
w i = 1 / y i ∑ i = 1 N 1 / y i w_i=\frac{1/y_i}{\sum^N_{i=1}1/y_i} w i = ∑ i = 1 N 1/ y i 1/ y i を付加した後、MSE・MAE同様の議論をすれば証明できます。
最適化の仕方
MSPE・MAPEを直接モデル最適化の目的関数として扱うことは難しく、以下のステップが必要となります。
ターゲットの値を用いて各オブジェクトx i x_i x i に対してSample weights: w i w_i w i を対応させる
その重みに従って新たに元のデータからサンプリングを行う
サンプリングされた新たなデータセットに対して、MSE・MAEを適用する
w i w_i w i に関してはMSPE・MASEについてそれぞれ、
M S P E : w i = 1 / y i 2 ∑ i = 1 N 1 / y i 2
MSPE: w_i=\frac{1/y_i^2}{\sum^N_{i=1}1/y_i^2}
MSPE : w i = ∑ i = 1 N 1/ y i 2 1/ y i 2
M A P E : w i = 1 / y i ∑ i = 1 N 1 / y i
MAPE: w_i=\frac{1/y_i}{\sum^N_{i=1}1/y_i}
M A PE : w i = ∑ i = 1 N 1/ y i 1/ y i
となります。
note:
w i w_i w i の合計は必ずしも1である必要はない。また、サンプル数はもとのデータセットのオブジェクト数Nを超えても良い。
(R)MSLE: (Root) Mean Square Logarithmic Error
R M S L E ( y , y ^ ) = 1 N ∑ i = 1 N ( l o g ( y i + 1 ) − l o g ( y ^ i + 1 ) ) 2 = R M S E ( l o g ( y + 1 ) , l o g ( y ^ + 1 ) ) = M S E ( l o g ( y + 1 ) , l o g ( y ^ + 1 ) )
RMSLE(y,\hat y)=\sqrt{\frac{1}{N}\sum^N_{i=1}(log(y_i+1)-log(\hat y_i+1))^2} =RMSE(log(y+1),log(\hat y+1))=\sqrt{MSE(log(y+1),log(\hat y+1))}
RMS L E ( y , y ^ ) = N 1 i = 1 ∑ N ( l o g ( y i + 1 ) − l o g ( y ^ i + 1 ) ) 2 = RMSE ( l o g ( y + 1 ) , l o g ( y ^ + 1 )) = MSE ( l o g ( y + 1 ) , l o g ( y ^ + 1 ))
こちらもターゲットのスケールによる誤差の見積もり変化に対して、頑強な評価指標です。MSEの対数バージョンということですね。
ではbest constantはどの値をとるかというとこの場合はlog spaceでのtarget meanです。log spaceでの平均が分かった後にその値を指数化して戻してあげる必要がありますがコンセプトはMSEと変わりません。
最適化の仕方
これも単純に目的関数としては使えないので以下のステップが必要です。
ターゲット値をlog spaceに変換する; z i = l o g ( y i + 1 ) z_i=log(y_i+1) z i = l o g ( y i + 1 )
変換された新しいターゲットに対して、目的関数をMSEに設定しモデルをfitする
予測値を指数化し想定されるスケールに戻す; y ^ i = e x p ( z ^ i ) − 1 \hat y_i=exp(\hat z_i)-1 y ^ i = e x p ( z ^ i ) − 1
詳しくは各ライブラリのdocを読みましょう。
分類問題(Classification)に使われる評価指標
Accuracy
Logarithmic Loss
Area under ROC curve
(Quadratic weighted) Kappa
notation
N N N : オブジェクト数
L L L : カテゴリ数
y y y : 真値
y ^ \hat y y ^ : 予測値
[ a = b ] [a=b] [ a = b ] : 1 if a=b else 0
Accuracy
A c c u r a c y = 1 N ∑ i = 1 N [ y ^ i = y i ]
Accuracy=\frac{1}{N}\sum^N_{i=1}[\hat y_i=y_i]
A cc u r a cy = N 1 i = 1 ∑ N [ y ^ i = y i ]
この指標はクラス予測がどのくらいの頻度で正しいか表しています。best constantは最も現れる頻度の高いカテゴリ値です。例えばターゲットに猫が10、犬が90あるとしたら、常にイッヌと予測したら0.9が得られ最大となります。
最適化の仕方
何でもいいのである評価指標でモデルを最適化・fitする
最適化済みのモデルの各カテゴリに対する確率予測値に対して、閾値を調節する
閾値の最適解によってそのモデルの実力を最も発揮したAccuracyが求められます。
詳しくは各ライブラリのdocを読みましょう。
Logarithmic Loss
Binary
L o g L o s s = − 1 N ∑ i = 1 N y i l o g ( y ^ i ) + ( 1 − y i ) l o g ( 1 − y ^ i )
LogLoss=-\frac{1}{N}\sum^N_{i=1}y_ilog(\hat y_i)+(1-y_i)log(1-\hat y_i)
L o gL oss = − N 1 i = 1 ∑ N y i l o g ( y ^ i ) + ( 1 − y i ) l o g ( 1 − y ^ i )
Multiclass
L o g L o s s = − 1 N ∑ i = 1 N ∑ l = 1 L y i l l o g ( y ^ i l )
LogLoss=-\frac{1}{N}\sum^N_{i=1}\sum^L_{l=1}y_{il}log(\hat y_{il})
L o gL oss = − N 1 i = 1 ∑ N l = 1 ∑ L y i l l o g ( y ^ i l )
2値分類と多クラス分類のタスクで上のように書き分けられますが、多クラス分類の方は一般化されている形になっています。実践的には
l o g log l o g の中身
x x x に対して
1 0 − 15 ≦ x ≦ 1 − 1 0 − 15 10^{-15}\leqq x \leqq 1-10^{-15} 1 0 − 15 ≦ x ≦ 1 − 1 0 − 15 のようにクリッピングした関数
L o g L o s s = − 1 N ∑ i = 1 N ∑ l = 1 L y i l l o g ( m i n ( m a x ( y ^ i l , 1 0 − 15 ) , 1 − 1 0 − 15 ) )
LogLoss=-\frac{1}{N}\sum^N_{i=1}\sum^L_{l=1}y_{il}log(min(max(\hat y_{il},10^{-15}),1-10^{-15}))
L o gL oss = − N 1 i = 1 ∑ N l = 1 ∑ L y i l l o g ( min ( ma x ( y ^ i l , 1 0 − 15 ) , 1 − 1 0 − 15 ))
が使われます。下のグラフはターゲットが0の時の予測確率値とLogLossを示していますが、誤ったクラスの予測確率値が大きいほど、つまり間違った答えをはっきりこれだと言ってしまうほど大きいペナルティが課せられることが分かります。