ブログkaggle初心者の私が3ヶ月でソロゴールドを獲得した方法2018/05/31pigimaruTweetこんにちは。今年2018年4月より新卒でRCOに入社した松田です。おいて2月にkaggleを始めた私が単独で金メダル(ソロゴールド)を獲得できたのでそれまでにやったことなどをシェアしたいと思います。kaggleでの活動ログ。ここではゆるふわに勉強法や経緯をシェアします。これからkaggleを始める人が効率よくノウハウを得るのに役立てば幸いです。前提まずkaggle参加前の私のステータスは以下の通りです。以上を前提にまずは記事のタイトル「kaggle初心者の私が3ヶ月でソロゴールドを獲得した方法」の答えをまとめると次のようになります。SeguroコンペKernel(kaggleコンペのcodeや知見をシェアする場所)を参考にするが思考停止はしないクラウド(GCPやAWS)を活用し計算費用をケチらない以下絵日記形式でこれらが具体的にどう役立ったのかを説明します。メルカリコンペに参加RCOでは年に何回か開発合宿をしているらしく、2018年2月当時内定者だった私も参加していいよと言われたので「無料で旅行行けてラッキー!」ってノリで参加しました。参加することでkaggleデビューしました。)より合宿は1泊2日でその間ではデータを眺めてKernel見ながら基本的な手法を試すだけで終わりました。合宿後も結果を提出する度に順位が上がっていく快感の中毒になってしまい、ひたすら試行錯誤してました。締め切り約1週間前だったのですが序盤に思いついた特徴量が結構良かったみたいで銀メダルを獲得できました。109位で銀メダル圏内。徹夜したかいがあった。そこで学んだことをまとめると以下の3点です。データのダウンロードからsubmissionの仕方とりあえずKernel読むべしモデルはLightGBMが強力なので主な作業は特徴量エンジニアリング経験者とチームを組むことでコンペの一連の流れや最近の主流を1日で知ることが出来たのはとても効率が良かったです。あとkaggleを始めたいと思っても何か背中を強く押してくれるきっかけが無いと中々始められないので、合宿というのはちょうど良かったです。試したいことが残っていて最後時間が足りなかったので、次は早めにコンペに参加しようと誓いました。TalkingDataコンペ参加までメルカリコンペが終わった後は大学の研究や知り合いに頼まれたWEBアプリ開発などで忙しく結局コンペに参加出来ないまま4月になりRCOに入社しました。RCOではエンジニアが働きやすい環境を重視していてそれが様々な制度として実施されていることに感動しました。個人的には特にきっちり業務をこなしていれば勤務時間が自由であることが気に入っています。お菓子や飲み物が取り放題。始めの業務はgolangで遊ぶくらいで業務以外の時間でもAWSやGCPなどのクラウドを勉強することにハマってしまいkaggleとの接点がありませんでした。参加することにしました。4⁄27まずデータをダウンロードしてsample_submission.csvを提出してみたのが4/22。続いてシンプルにLightGBMを実装しているものを写経してsubmitしたのが4/25。youtubeに上げているのを発見。利用してたのですが、Udemyでは日本語のコンテンツよりも英語のコンテンツの方が圧倒的にqualityが高いので日本人による解説動画でしかも無料なんで期待せずに見始めました。ところがどっこいわかりやすいし中身もあるしスライドとかじゃなくハンズオン形式でとても参考になりました。一連の流れを復習出来たことによって残りの短い時間を有効に活用出来ました。身近にkaggle経験者がいない人でもこの動画を観ればスタートダッシュをきれると思います。(ちなみにtkmさんがRCO出身であることを後で知りました)4⁄28GWが開始したので本格的に分析を開始しました。コンペもかなり終盤だったためKernelやDiscussionにかなり情報が蓄積されていたのでとりあえずHotnessが高いものを一通りチェック。良さそうな特徴量をいくつか真似して取り入れて少し工夫を加えることで情報にキャッチアップすると同時にスコアを上げていきました。当時の銅メダル圏内には入れました。4⁄30Kernelの特徴量がなぜスコアに寄与しているかを考える中で、学習の前処理に補足データを使うべきだと気づきました。面倒な実装でしたがスコアが上がるのを楽しみに朝まで作業して提出。生活リズムを犠牲にスコアを伸ばすことができ、当時のシルバーメダル圏内に入れました。5⁄2平日だったので出社。有給をとってる人も多かったですが私は温存しました。業務の隙をうかがってちょこちょこ計算を回し検証したかった特徴をいくつか試しましたが、もともと優先順位の低いものだったのであまりスコアは上がりませんでした。良いと教えてもらったので夜に家で観ることにしました。)よりこの講座で得た知見がこの後スコアを伸ばすのに効いていきます。締切の5/7まで時間に余裕は無さそうだったので目次で関係ありそうな項目を選抜しさらに基本2倍速で聞き流し自分が気になったところだけ等倍速で繰り返し観てました。encodingという手法を学んだので実装。Kernelにも似たような手法を試しているものがありましたが、自信がなかったため見送っていました。courseraの講義でkaggleの猛者によるハイパーパラメタの経験論を聞いたのでそれをもとに少し調整。合わせてスコアがまあまあ伸びました。Networkをtensorflowで組んでみましたがメモリが全然足りないのでとりあえず諦める。コンペ終了までの時間が気になり始め、確かtkmさんの動画で計画的にやることは重要みたいな事を言ってたので残り時間から逆算してTODOリストを作りました。戦略としてはこれ以上の特徴量エンジニアリングを捨てて、確実にスコアの伸びるパラメーター調整とモデルの配合(ensemble)をやることにしました。courseraの動画でパラメータを変えたモデルを配合するだけでスコアが伸びることが多いと学んだのでそれを試してみたかったのです。今回のコンペで力技の計算環境を整えることで次回以降にも活きると思ったという事情もあります。5⁄6立てた戦略の準備的部分をこなしていきました。モデルの配合が何種類でも配合割合を自動で最適化できるようにコードを編集しました。計算環境ですがGCPを勉強していたのでサクサク作ることが出来ました。残り時間も少ないので金に糸目をつけずにメモリ約100GBの16coreインスタンスを4つ作って計算を回していました(申請しないと合計64coreが最大だったので)。計算している最中に前処理を変えない範囲でモデルの数を増やしてみました(結局使ったのはlightGBMとxgboost)。試しに2つのモデルを配合したものも無事スコアが伸びました。順位が当時の約4000チーム中30位程になり、これは17位以内のゴールドメダルも狙えるのでは?と思い始めました。出社してまず先輩に一言。業務はキリが良いところまで前倒しで終わらせていていて関係者の確認待ちだった)。計算を回すだけとはいえど4つのインスタンスでパラメーターを変えながら結果を配合用に整理するのだけで忙しかったです。深夜になるころは作業にも慣れて来たので計算の合間にニューラルネットワークのモデルも組んで残り時間と相談して学習データを絞って学習させました。残り2時間を切ったので数十個の学習済みモデルから10数個選抜して配合した渾身の結果を確認。成長していない.........失望と共に眠気が襲ってきましたが諦めたらそこでコンペ終了なのでニューラルネットワークの計算が終わるのを待ちました。残り時間20分ほどで学習が終わったので配合割合は直感で決めてギリギリ2つを提出しました。最終日あまりスコアが伸びなかったのであまり結果は期待してませんでしたが終了画面を見てビックリ。なんと17位でギリギリゴールドメダルに入っていました。節約のためGCPのインスタンスを消してからとりあえず寝ました。後日恐る恐る計算にかかった費用を確認すると5万円弱でした。人次第ですが勉強にもなるしスキルの証明にもなるのでコスパは良いはずです。最後にkaggleでは高精度のモデルを構築するテクニックを効率良く勉強でき、特に6月以降はkaggle部として会社の計算環境をお借りできるとのことなのでまたコンペに参加したいと思います。実際の業務ではどうやってデータを管理してどのデータを使ってどんなアウトプットを出してどのようなシステムを構築するかなどkaggleでは学べない重要なことも沢山あるので、それらに関してはRCOでの業務を通して経験・スキルを身につけていきたいと思います。広告RCOアドテク部では優秀なエンジニアを募集しています。