ひとことで言うと#
交差検証法は、データをK個のグループに分割し、各グループを順番にテストデータとして使うことで、限られたデータを最大限活用しながらモデルの「未知データに対する性能」を推定する方法です。
用語の定義#
押さえておきたい用語
- K分割交差検証(K-Fold CV):データをK個の等分割(フォールド)に分け、K回の学習・評価を行う手法。K=5またはK=10が一般的に使われる
- 層化分割(Stratified Split):各フォールドにクラスの比率を均等に配分する分割方法。不均衡データで特に有効
- Leave-One-Out CV(LOOCV):K=nとして1件ずつテストデータにする手法。データが非常に少ないときに使われるが計算コストが高い
- 汎化性能(Generalization Performance):学習に使っていない未知のデータに対するモデルの予測精度
- データリーケージ(Data Leakage):テストデータの情報が学習時に漏れ込み、見かけ上の性能が過大評価される問題
全体像#
データ分割
K個のフォールドに分割
→K個のフォールドに分割
学習と評価×K回
毎回異なるテスト区間
→毎回異なるテスト区間
スコア集計
平均と分散を算出
→平均と分散を算出
モデル選択
最良のモデル/パラメータ
最良のモデル/パラメータ
こんな悩みに効く#
- データが少なくてtrain/test splitだけでは評価が不安定になり、分割のたびに結論が変わる
- ハイパーパラメータの調整で、テストデータに対して間接的に過学習してしまっている
- 複数のモデルを比較したいが、公平な条件で比較する方法がわからない
基本の使い方#
分割数Kと分割方法を決める
一般的にはK=5かK=10が使われます。データ量が多ければK=5で計算コストを抑え、少なければK=10でテストデータの代表性を高めます。分類問題でクラス不均衡がある場合は層化分割(Stratified K-Fold)を必ず使用してください。
各フォールドで学習・評価を実行する
K回のループで、毎回異なる1フォールドをテストデータ、残りのK-1フォールドを学習データとして使います。前処理(標準化、欠損値補完)もフォールドごとに学習データだけから計算し、テストデータには変換のみ適用します。
K回のスコアを集計する
K回の評価スコア(Accuracy、F1、RMSE等)の平均と標準偏差を算出します。平均が高くても標準偏差が大きい場合はモデルの安定性に懸念があります。スコアのばらつきが大きければKを増やすか、データの偏りを調べます。
モデル選択後に最終評価を行う
交差検証でベストモデルとパラメータを決めたら、ホールドアウトのテストセット(交差検証に一切使っていないデータ)で最終評価を1回だけ行います。この最終スコアが本番環境で期待できる性能の推定値になります。
具体例#
保険会社の審査モデル選定
損害保険会社が、保険金請求の不正検知モデルを3種類(ロジスティック回帰、RandomForest、XGBoost)から選定する際に5分割層化交差検証を実施。対象データは過去3年分の請求82,000件で、不正率は2.1%。結果はロジスティック回帰のF1が0.41±0.03、RandomForestが0.58±0.05、XGBoostが0.63±0.02。XGBoostが平均スコア・安定性ともに最良だったため採用。ホールドアウトセット(20,000件)での最終F1は0.61で、交差検証の推定と整合していることを確認した。
不動産テックの価格予測チューニング
不動産価格査定サービスが、XGBoostのハイパーパラメータ(max_depth, learning_rate, n_estimators)を10分割交差検証で最適化。データは首都圏の成約事例34,000件。グリッドサーチ(108通りの組み合わせ)の結果、最良のRMSEは385万円±42万円(max_depth=6, lr=0.05, n_estimators=500)。ランダムサーチ(50通り)でも同等の388万円±39万円が見つかり、探索時間は6分の1で済んだ。単純なtrain/test splitでは分割により330万〜450万円と結論が大きく揺れていた問題が、交差検証で安定した評価に改善された。
農業IoTの収穫量予測
農業法人が、気象データ・土壌センサーデータ・過去収穫量から水稲の収穫量を予測するモデルを構築。データは5年間×48圃場の240レコードと少量だったため、LOOCVを採用。線形回帰のRMSEが52kg/反±18kg、SVRが43kg/反±14kg、LightGBMが61kg/反±22kgで、少量データではSVRが最も安定していた。LightGBMは一部のフォールドでRMSEが90kg超に跳ね、過学習の兆候が見られた。SVRを採用し、翌年の実績との誤差は平均38kg/反で、品種・作期ごとの肥料配分計画の精度向上に貢献した。
やりがちな失敗パターン#
| 失敗 | 原因 | 対策 |
|---|---|---|
| データリーケージで性能が過大評価される | 前処理(標準化・特徴量生成)を全データで行った後に分割した | 前処理はフォールドごとに学習データだけから計算し、テストデータには変換のみ適用する |
| 時系列データを通常のK-Foldで分割してしまう | 未来のデータで学習して過去を予測する「未来リーク」が発生 | 時系列にはTimeSeriesSplit(ウォークフォワード検証)を使い、時間の順序を保持する |
| テストデータで何度もチューニングしてしまう | ハイパーパラメータ調整にテストセットを使い、テストセットに過学習 | 交差検証はバリデーション用とし、最終テストは1回だけ未使用データで行う |
| 分割数を決める根拠がない | 「なんとなくK=5」で済ませ、データ量に見合っていない | データが少ないならK=10やLOOCV、多いならK=5で計算コストを抑える判断を明示する |
まとめ#
交差検証は「限られたデータで信頼できる性能評価を行う」ための基本技法です。最も重要なのは、前処理を含むすべてのステップをフォールドの中に閉じ込め、データリーケージを防ぐこと。時系列データにはTimeSeriesSplitを使い、最終評価は交差検証に使っていないホールドアウトセットで行う。この原則を守れば、モデル比較もパラメータ調整も信頼性のある結果に基づいて判断できます。