機械学習で『データを分ける』のは鉄則です。訓練・検証・テスト、3つの役割分担を、テスト勉強に例えて一気に整理します。なぜ分けるのか、その理由を腹落ちさせましょう。
先生、手持ちのデータ全部使って学習した方が、めっちゃ賢くなるんじゃない? 分けるなんてもったいないじゃん!
気持ちはわかるけれど、そこに落とし穴があるの。
機械学習ではデータを訓練データ・検証データ・テストデータの3つに分けるのが基本よ。
テスト勉強に例えると、教科書で勉強して(訓練)、練習問題で理解度を確かめて(検証)、最後に模試で本当の実力を測る(テスト)、そんなイメージです。
練習で使った問題がそのままテストに出たら、答えを覚えてるだけになっちゃって、本当の実力じゃないですよね〜。
まさにそれ。
もしテストデータを学習に使ってしまうと、AIは答えを『盗み見』した状態になり、本当の未知データへの実力がわからなくなる。
これをデータリーケージ(情報漏れ)と呼ぶわ。
一般的な比率ってあるの?
ケースバイケースですが、たとえば6:2:2や8:1:1などがよく使われます。
データ量が多ければテストを小さくしても十分ですね。
逆に少ない場合は交差検証という工夫を併用します(次回扱います)。
大事なのは『テストデータに学習中は一切触れない』ルール。
1回でも見たらもうテストの意味がなくなるわ。
カンニング禁止のルールと同じなんですね〜、すっごく厳しい〜。
ましろ、先生の真似うまいじゃん(笑)。
検証データも使いすぎには注意が必要です。
何度も同じ検証データでハイパーパラメータを調整し続けると、そのデータに過剰適合してしまう危険があります。
これを検証データへのオーバーフィットと呼びます。
だから次回学ぶ交差検証という工夫も出てくるのね。
今日のまとめは『訓練=学習、検証=調整、テスト=最終評価』、そして『テストには絶対触らない』よ。
公平に実力を測る仕組みなんだね。
なるほど、納得!
ちなみにKaggleなどの機械学習コンペでは、参加者に配られるのは訓練データと特徴量のみ、テストデータの正解は主催者だけが持ち、最終スコアで順位を決めます。
これも同じ仕組みですね。
コンペなのに、答えを知らないまま戦うんですね〜! ドキドキしちゃう…
そう、だからこそ汎化性能を真剣に考える文化ができたの。
試験でも『テストデータを学習に使わない』『3分割の役割分担』は定番の問題よ。
あたしもテストの過去問で練習するとき、本番予想の問題は別にとっておくもん。
発想は同じだね!
テストデータを分ける習慣が、AIの世界でも学校のテストでも大事なんですね〜!
ちなみに時系列データでは、未来を過去で予測することが目的なので、訓練を過去期間・テストを未来期間に設定するのが鉄則です。
ランダム分割すると未来情報が過去に混ざってしまうので注意が必要です。
株価予測で『来月の株価』を訓練データに混ぜちゃったら、未来の情報を先に見てることになるもんね。
そりゃズルいわ。
確認クイズ
テストデータの役割として正しいものはどれか?
- モデルの学習に使う
- ハイパーパラメータの調整に使う
- 最終的な性能評価に使う
- 特徴量の作成に使う
こたえを見る
正解: 3. 最終的な性能評価に使う
テストデータは最終評価専用です。学習や調整に使うとデータリーケージが発生し、本当の汎化性能がわからなくなります。『3分割の役割分担』は機械学習の基本ルールです。