KaggleのCompetitonに挑戦してみた
ここ2、3ヶ月の間、自然言語処理とは全く関係ない仕事をしていました。ひと段落ついたところで、データ分析について勉強し直してみようと思い立ち、Kaggleを使ってみることにしました。
Kaggleは全てのデータ分析エンジニアにとって有用なサービスだと思います。Competitionが中心なので、自分のような初学者には関係ないかと思っておりましたがそれは間違いでした。
Kaggleには、データ分析の「明確な目的」と「データ」が予め用意されています。また、ベースとなるコードも提示されています。何より自分の作ったモデルが、どの程度のレベルなのか客観的にわかるので、大変参考になりますし、モチベーションにつながります。
とはいえ、私もそんなに詳しいわけではないので、ネットの情報を参考に、手探りで挑戦してみました。
最初のCompetition
いきなりですが、実践あるのみ!ということで、興味の持てそうなCompetitionを探してみました。
データ分析といっても、数値解析だけでなく、画像解析やテキスト分析などいろいろな種類があります。
せっかくなので、自然言語処理を対象とした「Natural Language Processing with Disaster Tweets」を選択しました。こちらはkaggleが用意した入門用のCompetitionで期限が設定されていないので、いつでも参加できます。
このCompetitionの目的は、Twitterのデータから災害が起きているかどうかを判断するモデルを作ることです。
Twitterは災害時も有用なツールになっており、多くの人が災害の状況を伝えるのに使っています。しかし以下の例のように比喩的に「燃えている」といっても本当に燃えているわけではないことがあります。
これを学習によって自動で判断できるようにすることが目的です。

Dataset
3つのファイルがデータとして与えられています。
- train.csv - the training set
- test.csv - the test set
- sample_submission.csv - a sample submission file in the correct format
データの内容は、以下のとおりです。
id
- a unique identifier for each tweettext
- the text of the tweetlocation
- the location the tweet was sent from (may be blank)keyword
- a particular keyword from the tweet (may be blank)target
- in train.csv only, this denotes whether a tweet is about a real disaster (1
) or not (0
)
target(災害か否かを示すデータ)はトレーニング用のデータ(train.csv)には含まれていますが、テスト用のデータ(test.csv)には含まれていません。
出来上がったモデルで、test.csvを使った予測結果を作り、sample_submission.csvと同じフォーマットで提出します。
Code
Kaggleでは、学習用のコードを1から作成する必要はありません。
以下のように他のエンジニアが作成したCodeから参考となるCodeを探すことができます。

通常のCompetitionの場合「Most Votes」順で並べ替えて、多くの人が「参考になった」と投票したCodeをベースにすると良さそうです。
今回は入門なので、ピン留めされていた「KerasNLP starter notebook Disaster Tweets」を参考にしました。
Codeを開いた時に右上にある「Copy & Edit」をクリックすると、自分の作業用のエディタが表示されます。

使い方は、いつも使っているGoogle ColaboratoryなどのnoteBookとほとんど同じです。
コードのセルを一つづつ理解しながら実行していきます。
途中で評価結果も表示してくれますので、これをみながら少しパラメータをいじってみたりしました。

最後のセルを実行すると、submission.csvというファイルに提出用のデータが格納されます。

出来上がったデータは、Outputからダウンロードしておきます。
Submit Predictions

Submit Predictionsをクリックして、先ほど作成してダウンロードしたファイルを提出します。
Submitが成功すると、自分の順位がLeaderboardに表示されます。

今回は、334/1054位だったようです。パラメータを少しいじっただけにしては、良い結果だったかと思います。
まとめ
Kaggleは名前は知っていたものの、敷居が高くて二の足を踏んでいました。今回使ってみて学習目的の題材としてすごく魅力的であると感じました。
基本的な統計分析や画像分析など他の種類のCompetirionにもチャレンジしてみたいと思います。