What one likes, one will do well 〜好きこそ物の上手なれ〜

寄り道しながらも、最後は昔から好きな物理とプログラミングに戻ってくる。そんな男の思いをつづるブログです。

Kaggle宇宙コンペで銅メダルとりました

はじめに

しばらく時間が経ってしまいましたが、Kaggleの宇宙コンペで銅メダルを取ったので、その記録です。初メダルでとても嬉しかったです。

 

 

宇宙コンペ

宇宙コンペは星の光の変化データから、どのような星かを予測するコンペでした。

星の最後の大爆発である超新星だったり、点滅する星の変光星だったりを予測します。

一言に超新星変光星と言っても色々種類があり、予測する種類は14種類となかなか数が多いと思います。しかも学習データにはない、その他の星も予想する必要があり、考えることが多いコンペだったと思います。

 

解法

私の解法としては、大きくは以下の通りです。Kernelにスコアが高い解法が公開されてましたので、それをベースに変更を加えた形になります。

特徴量の事前抽出

光の変化データはデータサイズが大きく、そこから特徴量を抽出するには時間がかかりました。そのため事前に特徴量を計算しておき、その後にどの特徴量を使うか取捨選択しました。繰り返し学習-精度確認のサイクルを回すために役に立ちました。

LightGBMで特徴量の取捨選択

Kernelをforkして、特徴量を追加・削除しました。ローカルのCVを見ながら行い、時々submitして、LBを確認しました。追加するだけでなく、不要な特徴量を減らすことも効果がありました。

1.080のKernelを参考に、特徴量の追加・削除で0.988まで精度が向上しました。(さらにSEEDを変化させて単純平均を取ると0.983)

特徴量の追加・削除、精度確認を地道に行うことは重要なんだなと感じました。

NN(MLP)でのパラメータチューニング

KerasでNN(MLP)モデルを作成し、特徴量はLightGBMから多少取捨選択しました。試行錯誤により、パラメータチューニングしました。精度1.128とLightGBMよりも0.140悪かったですが、アンサンブルで効果がありました。

アンサンブル

LightGBMとNNをアンサンブルを最終のsubmitとしました。1:1だとLightGBMのシングルモデルより悪く、最後にえいやで3:1とすると0.963と精度が上がりました。本当に最後のsubmitだったので、精度が上ったのはラッキーでした。

 

結果

結果は95位で、初銅メダルをゲットしました。前回のTrackMLでは、最終Public LBが100位で、Private LBが101位と後1位でメダルを逃したので、今回もPrivate LBを見るまではドキドキだったので、ゲットした瞬間はガッツポーズしてしまいました。

ちなみにPublic LB 0.963で、Private LB 0.977でした。アンサンブルしてないシングルモデルだと、メダル圏外だったので本当にラッキーでした。

  

さいごに

初メダルは嬉しかったですが、まだKernelをいじって、少し精度上げる程度なので、金銀メダルは程遠いと感じました。もっと精進して、金銀メダルに届くようになりたいと思います。