モデリング●●●●●

交差検証

Cross-Validationこうさけんしょう

データを分割して訓練と評価を繰り返し、モデルの汎化性能を見積もる手法

概要

交差検証は、手元のデータを分割して「学習に使う部分」と「評価に使う部分」を入れ替えながら訓練と評価を繰り返し、モデルが未知のデータでどれくらいの性能を出せるか(汎化性能)を見積もる手法です。もっとも広く使われるk分割交差検証では、データをk個のブロックに分け、そのうち1つを評価用に残して残りで学習する、という手順をk回繰り返して評価結果を平均します。

学習に使ったデータでモデルを評価すると、過学習したモデルほど良い成績に見えてしまいます。だからこそ「評価は学習に使っていないデータで行う」ことが鉄則なのですが、データを評価用に取り分けると学習に使える量が減ってしまいます。交差検証は、全データを一度ずつ評価に回すことでこのジレンマを和らげる、モデル評価・モデル選択の標準手法です。

なぜ生まれたか

もっとも素朴な方法は、データを最初に訓練用と評価用の2つに割るホールドアウト法です。しかしこの方法には2つの不満がありました。第一に、評価用に取り分けた分だけ学習データが減り、特にデータが貴重な場面ではモデルの質が落ちます。第二に、評価結果が「どの部分をたまたま評価用にしたか」という分割の偶然に左右され、標本抽出のゆらぎがそのまま評価のゆらぎになります。評価用データが小さければ、その見積もりは一度きりの不安定な観測にすぎません。

交差検証はこの2つを同時に解決します。分割を入れ替えて全データを一度ずつ評価に使うため、評価はk回分の平均となって安定し、しかもどの回でも全体の大部分(k=5なら8割、k=10なら9割)を学習に使えます。計算をk回繰り返すコストと引き換えに、限られたデータから安定した汎化性能の見積もりを得る——計算機の性能向上とともに、この交換は安いものになり、交差検証はモデル評価の事実上の標準になりました。

詳細

k分割交差検証の手順

k分割交差検証(k-fold cross-validation)では、まずデータをランダムにk個の同じ大きさのブロック(fold)に分けます。1回目はブロック1を評価用に残し、残りのk−1個で学習して、ブロック1で性能を測ります。2回目はブロック2を評価用にして同じことを行い、これをk回繰り返すと、すべてのデータがちょうど一度ずつ「学習に使われていないデータ」として評価に参加したことになります。k回分の評価スコアの平均が汎化性能の見積もりで、ばらつきを見れば見積もりの安定度も分かります。kは5か10が定番です。

全データ1回目→ スコア12回目→ スコア23回目→ スコア34回目→ スコア45回目→ スコア5枠線ゴールド = 評価用、濃色 = 訓練用。5つのスコアを平均して汎化性能の見積もりとする
5分割交差検証 — 評価ブロックを入れ替えながら5回学習・評価し、スコアを平均する

バリエーションと使い分け

kを標本サイズと同じにした極端な形が一つ抜き交差検証(leave-one-out)で、毎回1件だけを評価に使います。学習データを最大限使えるためバイアスの小さい見積もりになりますが、計算回数が標本サイズ分だけ必要で、見積もりのばらつきも大きくなりがちです。逆にk=2に近づけるほど計算は軽い一方、学習データが減るぶん性能を低めに見積もります。この「kの選択」自体がバイアスとバリアンスのトレードオフになっており、k=5〜10がバランスの良い妥協点として定着しています。ほかに、分類問題でクラス比率を各ブロックで揃える層化k分割、時系列データで「未来のデータで学習して過去を予測する」ことを防ぐために時間順に分割する時系列分割など、データの構造に応じた変種があります。

モデル選択とハイパーパラメータ調整

交差検証の最大の使いどころはモデル選択です。多項式の次数、正則化の強さ、決定木の深さといった「モデルの複雑さを決めるつまみ(ハイパーパラメータ)」は、訓練誤差では選べません。複雑なほど訓練誤差は下がるからです。そこで候補ごとに交差検証のスコアを計算し、最も良い設定を選びます。検証誤差が最小になる複雑さを探すこの手続きは、過学習と未学習の境目をデータに教えてもらう作業だと言えます。

落とし穴 — 検証への情報漏れ

交差検証は正しく実施しないと、実力より高い性能を報告してしまいます。代表的な失敗がデータリーケージで、たとえば全データを使って特徴量の標準化や変数選択をしてから分割すると、評価用ブロックの情報が学習側に漏れます。前処理を含むすべての手順を、各回の訓練ブロックだけで行うのが原則です。また、交差検証で多数の設定を比較して最良を選んだ場合、その最良スコア自体は楽観的な見積もりになっています(多数から最大値を選ぶ操作は偶然に有利な結果を拾うため)。最終性能の報告には、選択にいっさい使っていない独立のテストデータを最後まで取り置くのが堅実です。なお交差検証は性能の「数値」を見積もる手法であり、モデルの仮定が妥当かを調べるモデル診断や、推定量のばらつきを見積もるブートストラップ法と組み合わせて使うことで、モデル評価は多面的になります。