7.12 Conditional or Expected Test Error?
クロスバリデーション(CV)はモデルの汎化誤差を推定する強力な道具だ。 しかし、ここで素朴な疑問が浮かぶ。
「いま手元にある、この訓練データで学習したモデルの誤差を推定しているのか?
それともあらゆる訓練データで平均した誤差を推定しているのか?」
直感的には前者であってほしい。手元のデータで作ったモデルの良し悪しを知りたいのだから。 しかし、ESL 7.12 が示すのは直感に反する結論だ ― CV は実は前者(条件付き誤差)をうまく推定していない。 それどころか、両者の相関はわずかに負ですらある。
このチャプターでは、条件付きテスト誤差(手元のモデルの誤差)と 期待テスト誤差(多くの訓練データで平均した誤差)という 2 つの「誤差」の違いを定義し、 10-fold CV(データを 10 分割して順番にテストする手法)と LOOCV(1個ずつ抜いてテストする手法)が 実際には何を推定しているのかを、シミュレーション結果から追跡する。
ここに 100 個の研究室があるとしよう。それぞれの研究室は、同じ母集団からそれぞれ違う訓練データ$\mathcal{T}_1, \mathcal{T}_2, \ldots, \mathcal{T}_{100}$を独立に集める。みな同じ線形回帰の手続きを使ってモデルを当てはめ、同じ手順で 10-fold クロスバリデーション(CV)を計算する。

まず驚くべき事実を確認しよう。100 個の研究室で算出される CV 値は、互いに大きくばらつく。
ある研究室では CV = 0.10、別の研究室では CV = 0.30。同じ真のデータ生成過程から得たデータでも、 サンプルがたまたまどうだったかによって CV はこんなに揺れる。
では本当の「未知データへの誤差」はどうだろうか? それも当然、研究室ごとに違う。 Aさんの研究室で学習したモデルは新規データで誤差 0.15、Bさんの研究室では 0.20、というように、 これも研究室ごとに違う値を持つ。これを条件付きテスト誤差 $\mathrm{Err}_{\mathcal{T}}$ と呼ぶ ― 訓練セット $\mathcal{T}$ を「条件として固定」したときの、未知データに対する誤差だ。
そして全部の研究室で平均した誤差を期待テスト誤差 と呼ぶ。 これは「世界中の研究室の平均的なモデル性能」を表す。
記号の読み下し:
ひと言でいうと、$\mathrm{Err}_{\mathcal{T}}$ は「$\mathcal{T}$ を固定して、 新規データだけ平均」。$\mathrm{Err}$ は「さらに $\mathcal{T}$ についても平均」。 前者は研究室ごとに違う値、後者は全研究室で共通の1つの値だ。
問いは単純だ:手元の CV は、手元の $\mathrm{Err}_{\mathcal{T}}$ を当てているのか?
ESL の著者たちは、この問いに答えるために大規模なシミュレーションを行った。 設定の細部は気にしなくてよい ― 要は「同じ手続きを 100 回繰り返した」とだけ覚えておけば十分だ。

横軸を「使う変数の数 $p$」とし、縦軸を「誤差」とすると、 100 本の細い曲線(100 個の訓練セットそれぞれに対応)と、太い赤線(期待誤差$\mathrm{Err}$ = 100 本の平均)が描ける。
CV の側でも同様に、100 本の細い曲線と、太い黒線(CV の平均)が描ける。
ここで観察すべきは 2 つだ:
それぞれを 100 個の訓練セットについて計算し、ばらつきと平均を比較する。
実験結果を一言でまとめると、こうだ:
太い黒線(CV の平均)は、太い赤線(期待誤差 $\mathrm{Err}$)にほぼ重なる。

つまり、10-fold CV も LOOCV も、100 個の訓練セットを通じて平均的に見れば、 期待テスト誤差 $\mathrm{Err}$ をきれいに推定している。
この時点では「ああ、CV はちゃんと期待誤差を当てているじゃないか、めでたしめでたし」と思いたくなる。 LOOCV のほうが「ほぼ全データを使う」ので、より手元の$\mathrm{Err}_{\mathcal{T}}$ に近そうだが、 10-fold のほうがむしろ少しだけ良い ― という点はあるものの、 両者の偏り(バイアス)は実用上ほぼ同じだ。
しかし、これはまだ話の半分にすぎない。平均が一致しているからといって、 個々の研究室のレベルでも一致するとは限らない。次のセクションで、 驚くべき現象を見ていこう。
ここからが本題だ。
平均が一致するからといって、「あなたの研究室の CV」と「あなたの研究室の真の条件付き誤差$\mathrm{Err}_{\mathcal{T}}$」が一致するわけではない。
実験では、固定した部分集合サイズ $p$ について、 100 個の訓練セットそれぞれの$(\mathrm{Err}_{\mathcal{T}}, \mathrm{CV})$ を散布図で描いた。
もし「CV が個別の $\mathrm{Err}_{\mathcal{T}}$ を当てている」なら、 点は対角線上に並ぶはずだ。

しかし結果は「もやっとした雲」。対角線上に並ぶどころか、ほとんど相関がない。 それどころか、よく見ると相関は正ではなく、わずかに負 ― つまり「真の誤差が大きい訓練セットほど、CV はむしろ小さく出やすい」という、 直感に反する現象が観察される。
これは "curious phenomenon" として ESL のテキストでも素直に驚きが書かれている結果だ。
「CV と条件付き誤差の相関は、ほとんどゼロ、わずかに負」。 これがこの章のいちばん大事な観察だ。
ここで自然な疑問が湧く。LOOCV はほぼ全データ($N-1$ 個)を使ってモデルを学習しているのだから、 当然「いま手元のモデル」に近いものを評価しているはずではないか?
理屈の上ではその通りだ。LOOCV は 1 個ずつ抜きながら、ほぼ同じデータで学習している。 だから個別の $\mathrm{Err}_{\mathcal{T}}$ を当ててもよさそうに思える。
しかし実験結果は、「ほぼ同じデータで学習している」というその性質ですら、 個別の $\mathrm{Err}_{\mathcal{T}}$ を当てる助けにはならないと告げている。

直感的には次のように考えられる:
手元の訓練セットが、たまたま「易しい」サンプルだったとする。
訓練セットの特殊性は、CV の検証側にも持ち込まれてしまう。 そのため CV は「訓練セット自身の素性」と一緒にしか動かず、訓練セットを超えた、本当の未知データに対する誤差を当てる役割は果たしにくい。
そして本質はここにある ―そもそも条件付き誤差 $\mathrm{Err}_{\mathcal{T}}$ は、 訓練セットごとに大きくばらつく(分散が大きい)。 そして CV はその「ばらつき方」を再現してくれない。 だから個別の $\mathrm{Err}_{\mathcal{T}}$ を当てる作業そのものが、 CV にとって極めて難しい。
訓練セットごとに $\mathrm{Err}_{\mathcal{T}}$ は大きく揺れる(ばらつきが大きい)。 CV はその揺れを追えない。
結果として、CV は訓練セット間で平均してはじめて、期待誤差 $\mathrm{Err}$ という一定の量を推定する道具になる― これが ESL の結論だ。
ここまでの結論を、実務的な教訓にまとめる。一番大事なものから順に並べた。

【最重要】CV と真の誤差は、正の相関を持たない。
「CV が低いモデル」が「真の誤差も低いモデル」とは限らない。 むしろ相関はほぼゼロ、わずかに負ですらある。 手元のモデルが「CV 上位 5% に入っている」からといって、 本当の汎化性能も上位 5% であるとは限らない ― これがいちばんの落とし穴だ。
補足的な 2 つの教訓:
それでもなお、CV は依然として実務で最も有用なツールのひとつだ。 大切なのは、CV が 「個人の出来」ではなく「集団の出来」を測る道具だと理解して使うことだ。