クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

見ていないデータでテストする

このレッスンのあとで: モデルを、学習に使っていないデータでテストする理由を説明できる。

40分のレッスンコマンドなし

報告では100%だったのに

大阪のある物流会社が、配達が遅れるかを予測するモデルを作りました。

社内の報告では、正解率は100%でした。ところが、実際の配達で使い始めると、10件中6件しか当たりません。

原因は、モデルの作り方ではなく、テストのやり方にありました。このレッスンでは、正しいテストのしかたを学びます。

このレッスンのゴール

メモ

モデルを、学習に使っていないデータでテストする理由を説明できる。

キーワード

ことばいみれい
訓練データモデルが学ぶために使う例です。
テストデータ成績を測るために、取っておく例です。
分割データを訓練用とテスト用に分けることです。8割と2割
未知のデータモデルがまだ一度も見ていないデータです。
データ漏れテスト用の情報が、学習に混ざることです。

学生が入力するセルは、このプレビューでは空白です。

覚えた例で測っても、力は分からない

新人のドライバーが、研修で走ったルートだけを覚えたとします。そのルートでは、もう迷いません。

でも、本当の力が分かるのは、初めて走る地区に出たときです。

モデルも同じです。学習に使った例で測ると、答えを覚えているだけでも高い点が出ます。仕事で出会うのは、いつも未知のデータです。だから、見ていないデータで測ります。

例: 同じモデルを二通りに測る

測ったデータ当たった件数正解率
学習に使った100件100件100%
学習に使っていない100件60件60%
実際の配達(翌月)約60件約60%

学生が入力するセルは、このプレビューでは空白です。

データは、最初に分けておく

学習を始める前に、データを二つに分割します。

よく使われるのは、8割を訓練データ、2割をテストデータにする分け方です。

テストデータは、最後の成績を測るときまで、モデルに見せません。1000件あれば、800件で学び、200件で測ります。

やってみよう: 8割と2割に分ける

コード: python
# 大阪の物流会社の、配達記録10件です。1 は遅れ、0 は時間どおりです。
records = [0, 1, 0, 0, 1, 0, 0, 1, 0, 0]

percent = 80

# 何件を訓練に使うかを、割合から計算します。
cut = len(records) * percent // 100

train = records[:cut]
test = records[cut:]

print("訓練データ:", len(train), "件", train)
print("テストデータ:", len(test), "件", test)

# percent を 70 に変えて、件数がどう変わるか見ましょう。

よくある誤解

注意

データは全部学習に使い、同じデータでテストすればよい、と考える人がいます。それでは、答えを覚えただけのモデルでも満点になります。成績を報告するときは、学習に使っていないデータで測った数を出しましょう。

データ漏れは、気づかないうちに起きる

テスト用の情報が学習に混ざることを、データ漏れと呼びます。

たとえば、同じ荷物の記録が二重に登録され、訓練とテストの両方に入ることがあります。

時間にも注意します。4月から9月で学び、10月で測るのが自然です。10月の記録で学ぶと、未来を知っているモデルになってしまいます。

データ漏れがあるのはどれか

やり方漏れ理由
4月から9月で学び、10月で測るなし過去で学び、後の月で測っている
同じ荷物の記録が、両方に入っているありテストの答えを見てしまう
全期間から、ばらばらに2割を取る注意未来の記録で学ぶことがある
実際の到着時刻を、特徴量に入れるあり予測の時点では分からない情報

学生が入力するセルは、このプレビューでは空白です。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。