訓練・検証・テストとデータ漏洩
学習に使った例を上手に解けても、初めての例に使えるとは限りません。データを役割別に分け、同じ人物や未来の情報が混ざらないようにすると、実際の利用に近い評価へ近づけます。
三つの集合は使い道が違う
訓練集合は重みを学ぶため、検証集合はモデルの種類や学習率、停止時点などを選ぶため、テスト集合は選択後の成績を確かめるために使います。例えば1000例を700・150・150に分ける設計は可能ですが、この比率が常に最適というわけではありません。珍しいクラスの数、時間の順序、評価精度の必要性で変えます。テストの点数を見て何度も選び直せば、テスト集合も選択に使ったことになります。最後に残す未知の評価という役割を守り、どの段階で何を見たかを記録することが大切です。
行の数よりも独立した対象の数を考える
一人の声を100回録音したデータと、100人の声を一回ずつ録音したデータは、同じ100件でも未知の話者への評価としての意味が違います。同じ人の録音や同じ原画像の切り抜きが訓練とテストへ分かれると、対象固有の特徴を覚えただけでも成績が高く見える場合があります。未知の人に使うなら人単位、未知の設備に使うなら設備単位で分けるなど、利用場面に合わせてグループを定めます。重複を除く際も、ファイル名だけでなく内容や元データの由来を確認します。
前処理にも未来の答えを入れない
標準化の平均や分散、欠測を補う値、特徴の選択は、訓練側から決めて検証・テストへ同じ変換を適用します。全データの平均を先に計算してから分けると、評価側の分布の情報が訓練へ入り込みます。交差検証でも、各回の訓練部分だけで前処理を学ぶ必要があります。より直接的な漏れは、判定後にしか分からない記録を入力に含める場合です。例えば発送時点の遅延予測に到着済み時刻を使えばよく当たりますが、本来の予測時点には使えないため運用上の能力を示していません。
時間のあるデータは過去から未来へ試す
来月の需要を予測する目的なら、過去のデータで学び、後の期間で評価するのが自然です。全期間を無作為に混ぜると、未来の傾向を知ったモデルで過去を当てる状況になり得ます。時点をずらしながら訓練期間を伸ばす評価もありますが、移動平均などの特徴が後の値を含まないかを確かめます。観測窓や目標期間が重なる場合は、訓練と評価の境界に間隔を置くなどの工夫が必要です。ランダム分割が悪いのではなく、その評価が実際に解きたい未知の状況を再現しているかが問題です。
過学習と分布の変化を分けて診断する
訓練誤差は下がるのに検証誤差が上がるなら、訓練固有の雑音に適合している可能性があります。モデル容量、正則化、データ量、早期停止を見直します。一方、運用開始後に撮影機材や客層が変われば、過去のテストが適切でも性能は落ち得ます。これは分布の変化という別の問題です。評価件数が少ないと偶然の揺れも大きくなるので、全体平均だけでなく期間・条件・群別の件数と誤りを調べます。漏洩を防ぐこと、未知例で評価すること、運用中の変化を追うことを組み合わせます。
確認問題
全1000件で標準化の平均を求めた後に訓練700件とテスト300件へ分けました。どのように修正すべきですか。
解答と考え方を見る
先に分割し、平均と標準偏差は訓練700件だけから求めます。その同じ値で訓練とテストの両方を変換します。交差検証でも各回の訓練部分で前処理を学び直します。人・時系列などの依存関係がある場合は分割単位も見直します。
参考資料・次に読む資料
- Google:Datasets — Dividing the original dataset訓練・検証・テストと、重複した例による評価の問題。
- scikit-learn:Common pitfalls and recommended practices前処理の一貫性と、テスト情報の漏れ込みを防ぐ方法。
- scikit-learn:Cross-validation — evaluating estimator performanceグループ分割や時系列を含む交差検証の考え方。
資料確認日:2026-11-03。