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

kaggleのtitanicに挑戦しようとしているけど、ダウンロードした「train.csv」が訓練データで、「test.csv」がテストデータであっているの・・?
この記事をお読みいただくと、以下が解決されます。
・「訓練データ」「テストデータ」の違いが分かる
・「訓練データ」「テストデータ」とkaggleで与えられる「train.csv」「test.csv」データの関係性が分かる
本記事の目次は以下の通りです。
①機械学習の訓練データとテストデータとは
②Kaggleのtitanicコンペだとどうなるか
③まとめ
①機械学習の訓練データとテストデータとは
いわゆるAI(人工知能)を作るためのデータが訓練データ、そのAIが「どれくらい正しく予測できているか」を確認するためのデータがテストデータです。
※AIという言葉が個人的には好きではないですが、ここではざっくり説明をするために使用しています。
わかりづらいと思うので、具体例を出します。
たとえばあなたがアイスクリーム屋の店長で、「”今日、アイスクリームはいくら売れそうか”予測するAIを作りたい」とします。
あなたは予測に使えそうな「気温」「店の前の往来人数」「実際の売上」のデータを100日分集めました。
このとき、単純に考えるとこの100日分全てのデータを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に提出します。
私はこんな基本的なことでも、理解に膨大な時間をかけてしまいました。
皆さんは是非今回の記事をお読みいただき、本来の「勉強・実装」に時間をしっかり充てられるようにしていただけると嬉しいです。