条件付きテスト誤差か、期待テスト誤差か?

7.12 Conditional or Expected Test Error?

クロスバリデーション(CV)はモデルの汎化誤差を推定する強力な道具だ。 しかし、ここで素朴な疑問が浮かぶ。

「いま手元にある、この訓練データで学習したモデルの誤差を推定しているのか?
それともあらゆる訓練データで平均した誤差を推定しているのか?」

直感的には前者であってほしい。手元のデータで作ったモデルの良し悪しを知りたいのだから。 しかし、ESL 7.12 が示すのは直感に反する結論だ ― CV は実は前者(条件付き誤差)をうまく推定していない。 それどころか、両者の相関はわずかに負ですらある。

このチャプターでは、条件付きテスト誤差(手元のモデルの誤差)と 期待テスト誤差(多くの訓練データで平均した誤差)という 2 つの「誤差」の違いを定義し、 10-fold CV(データを 10 分割して順番にテストする手法)と LOOCV(1個ずつ抜いてテストする手法)が 実際には何を推定しているのかを、シミュレーション結果から追跡する。

同じCV値の裏で何が起きているのか

ここに 100 個の研究室があるとしよう。それぞれの研究室は、同じ母集団からそれぞれ違う訓練データ$\mathcal{T}_1, \mathcal{T}_2, \ldots, \mathcal{T}_{100}$を独立に集める。みな同じ線形回帰の手続きを使ってモデルを当てはめ、同じ手順で 10-fold クロスバリデーション(CV)を計算する。

100個の訓練セットから生まれる条件付き誤差のばらつきと期待誤差
同じ母集団から独立に集めた 100 個の訓練セット(緑)。各セットの誤差(青棒)はばらつき、その平均が期待誤差(赤線)になる

まず驚くべき事実を確認しよう。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}} = \mathbb{E}_{X^0, Y^0}\!\left[L(Y^0, \hat{f}(X^0)) \,\big|\, \mathcal{T}\right], \qquad \mathrm{Err} = \mathbb{E}_{\mathcal{T}}\!\left[\mathrm{Err}_{\mathcal{T}}\right]$$

記号の読み下し:

ひと言でいうと、$\mathrm{Err}_{\mathcal{T}}$ は「$\mathcal{T}$ を固定して、 新規データだけ平均」。$\mathrm{Err}$ は「さらに $\mathcal{T}$ についても平均」。 前者は研究室ごとに違う値、後者は全研究室で共通の1つの値だ。

問いは単純だ:手元の CV は、手元の $\mathrm{Err}_{\mathcal{T}}$ を当てているのか?

シミュレーションの舞台

ESL の著者たちは、この問いに答えるために大規模なシミュレーションを行った。 設定の細部は気にしなくてよい ― 要は「同じ手続きを 100 回繰り返した」とだけ覚えておけば十分だ。

30 秒でわかる CV の手続き

実験設定

部分集合サイズ p を横軸にとった 100 本の誤差曲線と平均線
横軸:変数の数 p、縦軸:誤差。100 本の細い曲線(各訓練セット)と、太い赤線(期待誤差 Err の平均)

横軸を「使う変数の数 $p$」とし、縦軸を「誤差」とすると、 100 本の細い曲線(100 個の訓練セットそれぞれに対応)と、太い赤線(期待誤差$\mathrm{Err}$ = 100 本の平均)が描ける。

CV の側でも同様に、100 本の細い曲線と、太い黒線(CV の平均)が描ける。

ここで観察すべきは 2 つだ:

  1. 太い赤線(期待誤差)と太い黒線(CV の平均)はどれくらい一致するか?
  2. 細い赤線(個別の $\mathrm{Err}_{\mathcal{T}}$)と細い黒線(個別の CV)は、訓練セットごとに一致するか?
$$\mathrm{Err}_{\mathcal{T}}(p) \quad \text{vs.} \quad \mathrm{CV}_K(p), \qquad K \in \{10, N\}$$

それぞれを 100 個の訓練セットについて計算し、ばらつきと平均を比較する。

平均は一致する ― CV は期待誤差を当てる

実験結果を一言でまとめると、こうだ:

太い黒線(CV の平均)は、太い赤線(期待誤差 $\mathrm{Err}$)にほぼ重なる。
期待誤差(赤線)の上に CV平均(白線)と LOOCV平均(緑点線)が重なる様子
赤線(期待誤差 Err)、白線(10-fold CV 平均)、緑点線(LOOCV 平均)がほぼ重なる ― これが「平均レベルでの一致」

つまり、10-fold CV も LOOCV も、100 個の訓練セットを通じて平均的に見れば、 期待テスト誤差 $\mathrm{Err}$ をきれいに推定している

この時点では「ああ、CV はちゃんと期待誤差を当てているじゃないか、めでたしめでたし」と思いたくなる。 LOOCV のほうが「ほぼ全データを使う」ので、より手元の$\mathrm{Err}_{\mathcal{T}}$ に近そうだが、 10-fold のほうがむしろ少しだけ良い ― という点はあるものの、 両者の偏り(バイアス)は実用上ほぼ同じだ。

$$\mathbb{E}_{\mathcal{T}}\!\left[\mathrm{CV}_K\right] \;\approx\; \mathrm{Err}, \qquad K \in \{10, N\}$$

しかし、これはまだ話の半分にすぎない。平均が一致しているからといって、 個々の研究室のレベルでも一致するとは限らない。次のセクションで、 驚くべき現象を見ていこう。

しかし「あなたの研究室の値」は一致しない

ここからが本題だ。

平均が一致するからといって、「あなたの研究室の CV」と「あなたの研究室の真の条件付き誤差$\mathrm{Err}_{\mathcal{T}}$」が一致するわけではない

実験では、固定した部分集合サイズ $p$ について、 100 個の訓練セットそれぞれの$(\mathrm{Err}_{\mathcal{T}}, \mathrm{CV})$ を散布図で描いた。

もし「CV が個別の $\mathrm{Err}_{\mathcal{T}}$ を当てている」なら、 点は対角線上に並ぶはずだ。

「期待される正の相関」と「現実の負の相関」のギャップを散布図で対比
【期待】点が対角線近くに並ぶ(緑)→【現実】もやっと雲状に散らばり、回帰線が右下がり(赤)になる

しかし結果は「もやっとした雲」。対角線上に並ぶどころか、ほとんど相関がない。 それどころか、よく見ると相関は正ではなく、わずかに負 ― つまり「真の誤差が大きい訓練セットほど、CV はむしろ小さく出やすい」という、 直感に反する現象が観察される。

これは "curious phenomenon" として ESL のテキストでも素直に驚きが書かれている結果だ。

$$\mathrm{Corr}\!\left(\mathrm{CV}_K(\mathcal{T}),\, \mathrm{Err}_{\mathcal{T}}\right) \;\lesssim\; 0$$

「CV と条件付き誤差の相関は、ほとんどゼロ、わずかに負」。 これがこの章のいちばん大事な観察だ。

なぜ LOOCV ですら条件付き誤差を当てないのか

ここで自然な疑問が湧く。LOOCV はほぼ全データ($N-1$ 個)を使ってモデルを学習しているのだから、 当然「いま手元のモデル」に近いものを評価しているはずではないか?

理屈の上ではその通りだ。LOOCV は 1 個ずつ抜きながら、ほぼ同じデータで学習している。 だから個別の $\mathrm{Err}_{\mathcal{T}}$ を当ててもよさそうに思える。

しかし実験結果は、「ほぼ同じデータで学習している」というその性質ですら、 個別の $\mathrm{Err}_{\mathcal{T}}$ を当てる助けにはならないと告げている。

易しい訓練セットの中で CV 分割しても易しいまま、CV値が真の誤差より過剰に小さく出る様子
左:真の分布の中の「易しい」訓練セット(緑)を CV で分割しても、どの分割も易しいまま。右:そのため CV 値(青棒)は真の誤差(赤棒)より過剰に小さく出る(黄矢印がズレを示す)

直感的には次のように考えられる:

手元の訓練セットが、たまたま「易しい」サンプルだったとする。

訓練セットの特殊性は、CV の検証側にも持ち込まれてしまう。 そのため CV は「訓練セット自身の素性」と一緒にしか動かず、訓練セットを超えた、本当の未知データに対する誤差を当てる役割は果たしにくい

そして本質はここにある ―そもそも条件付き誤差 $\mathrm{Err}_{\mathcal{T}}$ は、 訓練セットごとに大きくばらつく(分散が大きい)。 そして CV はその「ばらつき方」を再現してくれない。 だから個別の $\mathrm{Err}_{\mathcal{T}}$ を当てる作業そのものが、 CV にとって極めて難しい。

$$\mathrm{Var}_{\mathcal{T}}\!\left[\mathrm{Err}_{\mathcal{T}}\right] \quad \text{は無視できないほど大きい}$$

訓練セットごとに $\mathrm{Err}_{\mathcal{T}}$ は大きく揺れる(ばらつきが大きい)。 CV はその揺れを追えない。

結果として、CV は訓練セット間で平均してはじめて、期待誤差 $\mathrm{Err}$ という一定の量を推定する道具になる― これが ESL の結論だ。

実務への含意 ― CV の結果をどう読むか

ここまでの結論を、実務的な教訓にまとめる。一番大事なものから順に並べた。

CVは個別(左の1人)ではなく集団(右の多人数)を見ている比喩的アニメーション
CV(黄色の円)は個別の研究室(左・青)には届かず、集団(右・緑)の中央で安定する。CV が見ているのは集団の平均だ

【最重要】CV と真の誤差は、正の相関を持たない。

「CV が低いモデル」が「真の誤差も低いモデル」とは限らない。 むしろ相関はほぼゼロ、わずかに負ですらある。 手元のモデルが「CV 上位 5% に入っている」からといって、 本当の汎化性能も上位 5% であるとは限らない ― これがいちばんの落とし穴だ。

補足的な 2 つの教訓:

それでもなお、CV は依然として実務で最も有用なツールのひとつだ。 大切なのは、CV が 「個人の出来」ではなく「集団の出来」を測る道具だと理解して使うことだ。

$$\widehat{\mathrm{Err}} \;=\; \mathrm{CV}_K \;\approx\; \mathrm{Err}, \qquad \widehat{\mathrm{Err}} \;\not\approx\; \mathrm{Err}_{\mathcal{T}}$$

CV は 期待誤差の推定量であって、条件付き誤差の点推定量ではない。 これがこの章の最終メッセージだ。

まとめ