EnsekiTT Blog

EnsekiTTが書くブログです。

Titanicを例にしてKaggle API(1.0.5)を使って見る話

こんにちは、Kaggleマスターでもなんでもないえんせきです。
ロボットの仕事よりもデータ解析の仕事のほうが増えてきそうです。
Kaggleでデータ解析の練習をしていきたいと思います。

つまりなにしたの?

Kaggle APIとか言うのが使えるようになっていたので、つかってみた。
ただ、まだBetaリリースなので今後変わっていくかも。
今回は、kaggle-1.0.5を使います。
f:id:ensekitt:20180316024121j:plain

Kaggle API

github.com

Kaggle APIのインストール

インストールはPythonのパッケージ管理で使うPipで入る。
Kaggle用のPyenv環境を用意したのでそこに入れてみた*1

$ pyenv virtualenv 3.6.4 kaggle
$ pyenv local kaggle
$ pip install kaggle
$ pip freeze
kaggle-1.0.5

Kaggle APIの資格情報を拾ってくる

f:id:ensekitt:20180316013430p:plain
ちなみにドキュメントはKaggle APIGithubにリンクされている。

mkdir $HOME/.kaggle
mv kaggle.json $HOME/.kaggle
chmod 600 $HOME/.kaggle/kaggle.json

Kaggle APIを使ってデータセットの取得から提出までを行う

Kaggleで開催されているConpetitionsのリストを取得する

$ kaggle competitions list
ref                                             deadline             category            reward  teamCount  userHasEntered
----------------------------------------------  -------------------  ---------------  ---------  ---------  --------------
imagenet-object-detection-challenge             2029-12-31 07:00:00  Research         Knowledge          0           False
imagenet-object-detection-from-video-challenge  2029-12-31 07:00:00  Research         Knowledge          0           False
imagenet-object-localization-challenge          2029-12-31 07:00:00  Research         Knowledge          2           False
titanic                                         2020-04-07 00:00:00  Getting Started  Knowledge      10306            True
house-prices-advanced-regression-techniques     2020-03-01 23:59:00  Getting Started  Knowledge       4578           False

リストがつらつらっと出てくる。
自分が参加しているかどうかも一番左に表示される。ここでは、titanicを例にしてすすめる。

Titanicのデータを拾ってくる

TitanicのCompetitionに参加することを決めたらRuleに同意してデータを取得する権利を得る。
続いて、TitanicのCompetitionサイトを開いて、
f:id:ensekitt:20180316014845p:plain
クリップボードにコピーするボタンを押して、シェルにペーストする。
ただ、このままだと~/.kaggle/competitions/titanic以下にダウンロードされるので、
パスをカレントディレクトリに指定した。

$ kaggle competitions download -c titanic -p .                                                                                                                                                                                                                                                                                                 
train.csv: Downloaded 60KB of 60KB
test.csv: Downloaded 28KB of 28KB
gender_submission.csv: Downloaded 3KB of 3KB

データセットを使ってSubmissionできるデータを作る

がんばる。特にAPIの用途はない。
submission.csvというファイルを作成した。

予測データをSubmissionする

送付するファイル"submission.csv"とメッセージ"simple analyze"を決めたら以下のコマンドを実行する

$ kaggle competitions submit -c titanic -f submission.csv -m "simple analyze"                                                                                                                                                                                                                                                                                                                                  Successfully submitted to Titanic: Machine Learning from Disaster

予測結果の確認をする

送付したらスコアが出るので確認しましょう

$ kaggle competitions submissions -c titanic                                                                                                                                                                                                                                                                                                                                                                   fileName        date                 description           status    publicScore  privateScore
--------------  -------------------  --------------------  --------  -----------  ------------
submission.csv  2018-03-15 17:22:52  simple analyze        complete  0.65550      None

Titanicで0.65…私のスコアひくすぎ…?
スコアが低いのは欠損値処理とか諸々適当にやって数値だけ使ったガバガバ解析だからであってうんぬん。。。

どんな使い方をするか

大規模データセットをチームで確認

  • 少量のデータで学習を実行する→うまくいった場合
  • gitに適当ラベルを付けてコミット
  • 大量のデータで学習を実行する
  • メッセージにラベルを追加してKaggleに送信→多分暫し待つ
  • スコアの確認を実行する
  • 直近のスコアをチームのSlackに通知する

ボッチ参加ばっかりでチーム無いけど…

Submission制限ぎりぎり使ってパラメータ探索

  • パラメータを適当に決める
  • Submissionする
  • スコアを確認する
  • 最初に戻る

そんなギリギリの戦いしたこと無いけど…
とかですかね。

これからKaggleやっていきたいと思います

*1:pyenvについてはこちら ensekitt.hatenablog.com