未分類

【IEEE振り返り&反省】Kaggle銅メダルを取って学んだこと

率直な感想は「嬉しい」に尽きるが、まだまだ高みを目指さなければならないので次へ次へと活かせるような反省をしていきたい……

結果としてはShake Downして569位/6381人。

 

この記事で言いたいことは

過去コンペを漁るのはマジで大事

だと思ったこと。

自分のスキル

  • AtCoder緑レベルのコーディング力(最近落ちてる)
  • 統計の知識は少しだけある(2級レベル)
  • 英語の知識は皆無

本気で臨んだコンペは土地コンペ、燃費予測練習コンペくらいでKaggleはIEEEが初めて?

実質Kaggle初心者、数学と英語の知識は中学生レベルの本当のBeginner。

自分のアプローチ

序盤

カーネルを色々読んで時系列データなのでデータの扱いには注意したほうが良いと知る。

しかし、何をすればよいのかよくわからなかった。

DiscussionでK-Foldを使うのはやめましょうという雰囲気だったのでなるほど?となりながら色々調べてみたらTime Splitするのが最適だと知った。

中盤

Kernelを作成して、シルバーメダルを獲得した。Down SamplingとTime Splitにこだわったものだったっけ?(うろ覚え)

このコードが今後のベースラインとなったので書いてよかったと思っている。(実際は他の人のkernelを基にしているから自分のものではない)

ここらへんから何もわからなくなってきて進捗が無くなる。

ログを出そう!とかオブジェクト指向!を意識するようになってコードの管理は少し良くしたと思う。

終盤

やることが尽きてデータの分布を見た。TrainとTestの分布が明らかに違うカラムにはメモをして後でTrueかFalseの自作二択特徴量を作成したものの、その後何をすればよいのかわからず諦める。

uid(user id)の判別が話題になるが、何もわからない僕はスルーしてcatboostを試してみる。

catboostの扱いが難しくて結局実装できずに諦めてしまった。

kernelのコードをコピーしてアンサンブルモデルをいくつか作成したらPublic LBで銀圏入ったので喜んだ。(最終モデルとなった)

まとめて

有用なDiscussionを読み流ししたまま諦めてしまったことが敗因だっと思うし、楽しめなかった原因だったとも思う。

上位solutionを読んで

magic features(user idの識別)を見つけられずに悔しいという感情が湧き出た。discussionであったやん!!!という気持ちも。

その後onoderaさんのツイートでHouse creditコンペでどうやら同じような状況があったらしいということが判明して見てみたら本当だった。

↓つまり

過去コンペを振り返ることは大事だった

 

これが自分の1番の反省だと思う。このコンペのShake Shakeは前から予言されてたしマルウェアコンペの反省がここでも活かせるだろ!みたいなお話。

上位陣はみんなやることをやっていたという印象。

例えば、僕が見逃していた分布の違いに注目して色んな方法でtrainとtestの分布を同じようにしていた ということ

Private LBに焦点を当てたvalidation作り(上位solutionで見かけた)はなるほど……となった

というか全部なるほど……こんなもん思いつかんなーという印象。ただ、過去コンペを漁っていれば無双出来ていた説が非常に高いのでこんなことは言ってらんない。

 

自分が出来たのはK-Foldを使わなかったこととKernelにあった特徴量エンジニアリングを全部行ったことと分布を少し見た(実行には移せなかったけど)だけでした。他に出来ることがあるだろ!!と自分に言ってやりたいけど何をするべきなのかわからないので途方に暮れて寝てしまう。

アンサンブル強い

XGBとLGBMとcatboostのアンサンブルしていたという人が多い(上位は)のでびっくりした。みんな同じようなもんだと思ってたらどうやら違うみたい。

誰かがTwitterでそれぞれ強い分野があると言っていたような……

何をすればいいの?の自分なりの答え

  1. Discussionを読んだりKernelを読む
  2. 似た過去コンペを漁ってせめて上位solutionは読む
  3. 解決できない問題が発生したら積極的にdiscussionに書き込む?

かなぁと

逆に言えばこれを全部やれば無双できるんじゃないかなと思ったり思わなかったり。

 

今回のこの反省を活かして次のコンペでも頑張っていきたいと思っている。(画像系にも入門したい)

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です