Kaggle

機械学習の訓練データとテストデータをわかりやすく解説

 

機械学習に興味を持ち、いざkaggleに挑戦!と思ったのに、下記で困ることはないでしょうか。

機械学習でよく言われる「訓練データ」と「テストデータ」の違いがよくわからない・・

kaggleのtitanicに挑戦しようとしているけど、ダウンロードした「train.csv」が訓練データで、「test.csv」がテストデータであっているの・・?

 

この記事をお読みいただくと、以下が解決されます。

・「訓練データ」「テストデータ」の違いが分かる

・「訓練データ」「テストデータ」とkaggleで与えられる「train.csv」「test.csv」データの関係性が分かる

 

本記事の目次は以下の通りです。

①機械学習の訓練データとテストデータとは

②Kaggleのtitanicコンペだとどうなるか

③まとめ

 

①機械学習の訓練データとテストデータとは

いわゆるAI(人工知能)を作るためのデータが訓練データ、そのAIが「どれくらい正しく予測できているか」を確認するためのデータがテストデータです。

※AIという言葉が個人的には好きではないですが、ここではざっくり説明をするために使用しています。

 

わかりづらいと思うので、具体例を出します。

たとえばあなたがアイスクリーム屋の店長で、「”今日、アイスクリームはいくら売れそうか”予測するAIを作りたい」とします。

あなたは予測に使えそうな「気温」「店の前の往来人数」「実際の売上」のデータを100日分集めました。

 

このとき、単純に考えるとこの100日分全てのデータをAIに学習させて、アイスクリームの売上(上のエクセルの一番右列)を予測できるようにするのが近道だと考える人が多いでしょう。

しかし、そうすると従業員からこんな突っ込みが想定されます。

Hawaii
「店長、そのAIってどれくらいちゃんと予測できるんですか?ちゃんと当てられるんですかー?」

この質問に対して、手元のデータ100日分をすべてAIのモデル作成に使うと、「一体このAIはどれくらいの精度で結果を予測できるのか」誰にもわからなくなってしまいます。

今回の例だとわかりづらいかもしれませんが、実際に企業がAI製品を発売するとき、「どれくらいちゃんと当てられるかは試していません!」と言っているようなものです。

それだと困りますよね。

ですので、通常はこの100日分のデータの中から、検証用のデータを残しておき、一部のデータを使ってAIモデルを作ります

そう、この「一部のデータ」が訓練データ、「残しておく検証用のデータ」がテストデータです。

まだ少しイメージがつきづらいと思うので、具体的に3つのSTEPで解説していきます。

STEP1:まず100日分のデータから70日分(70は適当な数値です)を訓練データとして抜粋し、そのデータを元にアイスクリーム売上予測AIを作ります。

 

STEP2:STEP1で作ったアイスクリーム売上予測AIに、【B】テストデータの30日分を読み込ませ、AIに売上を予測させる。

※この時、予測結果の答えとなる売上の列はAIには見せない。

STEP3:STEP2で予測した結果と手元の本当の売上結果を比較し、精度を検証する。欲しい精度に達しなかった場合、AIモデルを作りなおす。

※今回は精度の検証方法・AIモデルの再作成のやり方までは言及しません。

STEP2・3を図解したものがこちらです。

 

以上が、機械学習の一連の流れです。

ポイントは、STEP2のタイミングでは、今回予測したい売上の「実際のデータ」はAIに見せないことです(上の図の緑枠部分)。

正解を隠してAIで予測→予測結果と本当の結果を比較して、

「これくらいの差なら、まあいいよね」なのか、

「いや、さすがに精度が悪すぎる。何かを変えてAIモデルを作りなおそう」という動きに繋がるイメージです。

 

以上、機械学習における訓練データとテストデータの違いについて解説しました。

さて、ここからは、今の話をKaggleのtitanicコンペに適用するとどうなるかについてです。

②Kaggleのtitanicコンペだとどうなるか

Kaggleの登竜門と言われるtitanicコンペでは、以下2つのデータをサイトからダウンロードできます。

「train.csv」

「test.csv」

これ、名前がややこしいんです。

私はtitanicコンペに初めて取り組むとき、先ほどの【A】訓練データがtrain.csv、【B】テストデータがtest.csvなのねと勘違いし、大混乱しました。

結論を図解すると、下記になります。

①で解説した【A】訓練データと【B】テストデータに分けてAIモデルを作成・精度検証をする作業はすべてtrain.csvで完結させます。

このtrain.csvで作成したAIモデルを使って、test.csvのデータの乗客の生死を判別→Kaggleへ提出(submit)する流れになります。

考え方は、ざっくり以下の様なイメージです。

【Kaggle側の声】

「train.csv」でよさげなAIモデルを自分で作ってくださいね。

モデルが完成したら、そのモデルでtest.csvのデータの結果(titanicコンペで言うと乗客の生死)を予測して、Kaggleに提出してね!

答えはKaggle側で持ってるから、答え合わせはこちらでしておきますね!

test.csvと機械学習で言われるところの【B】テストデータの関係性がわかっていなかったために、私は無用な時間を費やすことになってしまいました。

少し考えれば当然の話なのですが、本当に駆け出しだと、こういう小さいこと1つ1つに躓く経験を何度もして、本当に苦しかったですし、投げ出したくなりました。

③まとめ

・AIモデルを作る際、手元のデータを【A】訓練データと【B】テストデータに分けて、【A】訓練データを元にAIモデルを作ります。

・【B】テストデータでAIモデルの精度を検証し、必要があれば作りなおします。

・Kaggleのtitanicコンペで渡されるtrain.csvを【A】と【B】に分けてAIモデルを作る→精度の検証を行います。

・最後に、test.csvのデータを元に作ったAIモデルで結果を予測し、Kaggleに提出します。

私はこんな基本的なことでも、理解に膨大な時間をかけてしまいました。

皆さんは是非今回の記事をお読みいただき、本来の「勉強・実装」に時間をしっかり充てられるようにしていただけると嬉しいです。

 

-Kaggle

© 2021 データサイエンス はじめの一歩 Powered by AFFINGER5