機械学習モデルの評価
学習目標
学習されたモデルの精度の評価方法と評価指標を理解する。
正解率・適合率・再現率・F値
ROC曲線とAUC
モデルの解釈
モデルの選択と情報量
キーワード:交差検証、ホールドアウト検証、k-分割交差検証、混同行列、過学習、未学習、正則化、L0正則化、L1正則化、L2正則化、ラッソ回帰、リッジ回帰、LIME、SHAP、オッカムの剃刀、赤池情報量基準(AIC)、汎化性能、平均二乗誤差、偽陽性-偽陰性、第一種の過誤-第二種の過誤、訓練誤差、汎化誤差、学習係数、誤差関数
データの準備
教師あり学習では、モデルを訓練するためのデータが必要になります。
訓練では誤差関数を使って訓練誤差を計算します。回帰問題などでは平均二乗誤差などが誤差関数として使われます。モデルの学習とは訓練誤差が小さくなるようにモデルのパラメータを少しずつ更新していくことを意味します。
訓練以外にも目的に合わせて異なるデータセットが必要です。一般的に、データセットには3つのカテゴリーがあります。

検証、評価、テストなどの言葉は話し手や文脈によって用法が変わることがあります。また、検証用データも含めて訓練用データと呼ぶ場合もあります。発言者や文章の意味を汲み取ることが重要です。
分割することで、モデルが過学習しているかどうかを検証したり、訓練用以外のデータセットを使うことでモデルの性能をより正当に計算することができます。例えば、交差検証は、学習を訓練データで行い、モデルの精度を検証データでチェックします。この結果によって、どのハイパーパラメータが最も効果的かを調べることができます。
また、評価データで計算した誤差を汎化誤差と呼び汎化性能(未知のテストデータに対する予測・識別能力)を測るのに重要です。
なお、データの分割方法は、交差検証の仕方によって異なります。
ホールドアウト検証
ホールドアウト検証では割合を決めて訓練用、検証用、評価用に分けます。例えば、訓練用に60%、検証用に20%、テストに20%など。
ハイパーパラメータを設定し、訓練用データで学習を行い、そのモデルの性能を検証用データで測ります。これを異なるハイパーパラメータで何度か行いどのハイパーパラメータでの学習が効果的かを決めます。最後に一番性能の良いモデルを評価用のデータでテストします。
ホールドアウト検証では以下の2点で問題が生じる可能があります。
学習はデータが多いほど効果的だが検証用データは訓練に使えないので、データが少ない時に困る。
検証用データを選び直して一から学習し直すと(クラスの分布にムラがあるなどの理由で)精度が大きく変わる場合がある。
k-分割交差検証
k-分割交差検証は評価用のデータを除いた後、データをk個に分割します。そのうちの1つを検証用に使い、残りを訓練に使います。k個に分割されたデータのそれぞれが1回ずつ検証用として使われるように訓練を繰り返します。最後にk個の検証の平均でハイパーパラメータとモデルの性能を評価します。
この方法だと、全てのデータを学習に使うことができます。また、k個の検証の平均を使うので、仮にk分割をやり直して再訓練をしたとしても精度が大きく変わることが少なくなります。
ただし、検証用のデータに使われたデータが訓練でも使われるので検証結果が過大評価になる可能性があり注意が必要です。
正解率・適合率・再現率・F値
目の前に卵が100個あったとします。ほんとうは全部が生の卵のはずですが、手違いでゆで卵が混ざってしまいました。
なので、手触りだけでゆで卵を言い当てたいとします。

ゆで卵をポジティブ(Positive)と呼び、生の卵をネガティブ(Negative)と呼びます。

混同行列
真実と予測の組み合わせを表にしたものを混同行列(confusion matrix)と呼びます。

例えば、100個の卵を手に持って、10個をゆで卵と予測して7個は正解、生の卵の予測では80個が正解だったとします。

統計用語では、偽陽性と偽陰性をそれぞれ第一種の過誤、第二種の過誤と呼びます。

正解率(Accuracy)
予測が正解だった割合。
$$
\text{accuracy} = \frac{TP + TN}{TP + TN + FP + FN} = \frac{87}{100}
$$
欠点:Negativeが稀に起こるケースの場合、全てPositiveと予測しても正解率が高くなる。(逆も真)
適合率(Precision)
Positiveと予測して正解だった割合。
$$
\text{precision} = \frac{TP}{TP+FP} = \frac{7}{17}
$$
欠点:本当に自信のあるケースのみPositiveというと適合率が上がるが、FN(偽陰性)が増える。
再現率(Recall)
Positiveであるものが予測された割合。
$$
\text{recall} = \frac{TP}{TP+FN} = \frac{7}{10}
$$
欠点:全てをPositiveと予測すると再現率100%になってします。
F値(F-measure)
適合率と再現率の調和平均。適合率と再現率をバランスよく評価できる。
$$
\text{F-measure} = \frac{2 \times \text{precision} \times \text{recall}}{\text{precision} + \text{recall}}
$$
欠点:あえていうなら直感的ではない。
関連記事:
なぜAccuracyだけではダメなのか?PrecisionとRecallの違いを説明します。
過学習と未学習
過学習
過学習(overfitting)は訓練データでは精度が良いが、検証用データやテストデータで精度が悪いことを言う。
過学習を防ぐ手段として行われる正則化では下表で説明される項を誤差関数に付け足します。学習は誤差関数の値を減らすのが目的なので、正則化で追加された項目も最小化されていきます。つまり、モデルの重み(パラメータ)が削除あるいは小さくなるので、重みが訓練データに対して過度に調節されることを防ぎます。

線形回帰にL1正則化を適用した場合はラッソ回帰、L2正則化を適用した場合はリッジ回帰と呼びます。また、L1正則化をとL2正則化を組み合わせたものをElastic Netと呼びます。
未学習
未学習(underfitting)とはモデルの学習する能力が弱く精度が低いことです。理由は色々ありますが、正則化のやり過ぎでも起こります。
ROC曲線とAUC
ROC曲線
ROC曲線(receiver operating characteristic curve)は真陽性率(True Positive Rate: TPR)と偽陽性率(False Positive Rate: FPR)の関係を表した曲線です。

$$
\begin{align*}
TPR &= \frac{TP}{TP+FN} \\
FPR &= \frac{FP}{FP+TN}
\end{align*}
$$
$${TPR}$$は再現率(recall)と同じで、ROC曲線は再現率を上げていくと偽陽性(FP)が増えていく関係を表しています。例えば、ロジスティック回帰で閾値を1から0へと下げていくと再現率が上がって偽陽性が増えROC曲線を描くことができます。
AUC
AUC(area under the curve)とは曲線の下の面積の意味です。ROC曲線のAUCが1に近いほどモデルの性能が良いことになります。なお、AUCはROC曲線だけでなく他の曲線でも使われる概念です。
モデルの選択と情報量
オッカムの剃刀(Occam’s razor / Ockham’s razor)は同じ精度であるならばなるべくより単純なモデルを好むという方針です。単純な方がモデルの計算コストが少ないですし、過学習する可能性が低くなります。
赤池情報量基準(AIC)(Akaike’s Information Criterion)はモデルの複雑さと予測精度のバランスの指標。
$$
AIC = −2 \log L + 2k
$$
$${L}$$はモデルの最大尤度、$${k}$$はパラメータの数。予測精度が高くてパラメータの数も少ないとAICが小さくなる。
