データセット: 元のデータセットの分割

優れたソフトウェア エンジニアリング プロジェクトでは、アプリのテストに多大な労力を費やしています。同様に、ML モデルをテストして予測の正確性を確認することを強くおすすめします。

トレーニング、検証、テストセット

モデルをテストする際は、モデルのトレーニングに使用したものとは異なるサンプルセットを使用する必要があります。後で学習するように、同じサンプルセットでテストするよりも、異なるサンプルでテストする方が、モデルの適合性を示す強力な証拠になります。これらのさまざまな例はどこで入手できますか?従来の ML では、元のデータセットを分割することで、さまざまなサンプルを取得します。したがって、元のデータセットを次の 2 つのサブセットに分割する必要があると考えられます。

図 8. 2 つの部分に分割された横棒。そのうちの約 80% がトレーニング セットで、約 20% がテストセットです。
図 8. 最適な分割ではありません。

 

演習: 直感を確認する

トレーニング セットでトレーニングし、複数のラウンドにわたってテストセットで評価するとします。各ラウンドでは、テストセットの結果を使用して、ハイパーパラメータと特徴セットを更新する方法を決定します。このアプローチに問題はありますか?回答は 1 つだけ選択してください。
この手順を何度も繰り返すと、モデルがテストセットの特殊性に暗黙的に適合する可能性があります。
はい。同じテストセットを使用する頻度が高くなるほど、モデルがテストセットに近似する可能性が高くなります。教師が「テストに合わせて教える」ように、モデルはテストセットに意図せず適合し、モデルが実世界のデータに適合しにくくなる可能性があります。
この方法は問題ありません。トレーニング セットでトレーニングを行い、別のテストセットで評価します。
実は、ここには微妙な問題があります。徐々に問題が発生する可能性のあることを考えてください。
このアプローチは計算上非効率的です。テストの各ラウンド後にハイパーパラメータや特徴セットを変更しないでください。
頻繁なテストは費用がかかりますが、重要です。ただし、頻繁なテストは、追加のトレーニングよりもはるかに費用対効果が高いです。ハイパーパラメータと特徴セットを最適化すると、モデルの品質を大幅に向上させることができるため、必ず時間と計算リソースを割り当てて作業してください。

データセットを 2 つのセットに分割することは適切な考え方ですが、データセットを3 つのサブセットに分割することをおすすめします。トレーニング セットとテストセットに加えて、3 つ目のサブセットは次のとおりです。

  • 検証セットでは、トレーニング中にモデルの初期テストが実行されます。
図 9. 3 つの部分に分割された横棒。そのうち 70% がトレーニング セット、15% が検証セット、15% がテストセットです。
図 9. はるかに良い分割です。

検証セットを使用して、トレーニング セットの結果を評価します。検証セットを繰り返し使用した結果、モデルが良好な予測を行っていると思われる場合は、テストセットを使用してモデルを再確認します。

次の図は、このワークフローを示しています。この図の「モデルを調整する」とは、学習率の変更、特徴の追加や削除、まったく新しいモデルの設計など、モデルに関するあらゆる調整を意味します。このワークフローの最後に、テストセットで最も優れたモデルを選択します。

図 10. 次のステージで構成されるワークフロー図:
            1. トレーニング セットでモデルをトレーニングします。2. 検証セットでモデルを評価します。3. 検証セットの結果に応じてモデルを微調整します。4. 1、2、3 を反復し、最終的に検証セットで最も優れたモデルを選択します。5. テストセットで結果を確認します。
図 10. 開発とテストに適したワークフロー。

図 10 に示すワークフローは最適ですが、このワークフローでも、テストセットと検証セットは繰り返し使用すると「消耗」します。つまり、ハイパーパラメータの設定やその他のモデルの改善について同じデータを使用するほど、モデルが新しいデータに対して適切な予測を行う確信は低くなります。そのため、テストセットと検証セットを「更新」するために、より多くのデータを収集することをおすすめします。新しく始めることは、大きなリセットになります。

演習: 直感を確認する

データセット内のすべてのサンプルをシャッフルし、シャッフルしたサンプルをトレーニング セット、検証セット、テストセットに分割しました。ただし、テストセットの損失値が非常に低いため、誤りがあると思われます。何がいけなかったのでしょうか
テストセットのサンプルの多くは、トレーニング セットのサンプルの重複です。
はい。これは、重複する例が多いデータセットで問題になる可能性があります。テストする前に、テストセットから重複する例を削除することを強くおすすめします。
トレーニングとテストは非決定的です。偶然、テスト損失が非常に低くなることがあります。テストを再実行して結果を確認します。
損失は実行ごとに多少変動しますが、機械学習の宝くじに当たったと思うほど変動してはいけません。
テストセットに、モデルのパフォーマンスが良好な例がたまたま含まれていた。
例は十分にシャッフルされているため、この可能性は極めて低いです。

テストセットに関するその他の問題

前の質問で説明したように、重複する例はモデルの評価に影響する可能性があります。データセットをトレーニング セット、検証セット、テストセットに分割したら、トレーニング セットのサンプルの重複である検証セットまたはテストセットのサンプルを削除します。モデルの公平なテストは、重複ではなく新しい例に対するテストのみです。

たとえば、メールの件名、メール本文、送信者のメールアドレスを特徴として使用して、メールがスパムかどうかを予測するモデルについて考えてみましょう。データをトレーニング セットとテストセットに 80% 対 20% で分割するとします。トレーニング後、モデルはトレーニング セットとテストセットの両方で 99% の精度を達成します。テストセットの精度が低くなることが予想されるため、データをもう一度確認すると、テストセットのサンプルの多くがトレーニング セットのサンプルの重複であることがわかりました。問題は、データを分割する前に、同じ迷惑メールの重複エントリを入力データベースから削除しなかったことです。一部のテストデータで誤ってトレーニングを行った。

要約すると、優れたテストセットまたは検証セットは、次のすべての条件を満たしています。

  • 統計的に有意なテスト結果が得られるほど十分な規模。
  • データセット全体を代表するものです。つまり、トレーニング セットとは異なる特性を持つテストセットを選択しないでください。
  • ビジネス目的の一環としてモデルが遭遇する実際のデータの代表。
  • トレーニング セットに重複するサンプルがゼロ。

演習: 理解度を確認する

固定数の例を含む単一のデータセットについて、次の記述のうち正しいのはどれですか。
モデルのテストに使用される例は、モデルのトレーニングに使用される例を 1 つ減らすことになります。
サンプルをトレーニング セット、テストセット、検証セットに分割することはゼロサムゲームです。これが主なトレードオフです。
テストセットのサンプル数は、検証セットのサンプル数より大きくする必要があります。
理論的には、検証セットとテストセットには同じ数の例が含まれているか、ほぼ同じ数である必要があります。
テストセットのサンプル数は、検証セットまたはトレーニング セットのサンプル数よりも大きくする必要があります。
通常、トレーニング セットのサンプル数は、検証セットまたはテストセットのサンプル数よりも多くなりますが、各セットの割合に関する要件はありません。
テストセットに、統計的に有意なテストを実行するのに十分な数の例が含まれているとします。さらに、テストセットに対するテストでは損失が低くなります。しかし、このモデルは実世界ではパフォーマンスが低下しました。どうすればよいですか。
元のデータセットと実際のデータの違いを特定します。
はい。優れたデータセットであっても、実際のデータのスナップショットにすぎません。基盤となるグラウンド トゥルースは時間とともに変化する傾向があります。テストセットがトレーニング セットと十分に一致してモデルの品質が高いことを示唆しているにもかかわらず、データセットが実世界のデータと十分に一致していない可能性があります。新しいデータセットに対して再トレーニングと再テストが必要になる場合があります。
同じテストセットで再テストします。テスト結果が異常だった可能性があります。
再テストで結果が若干異なる可能性はありますが、この方法はあまり役に立ちません。
テストセットに含めるサンプルの数は?
統計的に有意なテストを実施するのに十分な数の例。
はい。例の数はいくつですか?テストする必要があります。
元のデータセットの 15% 以上。
15% が十分な例かどうかはケースバイケースです。