前のモジュールでは、データセットを次の 2 つのサブセットに分割する考えを紹介しました。
- トレーニング セット - モデルをトレーニングするためのサブセットです。
- テストセット - トレーニング済みモデルをテストするサブセット
単一のデータセットは次のようにスライスすると考えてください。
図 1. 単一のデータセットをトレーニング セットとテストセットにスライスする。
テストセットが次の 2 つの条件を満たしていることを確認します。
- 統計的に有意な結果を得られる十分な大きさである。
- データセット全体を代表している。つまり、トレーニング セットとは異なる特性を持つテストセットは選択しないでください。
テストセットが上記の 2 つの条件を満たしている場合、目標は、新しいデータに合わせて一般化されるモデルを作成することです。このテストセットは、新しいデータのプロキシとして機能します。たとえば、次の図について考えてみましょう。トレーニング データ用に学習したモデルは非常にシンプルです。このモデルは完全なジョブを実行しません。予測が間違っています。ただし、このモデルは、トレーニング データの場合とほぼ同じでテストデータを処理します。言い換えれば、この単純なモデルはトレーニング データに対して過学習ではないということです。
図 2. テストデータに対してトレーニング済みモデルを検証する。
テストデータではトレーニングしないでください。評価指標で驚くほど良い結果が得られた場合、誤ってテストセットでトレーニングしている可能性があります。たとえば、精度が高い場合は、テストデータがトレーニング セットに漏洩している可能性があります。
たとえば、件名、メール本文、送信者のメールアドレスを特徴として使用し、メールが迷惑メールであるかどうかを予測するモデルについて考えてみましょう。データをトレーニング セットとテストセットに 80 対 20 で分割します。トレーニング後、モデルはトレーニング セットとテストセットの両方で 99% の精度を達成します。テストセットの精度は低下することが予想されるため、データをもう一度確認すると、テストセットのサンプルの多くがトレーニング セットのサンプルと重複していることがわかりました(データを分割する前に、入力データベースから同じ迷惑メールの重複するエントリをスクラブしていませんでした)。一部のテストデータで誤ってトレーニングしてしまったため、モデルが新しいデータに対してどの程度一般化されているかを正確に測定できなくなりました。