K_DM Book
用語集
対象者 高校生
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

学習データとテストデータの区切り(高校生向け)

入門高校生

04.1.2 高校生向け

学習データとテストデータの区切り(高校生向け)

最終更新 2026-11-01 読了時間 2 分
まとめ
予測モデルの実力は、モデルが一度も見ていないデータで測ります。見せる部分を学習データ、隠しておく部分をテストデータと呼び、時系列ではデータを日付順のまま「前の 180 日=学習」「後ろの 60 日=テスト」のように区切って、シャッフルして混ぜることはしません。本番で予測するのはいつも「まだ来ていない未来」なので、テストもそれと同じ状況にしないと実力より良い点数が出てしまいます(未来のリーク)。区切りは図に点線で描いて、「どこから先を隠したか」を誰が見てもわかるようにします。

こんな場面を想像してみよう #

模試の前に問題集で練習するとします。本番の問題が練習した問題とまったく同じだったら、満点でも「実力」とは言えませんよね。予測モデルも同じで、練習に使っていない問題で採点しないと本当の力はわかりません。

時系列ではもう 1 つ条件が増えます。「来月の売上を予測する」モデルの実力を測るのに、来月のデータを練習に混ぜていたらカンニングです。だから区切りは必ず時間の順に 1 本だけ入れます。

日付順の折れ線の前半 180 日が青い学習データ、後ろ 60 日が赤いテストデータとして描かれ、境目に点線と「テスト開始」の印がある

240 日分のうち前の 180 日が青い学習データ、後ろの 60 日が赤いテストデータです。点線より右はモデルから見れば「まだ来ていない未来」。モデルは青い部分だけで作られ、赤い部分を予測し、実際の赤い線とのズレで採点されます。

仕組み:時間順に切って、後ろを隠す #

まず、日付順に並べます。時系列は順番そのものが情報なので、並べ替えやシャッフルはしません。次に区切りの日を決めます。図では「最後の 60 日をテストにする」と決め、その境目に点線を引きました。本番で予測したい長さ(来月なら 30 日)以上をテストに取るのが目安です。それから青い部分だけでモデルを作ります。モデルは点線の右側を一度も見ません。そのうえで赤い 60 日分を予測させ、実際の値と比べます。ズレ(誤差)の大きさが、このモデルの「本番での実力」の見積もりになります。最後に区切りをずらしてくり返します——区切りを 1 か月ずつ後ろに動かして同じことを何回も行うと、「たまたま簡単な期間だった」偶然を減らせます。これが時系列版の交差検証(ウォークフォワード検証)です。

区切りの計算そのものは、リストを前後に切るだけです。10 日分の値から後ろ 3 日をテストに取ると、学習は 7 個、テストは 3 個になります。

1
2
3
4
5
6
values = [500, 503, 499, 505, 510, 508, 515, 520, 518, 525]  # 10 日分、日付順
n_test = 3
train = values[:-n_test]   # 前の 7 日 = 学習データ
test = values[-n_test:]    # 後ろの 3 日 = テストデータ
print("train:", train)
print("test :", test)

動かして見てみよう #

下の図で「再生」を押すと、説明した手順が 1 つずつ進みます。手順ごとの説明は図の下に出ます。

気をつけたいこと #

いちばん大事なのは、ランダムに分けると成績が良すぎることです。折れ線は 1 日ごとに少しずつ動くので、100 日目と 102 日目を知っていれば 101 日目はほぼ当たります。ランダムに抜いたテストはこの「両隣を知っている」状態で、本番ではあり得ない好成績が出ます。二つ目は、テスト期間が特殊だと評価が偏ること。テストが年末だけだと、その時期特有の動きで点数が決まるので、区切りをずらして複数回評価すると偏りが見えます。三つ目は、検証データも時間順に切ること。モデルの設定を選ぶ検証データを追加するときも「学習 → 検証 → テスト」と時間順に並べ、テストデータは最後に 1 回だけ使います。最後に、未来の情報はこっそり混ざります——「今日の売上」を予測するのに「今日の天気の実績」を使うのもリークなので、予測の時点で手に入る情報(天気予報)だけを使えているか確かめましょう。

やってみよう #

最初の課題は、自分の 30 日分の記録(歩数・勉強時間など)を日付順に並べ、前の 24 日だけを見て後ろの 6 日を予想し、実際の値とのズレを紙で計算することです。二つ目は、身の回りで「予測の時点ではまだ手に入らない情報」を 2 つ挙げ、それが混ざるとなぜ成績が良く見えるか説明すること。試合の結果や当日の来客数などが例です。三つ目は、課題 1 の 30 日から、ランダムに 6 日を隠して予想したらどれくらい簡単になるか試し、隣の日が見えていることがどう助けになったかを言葉にすることです。

つぎに読む #

iloc での分割と axvline で境界を描くコードは 標準版の学習データとテストデータの区切り で扱っています。区切る前に 240 日の売上を折れ線にして全体像をつかむ方法は 日次データの基本プロット(高校生向け) で説明しています。章全体の流れは 時系列の基礎 へ。