この記事では、機械学習における「交差検証(クロスバリデーション)」について、その意味・目的やメリット・デメリット、主な手法を具体例をもとに解説します。
<目次>
交差検証(クロスバリデーション)とは何か
「交差検証」の意味
交差検証(クロスバリデーション:cross-validation)は、機械学習において、予測モデルの汎化性能(未知のデータに対する予測能力)を推定するための手法です。
一般に、学習データの一部をモデル構築のために使用せず取っておくことを「ホールドアウト (hold-out)」と呼びます。ホールドアウト法は、学習データをランダムに分割し、そのうちの一つをモデルの評価、その他をモデルの学習に使用します。交差検証では、このホールドアウト法による分割を複数回行い、各回の学習と評価に用いるデータを順番に入れ替えながらモデルの学習と評価を行います。
交差検証では、すべてのデータが必ず一度だけモデルの評価に使用されることで、より信頼性の高い汎化性能の推定を行います。
作成:Intelligence In Society
なぜ交差検証を行うのか
1. 過学習の回避
交差検証が行われる理由の一つは、予測モデルの汎化性能を評価することで、モデルが学習データに対して過学習(オーバーフィッティング)となることを避けるためです。
多くの機械学習モデルは、学習データに過剰に適合することで容易に過学習を引き起こします。過学習になると、学習データに対しては高い性能を示す一方、未知のデータに対しては予測性能が低下し、実際には役に立たないモデルが出来上がります。
例えば決定木系のモデルでは、ノード数(ツリーのサイズ)を大きくするに伴って、学習データに対する予測精度は100%に近づいていきますが、その過程で母集団の一般的な特徴ではない不要な疑似相関を拾うため、未知のデータに対する予測性能は低下していきます。
このような過学習による汎化性能の低下を回避するためには、予測モデルの性能を、学習に使用したデータとは異なる未知のデータで評価する必要があります。そのために、学習に使用するデータと、性能評価のみに使用するデータを分けて学習・評価を行う交差検証が行われます。
2. モデルパラメータのチューニング
交差検証が行われる理由の2つ目は、モデルのパラメータを最適なものにチューニングし、より高い予測性能を実現するためです。
多くの機械学習モデルでは、モデルのパラメータを変えることで異なる学習が行われるため、パラメータの選択や組み合わせはモデルの予測性能に影響を与えます。そのため、モデルの構築においては様々なパラメータの組み合わせを試し、その中から最も予測性能が高いパラメータの組み合わせを選択することが一般的です。
交差検証によってホールドアウトされた評価用のデータをもとにモデルの汎化性能を推定し、その結果をもとにモデルのパラメータをチューニングすることで、最も汎化性能の高いパラメータの組み合わせを選択することが可能となります。
なお、候補となるパラメータの全ての組み合わせについて順番に学習と評価を行い、最も性能の良いパラメータを選ぶ方法をグリッドサーチ (grid search) と呼びますが、パラメータのチューニングにおいては、グリッドサーチと交差検証を組み合わせた方法も広く用いられます。
この場合、各パラメータの組み合わせに対して交差検証が行われますが、このようなグリッドサーチ自体を指して「交差検証」と呼ばれることもあります。
交差検証のメリット・デメリット
交差検証のメリット
学習データの分割を一度だけ行うホールドアウト法に比べて、交差検証には以下のようなメリットがあります。
- より信頼性の高い汎化性能の推定ができる
ホールドアウト法では学習データの一部のみが汎化性能の評価に使用されるため、その一部のデータがたまたま都合よく(悪く)選ばれたものとなり、モデルの実際の性能よりも高い(低い)スコアが得られる可能性を排除できません。交差検証では、すべてのデータが全てのデータが必ず一度評価に用いられるため、予測モデルがデータセットに含まれる全てのサンプルに対して高い汎化性能を持たなければ、高いスコアを得ることはできません。
- データをより効率的に学習に使える
ホールドアウト法では、学習データの一部が評価のみに使用されるため、学習に使えるデータが減ってしまうという欠点があります。一般的に、学習データの数とモデルの予測性能には正の相関があるため、学習データの減少はモデルの予測性能の低下を意味します。交差検証では、学習と評価に用いるデータを順番に入れ替えることで全てのデータがモデルの学習に使用されるため、ホールドアウト法に比べてデータをより有効に活用できます。この点は、データのサンプル数が少なく、限られたデータを少しでも有効に学習に使用する必要がある場合には特に重要となります。
交差検証のデメリット
一方、交差検証のデメリットは計算コストの高さです。分割数 (=k) を増やすほど、ホールドアウト法に比べておよそk倍の計算が必要となることから、無暗に分割数を増やすことは避ける必要があります。
分割数が大きくなるほど、追加の分割によって得られる学習データの増加量は減少していくことから、分割数を増やすことで得られる学習データ増加によるメリットと、計算コスト増加のデメリットを見極めながら学習・評価を進める必要があります。一般的には、4~10程度の分割の範囲で進められることが多いと考えられます。
交差検証の主な手法
k分割交差検証 (k-fold-cross-validation)
最も広く用いられる交差検証手法の一つが、k分割交差検証 (k-fold-cross-validation) です。「k-fold」は「k分割」を意味し、仮にkを4とした場合、学習データを4分割した交差検証となります。
具体的な手順は以下の通りです。まず学習データをランダムに(ほぼ同じサイズに)4分割した上で、最初の分割(分割1)ではデータ1~3を使ってモデルを構築し、データ4を使って性能評価を行います。以降では順に、データ3、2、1を評価データ、それ以外を学習データとした学習と評価を繰り返します。
そして、各分割での4つの評価スコアを平均などの方法で統合することで、予測モデルの汎化性能に対する交差検証全体としてのスコアが算出されます。
作成:Intelligence In Society
k分割交差検証は、Pythonの機械学習ライブラリscikit-learnのKFoldクラスなどを使用することで実施することができます。実装方法の詳細はscikit-learnのレファレンスサイトをご覧ください。
層化k分割交差検証 (stratified k-fold)
層化k分割交差検証 (stratified k-fold) は、クラス分類に偏りがあるケースなどで用いられる手法です。交差検証による評価結果が信頼性を持つためには、各分割内で評価に使用されるデータのクラス構成比が、学習データ全体の構成比と同等である必要があります。
しかし、例えば、2値分類で陽性のサンプルが全体に占める数が非常に少ないケースでは、k分割交差検証によってランダムに分割した場合、陽性の構成比が分割によって大きく変動する可能性があります。このような場合、各分割内でのクラス構成比のバラつきによって、評価のブレが大きくなるリスクがあります。
このように、クラス分類に偏りがあるケースなどでは、各クラスの構成比を保ちながら分割する、層化k分割交差検証が使用されます。層化交差検証では、各分割内におけるクラスの構成比が、学習データ全体の構成比と同じになるように分割が行われます。
作成:Intelligence In Society
層化k分割交差検証は、scikitlearnのStratifiedKFoldクラスなどを用いることで実施することができます。実装方法の詳細はscikit-learnのレファレンスサイトをご覧ください。
グループ付き交差検証 (group k-fold)
学習データの中に密接に関係するグループがある場合に用いられるのが、グループ付き交差検証 (group k-fold) です。例えば、顧客の購買履歴のデータをもとに、顧客があるキャンペーンに反応するか否かを予測するモデルを構築するケースを考えます。
個々の顧客を一つのグループと捉えた場合、過去の購買履歴データは、複数のサンプル(レコード)で構成されるグループが含まれた構造となります。このデータを単純にランダムに分割すると、同じ顧客(=グループ)が学習用データと評価用データの両方に含まれる形となりますが、これは、モデルの学習に、本来得られないはずの評価用データの情報がリークしている状態となります。
このような場合、評価用データでのスコアはモデルの性能を過大に評価したものとなる可能性があるため、それを避ける手段としてグループ付き交差検証が用いられます。グループ付き交差検証では、分割してはならないグループを特定し(この場合は顧客)、あるグループの全てのサンプルが必ず学習用データと評価用データのいずれかのみに属するように分割されます。
グループ付き交差検証は、scikitlearnのGroupKFoldクラスなどを用いることで実施することができます。実装方法の詳細はscikit-learnのレファレンスサイトをご覧ください。
1つ抜き交差検証 (leave-one-out)
学習データの数が少ない場合に有効な方法が、1つ抜き交差検証 (leave-one-out) です。これは、k分割交差検証のkが学習データ数と同じになり、各分割が1つのサンプルしかないものと同じです。
これにより、データ数が少ない場合に可能な限り多くのデータを使ってモデルの学習を行うことができるため、学習にかかる時間が少ない小規模データセットにおいては、より性能の高いモデルを構築するための選択肢となります。
ここまで、機械学習における「交差検証(クロスバリデーション)」について、その意味・目的やメリット・デメリット、主な手法を解説しました。
当記事に関連するトピックについての詳細は、以下のページをご覧ください。
また、機械学習に関する全ての記事は以下のページからご覧いただけます。
参考文献:
◦scikit-learn “API Reference – sklearn.model_selection ” https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html (2026年6月30日最終閲覧)
◦Andreas C. Muller、Sarah Guido (2017)『Pythonではじめる機械学習―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎』O’Reilly Japan
◦門脇大輔,阪田隆司,保坂桂佑,平松雄司 (2019)『Kaggleで勝つデータ分析の技術』, 技術評論社
◦Foster Provost, Tom Fawcett (2014) 『戦略的データサイエンス入門―ビジネスに活かすコンセプトとテクニック』O’Reilly Japan
◦本橋智光・橋本秀太郎 (2024)『改定新版 前処理大全-SQL/Pandas/Polars実践テクニック-』技術評論社