KaggleでSilver取るためにどういう段階を踏んでいけばよいですか?
kaggleでSilverメダルとるって、上級者以外にはとっても難しいことですよね。
私もSilverが安定して取れる実力があるわけではないのですが、どのようなことを心がけているか書いてみます。
回答
kaggleで上位に入るために必要なことは、kaggleのコンペに取り組みながら身につけてしまうのが1番効率的だと思います。
開催中のコンペや過去のコンペに、ディスカッションやKernelを見ながら取り組めば少しづつ実力がついていき、そのコンペで得た実力は間違いなく次のコンペにも活用することができます。
コンペに取り組む前に、本や講座などを受けたくなってしまいますが、どれだけ本などでinputをしても、新しいコンペに取り組むごとに本や論文からのinputは必要になってくるので、初めからコンペに取り組んでKaggleの実力をつけてしまうのが良いという考えです。
なので回答としては、「コンペに取り組みながら少しずつ実力をつけて、シルバーとりましょう」というものです。
以下補足です。
1 考え方
シルバー以上ということは、ディスカッションやカーネルで議論・公開されている以上のモデルを作るということです。
ディスカッション・カーネルでは上位の人や強い人が、そのコンペに関連するとても有用なことを共有し、コンペ参加者はその情報をアレンジして自分のモデルに取り入れています。
フォーラムを見ずに銀メダル以上というのは、上級者の遊び方だと思うので、私はディスカッションとカーネルはupvoteが多いものを中心に、多くのものをみるようにしています。
特に初めのうちはディスカッション・カーネルを参考にしながら、コンペに参加すると良いでしょう。
2 Kaggle初心者の場合に、やってみること案
カーネルを参考にするといっても、やり方は色々あるので、例えば初めのうちは次のようにやると、楽しく取り組めるでしょうというのを書いてみました。
1. シンプルなカーネルを理解する
テーブルデータであれば、
・ あまり多くの特徴を用いていない
・ LightGBMを用いている
・ サブミットファイルの作成まで行なっている
カーネルをよんで何をやっているか理解します。
2. シンプルなカーネルに特徴を足していく
1.のカーネルに、特徴を追加してみます。
特徴は、他のカーネルやディスカッションから持ってきても良いし、自分でゼロから考えても良いでしょう。
使っている特徴の少ない、シンプルなカーネルに特徴を足しているので、スコアが改善することも多いと思います。
時間がなくなるまで、カーネルに特徴を加えてみます。スコアが改善するので楽しくなると思います。
3. アンサンブル(ブレンド)してみる
2で作った自分のベストのサブミットと、カーネルにある1番高いスコアが出ているサブミットファイルをブレンド(適当な重みをつけて、平均する)してみます。
これで、1番高いスコアのカーネルを抜くことができることが多いと思います。
また、これをいくつかのコンペでやると、実力もついてくると思いますし、何度か繰り返して、ある程度の時間を投入できればシルバーにも届くと思います。
3 機械学習初めて場合に、やってみることの候補
2では、Kaggleからはじめるのが良いと書いたのですが、本当に初めての場合は手がつかない場合があると思うんですよね。
その場合には、次の書籍などから学んでみてはどうでしょうか。
機械学習でやるべきことがわかりやすく書かれている良書だと自信をもって推薦します。
若干、難しいと感じるコードや数式などもありますが、そこは飛ばして読んでしまっても良いでしょう。
次の記事なども参考になると思います。
4 カーネルの使い方などで行き詰まってしまった場合にオススメの本
私が書いた同人誌になりますが、「Kaggleのチュートリアル」という本を書いています。
・ カーネルの使い方など、タイタニックコンペでのチュートリアル
・ kaggleでメダルをとった体験談
・ メダルを取れる条件や用語集
などからなるほんとなっています。
以下のリンク先で、一部公開していますので、よければ読んでみてください。
5 現在の開催中のコンペでのオススメ
現在開催中のテーブルデータコンペはどれもデータ数が多かったり、時系列だったりで難しいんですよね。
データ数が多いのを気にしないのであれば、マルウェアコンペは、テーブルデータコンペでの特徴の作り方などの一般的なことが学べるので良いと思います。
データが重いのがつらいというのであれば、過去のコンペになってしまいますが、HomeCreditコンペは、ソリューションが多数公開されており、今後のテーブルデータのコンペにもつながるのでとても良いと思います。
たとえば次の記事などを参考に挑戦してみると良いでしょう。
6 チームマージについて
コンペに取り組むにあたり、チームを組むことは
・ 実力をつけるためにも
・ 順位をあげてメダルをとるというためにも
とても重要になってきます。
私もこれまでのコンペでチームを組んだことで、実力がついたことを体感しましたし、順位もあがりました。
チームをどのように組むのがよいか私も模索中ですが、twitterで仲良くなった人と組んだり、勉強会などに参加して仲良くなった方と組んだり、ディスカッションで募集したりなど色々とやりかたはあると思います。
7 まとめ・podcast
長くなりましたが、シルバーメダルをとるために思っていることを書いてみました。
podcastでもこのテーマについて話しましたので、もしよければ聞いてみてください。
podcastでは、質問も募集していますので、もう少し掘り下げて聞きたいなど要望があれば、ぜひ聞いてください。
また、この記事でわかりにくいことなどあれば、また質問などお願いします。
コメントお待ちしています。匿名の質問はマシュマロから→https://marshmallow-qa.com/currypurin