趣味日記

機械学習について書きます

機械学習の勉強を始めて1年以内にkaggleで2位になったので、やったこと全部書く

皆さん初めまして!

先日kaggleのARCコンペで2位になったのですが、

僕のkaggle歴が浅めということもありtwitterでも結構反響があって、何人かの方にはわざわざDMまで頂いてどんな勉強をしたか聞いていただきました。なるほど需要があるならということで、今までのことをまるっと振り返ってみようと思います。

これからkaggle始める方のためになれば幸いです。

f:id:aryyyyy:20200605123738p:plain

 

機械学習を始める前のスペック

  • 機械学習の勉強を始める前は広告系の会社でweb系のエンジニアとして2年ほど勤務。
  • 書いていたのは主にGoとRubyで、AWSもたくさん触っていた
  • 数学はかなり得意だった、しかし文系なのでまあ知れている
  • エンジニアやるまではずっと音楽一筋
  • Python歴は無し

といった感じです。

準備期間:2019年7月〜

機械学習エンジニアの友人に触発されて、CourseraのMachine Learningを見始めたところからML人生がスタートしました。

それまではWeb系エンジニアとして楽しくコード書いていたんですが、軽い気持ちで始めた機械学習に完全にハマってしまった形です。

早朝に勉強、昼間はエンジニアとして働いて夜にまた勉強、といった感じでコースを終えました。今思えば最初にCourseraのMachine Learningいったのは良かったような。講師のAndrew素晴らしかった。

f:id:aryyyyy:20200602182457p:plain

講座を終えた後は書籍などで勉強していました。何冊かななめ読みした後、Andrewの声がまた聞きたくなったので、CourseraのDeepLearning Specializationを受講することに。こちらも素晴らしかった!

f:id:aryyyyy:20200602183234p:plain

(すごい昔に感じる)

ちなみにどちらの講座も完走するのに1ヶ月弱くらいかかっています。宿題とかもあって結構重かった記憶。勉強始めたての人にはちょうど良い重さかも。おすすめです。

kaggle初参加:2019年9月〜

そしてちょっとタイミング的に前後するのですが、deeplearningの講座を受けている最中に、kaggleを始めました。

初めて参加したのはIEEE-CIS Fraud Detectionです。不正取引を検知するモデルを作るコンペです。参加といっても、最終日にnotebookを覗いて、いくつかBlendして提出しただけです。それだけでも当時は(これがデータ分析...!!)と興奮したのを覚えています。笑

そしてそして、作りたてのTwitter機械学習用アカウントでTLを見ていると反省会の3文字が!図々しくも参加させていただくことに。

当日はIEEEで金メダルを獲得した方、masterの方などが揃っていて、非常に刺激的でした。話の内容が分からなくてまごまごしっぱなしの僕にもみなさんたくさんアドバイスをくれて、本当にありがたかったです。視座が上がったのも大きかった。これから始める方は強い人がいる反省会に潜り込むのおすすめです。

kaggleちゃんと始める:2019年10月〜

IEEE終わってから1ヶ月は、初心者でも手軽に出来そうなテーブルコンペが無かったこともあり、線形代数の本読んだり機械学習の書籍を読みつつ実装したり、諸々の勉強をしていました。そして10月に入り念願のテーブルコンペである、アメフトコンペが始まったので、初日から参加することに。よく分からないながらも楽しみながら進めていたのですが、題材がアメフトという馴染みのないスポーツであることもあり、相当頑張らないと芯を食った分析が出来なそうな気がしていました。実力がない分、ドメイン知識では勝ちたいという気持ちもありました。

そんな折、kaggleから新しくテーブルコンペが発表されました。ちょっと迷いつつ、そちらに移行することに...

DSB参加:2019年10月〜

新しく発表されたのは、2019 Data Science Bowlという、幼児教育用ゲームに関する分析をするコンペでした。幼児教育用ゲームのプレイ履歴を元にユーザー毎の習熟度を推定する、という分かりやすい題材だったこともあり、すぐにのめり込みました。

notebookや過去コンペを参考にしつつ、アメフトコンペを通じてPythonに慣れてきていたこともあり、割と順調にスコアを伸ばすことが出来ました。

(実はこのあたりのsubmitからprivateでは安定して銀圏に入っていたようです。)

順位上がる -> モチベーション上がる -> 順位上がる -> ... の良い循環に入れていたような気がします。やっぱり順位上がると楽しいんだよな。。。

会社を休職して本格的に勉強開始:2020年1月前半〜

本格的に機械学習にコミットしてジョブチェンジするために、2019年いっぱいで会社を休職して、スクールに通いつつkaggleをやる日々に。スクールではこんな感じのことをやってました。残念ながらkaggleを教えられる人はいなかったので、kaggleに関しては独学で頑張りました。kaggle本発売されてたのも大きかった。

初心者にしてはかなり色々なことを試すことができたと思います。詳細は反省会で発表した資料があるのでそちらを参考にしてください。

speakerdeck.com

結局DSBは51位で終了し、めでたく初のメダルを獲得。kaggleのslackコミュニティにも大きく助けられました。ありがとうございました!

TOP2%で嬉しい反面、金メダルを取れなくて悔しかった。リベンジを誓いました。

手頃なコンペがなかったので勉強:2020年1月後半〜

 kaggleでアウトプットばかりしていたので、インプットもせねばということで統計検定を受けることにしました。試験を先に申し込んで、詰め込んで勉強する作戦。

久しぶりに数式触って楽しかったのを覚えています。

twitter見返したら5日で合格点が出ている。でも年によってかなり難易度が違う印象だったので、受ける予定の人は過去問は幅広くやるといいかもです。

そんなこんなで意外にもサクッと合格して、次のマスに進みます。やればやるだけ成長できるので毎日が楽しかった思い出。楽しいのは今もだけど。

ARC前半:2020年2月〜

後に2位を取ることになるAbstraction and Reasoning Challengeに参加します。推論タスクのinput/outputから規則性を捉えるAIを作るコンペです。ざっくり書くと、図形の変化の規則性を当てるタイプのIQテストを解けるAIを作る、みたいな。IQテストは全部で100問出されて、そのうち何問とけるかを競う形式でした。

DSBのようなテーブルコンペとは全く違う類のコンペでしたが、twitterを見返す限り、ちょうど授業で論文読んだりしていたのもあり良さそうだなと思ったみたいです。

ただ、意気揚々と参加したはいいものの一向に結果は出ず、始めの頃はかなり大変でした。 そして結果が出ていないのは僕だけではなく周りも一緒だったので、このまま誰も1点とらずに終えるのでは、、と結構みんな本気で感じていたように思います。

(kaggleのCTOもtoughest competition in a long timeと書いている...)

始めの数週間で数千行のプログラムを書きましたが、結局1点も取れず。しかしアイデアは無限に湧いてくるし自分の方針で結果が出る気もしていたので、諦めずに続けることに。toughest competitionってのも燃えたし。twitterを見返すと、3点取るのに1ヶ月と少しくらいかかっていたようです。同時進行でウォルマートコンペ(通称M5)も始めました。

この時点でかなりいい順位にいて、コンペの難しさを考えると多分今のままでもソロ銀は確定したかな、という感じでした(実際3点のままだと銀だったようです)。満足して他にいくか金メダルを目指すかのオプションがあったのですが、まだまだ手は止まらなそうだし、DSBの時の悔しさを晴らすためにも、もう少し頑張ることにしました。

ARC後半:2020年4月〜

順調に得点を重ねて、大体金メダル圏内の一番下が銀メダル圏内の一番上にいた気がします。

 

 

そしてコンペ終了10日前くらいにチームマージの決断をすることに...!

ここまでコミットして銀で終わる可能性があるのが嫌だったので、ソロ金狙いからチームでprize狙いに切り替えることに。ソロで頑張っていたこともあり、僕より1点多く取っている2人チームとすんなりマージ出来ました。

(ここから先はtwitterの連投でお楽しみください)

(チーム組むことを想定していなかったのでコードが汚くて苦労しました...)

(10点と9点でマージして15点になりました)

(上位にはGMやmasterがたくさんいて、やっぱり強いんだなあという印象です。当たり前か)

  (この2点が大きかった)

(結局足を残しているチームはほとんどなかった模様。このころは連日コード書きすぎて疲れていたので、息抜きにM5やっていました。)

(このあたりでかなり賞金を意識しはじめる)

(yatta)

(賞金は3人チームで3等分を提案しましたが、yujiは頑張ったから、ということでちょっと僕が多めに貰うことになりました。ありがとうチームメイトたち...)

 

ちなみに、今回2位になれたのはずっと楽しみながら続けていられたからだと感じています。あんまり難しいことしていないし。やっぱり楽しんでいるとコミット量も集中力も違いますよね。そして僕は機械学習もエンジニアリングも心の底から愛しているので、まだまだ階段を登り続けることが出来るはず。多分。

ということで、これからkaggle頑張りたいと思っている人は、なるべく自分が楽しめるコンペに出ることを強くお勧めします。周りの方々を見ても、強い人ほど楽しんでいるようにみえます。もし全然楽しめないようだったらkaggleやらないのも有りだろうし、データ分析自体あんまり楽しめないのなら別の道を考えてもいいと思います。

今後

kaggleやっていると、楽しすぎてどうもアウトプットに偏り過ぎてしまうように感じるので、今後はアカデミックなインプットにもちゃんと時間を割きたいです。論文読むの単純に楽しいんだよな...一日一論文生活したい。

それと同時に、そろそろ就職活動も始めようかと。機械学習エンジニアとしてのキャリアをスタートさせたい。企業の方はDMいただければ嬉しいです!僕からも色々とコンタクト取り始めます。

今後は論文ガンガン読んでゴリゴリ実装出来るエンジニアになるべく、より一層楽しんでいきたいと思います。ここまで読んでいただいてありがとうございました!