この記事では、機械学習における「バリデーションデータ」について、その意味や学習データ・テストデータとの関係性、バリデーションデータが必要な理由や具体的な分け方を解説します。
<目次>
バリデーションデータとは何か?
バリデーションデータの意味
機械学習におけるバリデーションデータ (validation dataset) とは、端的には、モデルの評価・検証用のデータセットを意味します。「検証データ」「検証セット」などの呼び名も使用されます。
バリデーションデータにおいて具体的に評価されるものは、学習済みの予測モデルの予測性能です。予測性能の評価には対象とするモデルの性質によって最適な指標が用いられ、二値分類モデルでは正答率・F1スコアやlogloss・AUC、回帰モデルではRMSE・MAE・決定係数などの指標が使用されます。
学習済みのモデルを用いてバリデーションデータで予測い、その結果がこれらの指標で「スコア」として得られることで、後述するモデルの汎化性能の把握やパラメータのチューニングなどを行うことが可能となります。
学習データ・テストデータとの違いと関係性
機械学習における代表的なデータセットには、バリデーションデータの他に、学習データ (training dataset:教師データ・訓練データ)と、テストデータ (test dataset) があります。
学習データ:
モデルの学習に使用するデータ。予測モデルは、学習データからパターンを見つけることで、そのパターンを用いた予測を行います。
テストデータ:
モデルの性能の評価に使用するデータ。実運用におけるモデルの予測性能の把握や、実運用への移行可否の判断に用いられます。
バリデーションデータは、一見、テストデータと同じものであるように思えますが、両者は異なるものです。
バリデーションデータでの評価は、モデルの構築・改善を行うプロセスの一部として行われるもので、 バリデーションデータでの評価 → 評価結果に基づくモデルの改善 → 評価 → 改善 → …というプロセスを繰り返すことで最終的なモデルが構築されます。
一方、テストデータでの評価は、上記プロセスを経て構築された最終的なモデルの、実運用において想定される未知のデータに対する予測性能を確認するために行われます。
作成:Intelligence In Society
バリデーションデータでの評価をもとにモデルを改善することは、バリデーションデータの持つ情報をモデルに使用している(バリデーションデータの情報がリークしている)ことを意味します。そのため、実運用で想定される未知のデータに対する予測性能を把握する手段として、バリデーションデータでの評価結果は適切ではありません。
実運用で想定される未知のデータに対する予測性能の確認には、バリデーションデータとは別に、モデルの学習・改善に一切使用していないテストデータを用いることが一般的なアプローチとなります。
なぜバリデーションデータが必要なのか?
過学習の回避
バリデーションデータによる検証が必要な理由の一つは、モデルの汎化性能(未知のデータに対する予測能力)を評価することで、モデルが学習データに対して過学習(オーバーフィッティング)となることを避けるためです。
多くの機械学習モデルは、学習データに過剰に適合することで容易に過学習を引き起こします。例えば決定木系のモデルでは、ノード数(ツリーのサイズ)を大きくするに伴って、学習データに対する予測精度は100%に近づいていきますが、その過程で母集団の一般的な特徴ではない不要な疑似相関を拾うため、未知のデータに対する予測性能は低下していきます。
このような過学習による汎化性能の低下を回避するための主要な方法の一つは、バリデーションデータに対するモデルの予測精度を確認しながら、モデルが複雑になり過ぎないようにコントロールすることです。
モデルパラメータのチューニング
バリデーションデータによる検証が必要な理由の2つ目は、モデルのパラメータを最適なものにチューニングし、より高い予測性能を実現するためです。
多くの機械学習モデルでは、モデルのパラメータを変えることで異なる学習が行われるため、パラメータの選択や組み合わせはモデルの予測性能に影響を与えます。そのため、モデルの構築においては様々なパラメータの組み合わせを試し、その中から最も予測性能が高いパラメータの組み合わせを選択することが一般的です。
この時、テストデータでの予測結果を使いパラメータを最適化することは、本来予測に使用できないはずのテストデータの情報が、モデルの構築に使われている(リークしている)ことを意味するため、適切ではありません。
テストデータとは別に用意したバリデーションデータでの予測結果をもとにモデルのパラメータをチューニングすることで、テストデータでは、未知のデータに対する予測性能を適切に評価することが可能となります。
バリデーションデータをどう分けるのか?
バリデーションデータによる検証を行うためには、手元にあるデータの一部を学習データやテストデータから分け、バリエーション用のデータセットを用意する必要があります。バリデーションデータの分け方の代表的なものには、以下の2つの方法があります。
ホールドアウト法 (hold-out法)
ホールドアウト法 (hold-out法) は、学習データの一部をモデル構築のために使用せず取っておき(ホールドアウト)、これをバリデーションデータとして使用する方法です。モデルの学習にはバリデーションデータを除いた学習データのみを用い、学習済みのモデルの予測性能をバリデーションデータで評価します。
一般的には、学習データをランダムに4~10分割した上で、そのうちの一つをバリデーションデータとします。
作成:Intelligence In Society
なお、ホールドアウト法は学習データとテストデータがランダムに分割されており、2つのデータが確率的に同質であることを前提とした手法です。これは、学習データの一部を切り出したバリデーションデータがテストデータと同質であることで、学習データとバリデーションデータの関係が、学習データとテストデータの関係と同じであることを意味します。
例えば、時系列データにおいて、学習データが2023年~2025年、テストデータが2026年というケースでは、学習データから切り出したバリデーションデータとテストデータ2つが同質ではない可能性があり、ホールドアウト法による検証は適切な評価とならない場合があることに注意が必要です。
クロスバリデーション(交差検証)
ホールドアウト法は簡単にバリデーションデータを作成できる便利な方法である一方、主に2つのデメリットがあります。
1つは、ホールドアウト法では確かに汎化性能を推定することができますが、学習データの一部を使用した1回の推定に過ぎないという点です。この場合、その一部のデータがたまたま都合よく(悪く)選ばれたものとなり、モデルの実際の性能よりも高い(低い)スコアが得られる可能性を排除できません。
もう1つは、学習データの一部をバリデーションデータとすることで、学習に使えるデータが減ってしまうという点です。一般的に、学習データの数とモデルの予測性能には正の相関があるため、学習データの減少はモデルの予測性能の低下を意味します。
ホールドアウト法のこれらのデメリットを回避し、より洗練させた方法が、クロスバリデーション(cross-validation:交差検証)です。クロスバリデーションは、ホールドアウト法による分割を複数回行い、各回の学習とバリエーションに用いるデータを順番に入れ替えながらモデルの学習と評価を行います。
作成:Intelligence In Society
例えば、上図のように学習データを4分割する場合、全てのデータが必ず一度バリデーションに使用されると同時に、全てのデータが学習にも使用されます。
予測モデルの汎化性能は、それぞれのバリデーションデータでのスコアの平均を取るなどして評価されるため、一部のバリデーションデータで偶然発じたスコアに全体の評価が左右されることがありません。各バリデーションデータでのスコアをもとに分散などを計算することで、性能推定の信頼度を測ることも可能です。
また、全てのデータを学習に使用するため、ホールドアウト法に比べてデータをより有効に活用しています。この点は、データのサンプル数が少なく、限られたデータを少しでも有効に学習に使用する必要がある場合には特に重要となります。
一般的なモデル構築の進め方では、クロスバリデーションによる評価を行いながら、パラメータのチューニングを行う方法が広く採用されています。
ここまで、機械学習における「バリデーションデータ」について、その意味や学習データ・テストデータとの関係性、バリデーションデータが必要な理由や具体的な分け方を解説しました。
当記事に関連するトピックについての詳細は、以下のページをご覧ください。
また、機械学習に関する全ての記事は以下のページからご覧いただけます。
参考文献:
◦Foster Provost, Tom Fawcett (2014) 『戦略的データサイエンス入門―ビジネスに活かすコンセプトとテクニック』O’Reilly Japan
◦門脇大輔,阪田隆司,保坂桂佑,平松雄司 (2019)『Kaggleで勝つデータ分析の技術』, 技術評論社