機械学習モデルの性能評価で「たまたま分け方が良かっただけ」の好成績に騙されないためには、どうすればよいでしょうか。その定番の答えがk-分割交差検証です。この記事では、データをk個に分割して検証を繰り返す仕組みと、ホールドアウト法との違いを解説します。

📖 ひと言でいうと

k-分割交差検証とは、手元のデータをk個のブロックに分割し、各ブロックを1回ずつテストデータとして使いながら合計k回の学習と評価を繰り返し、その平均でモデルの汎化性能を測る手法です。例えるなら、5人班で問題集を分担するとき、毎回1人分の問題を「腕試し用」に取り置き、残り4人分で勉強してから腕試しをする——これを全員分が腕試し役を務めるまで5回繰り返して平均点を出すイメージです。

🖼 1枚でわかるk-分割交差検証

k-分割交差検証 — 全データを一度ずつテストに回す
  • 手順 — データをk個に分割し、各ブロックを一度ずつテストデータに使う
  • 訓練データ — 残りのk-1個のブロックを使用。全体でk回検証する
  • 評価 — k回の評価結果の平均で汎化性能を測る
  • 強み — データが少ない・分布が偏っている場合に特に有用
  • 弱み — k回学習するため計算コストが高い場合がある
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

データをk個のブロックに分割し、それぞれのブロックを一度ずつテストデータとして使用する。残りのk-1個のブロックは訓練データとして用いる。全体でk回の検証が行われる。この手法はクロスバリデーションとも呼ばれ、各ブロックでの評価結果の平均を取ることでモデルの汎化性能を評価する。教師データが少ない場合やデータの分布が偏っている場合に特に有用で、ホールドアウト法よりも厳密な評価が可能。ただし、計算コストが高い場合がある。

かみ砕くと、「訓練用とテスト用にデータを1回だけ分ける」のではなく、分け方を変えながらk回評価して平均を取る、ということです。1回きりの分割では、たまたまテストに簡単な(あるいは難しい)データが偏るかもしれません。全ブロックに1回ずつテスト役をさせれば、そうした偶然の影響がならされ、より信頼できる評価になります。

🔍 しっかり理解する

k回の検証の流れ

たとえばk=5の場合、データを5つのブロックに分け、次のように5回の検証を行います。

分割
データをk個のブロックに分ける
学習
k-1個のブロックで訓練
評価
残り1個のブロックでテスト
交代
テスト役を替えてk回繰り返す
平均
k回の結果を平均し汎化性能とする

重要なのは、どのデータも「一度だけテストに使われ、残りの回では訓練に使われる」ことです。データ全体を無駄なく評価に活かせるため、教師データが少ない場合に特に威力を発揮します。

kの値としては5や10がよく使われます。kを大きくするほど1回の訓練に使えるデータは増えますが、そのぶん学習と評価の繰り返し回数も増えます。手元のデータ量と計算時間の兼ね合いで決めるのが実際の運用です。

ホールドアウト法との違い

最もシンプルな評価方法であるホールドアウト法は、データを訓練用とテスト用に1回だけ分割します。手軽で計算も1回で済みますが、評価結果が「どう分割したか」という偶然に左右されます。データが少ないほど、また分布が偏っているほど、この偶然のブレは大きくなります。

k-分割交差検証は、分け方を変えたk回の評価を平均することでこのブレをならし、ホールドアウト法よりも厳密な評価を可能にします。引き換えに、モデルの学習をk回行うため計算コストが高い場合がある、というトレードオフがあります。

🅰 k-分割交差検証
  • 分割を替えてk回評価し平均する
  • 全データが一度ずつテストに使われる
  • 少データ・偏った分布でも厳密に評価できる
  • 学習をk回行うため計算コストが高い場合がある
🅱 ホールドアウト法
  • 訓練用とテスト用に1回だけ分割する
  • テストに使われないデータは学習専用
  • 分割の偶然に評価が左右されやすい
  • 計算は1回で済み手軽

なぜ「汎化性能」の評価になるのか

機械学習で本当に知りたいのは、訓練データへの当てはまりではなく、未知の新しいデータへの予測力=汎化性能です。k-分割交差検証では、各回のテストブロックは学習に一切使われていない「モデルにとって未知のデータ」です。その未知データでの成績をk回分平均するので、モデルが未知データに対して平均的にどれくらいの性能を出せるかの見積もりが得られます。ハイパーパラメータの選択やモデル同士の比較を、この平均スコアに基づいて行うのが実務での典型的な使い方です。

💡 具体例で考える

ある病院で、100人分しか集まらなかった検査データから病気の有無を予測するモデルを作るとします。ホールドアウト法で20人をテスト用に取り分けると、学習に使えるのは80人だけになり、しかもそのテスト20人にたまたま軽症例ばかりが入れば評価は甘く、重症例が偏れば辛く出てしまいます。100人という少なさでは、この偶然のブレは無視できません。

そこでk=5のk-分割交差検証を使うと、100人を20人ずつ5ブロックに分け、「80人で学習→20人でテスト」を5回繰り返して平均します。100人全員が一度はテスト役を務めるため、特定の20人の偏りに評価が引きずられず、限られたデータから信頼できる性能見積もりが得られます。これが「教師データが少ない場合や分布が偏っている場合に特に有用」の実際の姿です。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • 「k個のモデルを合体させる手法」ではない: k-分割交差検証は評価のための手法であり、複数モデルの予測を統合するアンサンブル学習(バギングなど)とは目的が異なります。
  • 交差検証=k-分割だけではない: 公式テキストのとおりクロスバリデーションとも呼ばれますが、交差検証にはブロック数をデータ数と同じにする一個抜き交差検証(leave-one-out)などの変種もあります。k-分割はその代表形です。
  • テストデータの使い回しではない: 各ブロックがテストに使われるのは一度だけです。同じデータで何度もテストして良い結果を選ぶ行為とは違い、各回のテストは常に「学習に使っていないデータ」で行われます。
  • kは大きいほど良いとは限らない: kを増やすと1回あたりの訓練データは増えますが、学習の回数も増えて計算コストが膨らみます。「計算コストが高い場合がある」という弱点はkの大きさと直結しています。

📝 試験でのポイント

💡 ポイント
  • 「k個に分割し、各ブロックを一度ずつテストデータに使い、残りk-1個で訓練する。検証は全体でk回」という手順の数字(k回・k-1個)を正確に押さえましょう。
  • ホールドアウト法との比較で「より厳密な評価が可能だが計算コストが高い場合がある」という長所と短所のセットが問われやすいポイントです。
  • 「教師データが少ない場合やデータの分布が偏っている場合に特に有用」という適用場面の記述も出題が想定されます。
  • 「クロスバリデーション」という別名との対応を確認しておきましょう。

📚 まとめ

k-分割交差検証は、データをk個のブロックに分け、各ブロックを一度ずつテストデータとして使いながらk回の検証を行い、評価結果の平均で汎化性能を測る手法です。クロスバリデーションとも呼ばれ、教師データが少ない場合や分布が偏っている場合に、ホールドアウト法よりも厳密な評価ができます。代償は学習をk回繰り返す計算コストです。「全データが一度ずつテスト役を務める」というイメージで仕組みを覚えておきましょう。