u++の備忘録

ProbSpace給与推定コンペまとめ

「ProbSpace」というプラットフォームで開催された「給与推定」コンペが23日に終了しました。私は途中で まぐちさん とチームを組み、最終順位は7位でした。

prob.space

PublicとPrivateが分かれていないのは残念でしたが、恐らく独自に作成したデータセットを用いた、初学者でも取り組みやすい程よい難易度に設定されたコンペだったと思います。discussionシステムも存在していました。

本記事では、上位陣が公開した解法をまとめます。

一覧

Rank Link
1 https://prob.space/competitions/salary-prediction/discussions/senkin13-Post46bdfde9468e3d01f4e7
2 https://twitter.com/atushiTAKEDA/status/1208773041682956288?s=20
https://prob.space/competitions/salary-prediction/discussions/takedarts-Post6725a11b22813a3997d7
4 https://prob.space/competitions/salary-prediction/discussions/Yuhei0320-Post4766b7be57ac41cd505b
6 https://twitter.com/rntrnaru/status/1208901691518533637?s=20
https://prob.space/competitions/salary-prediction/discussions/maruyama-Post521eef51a86df217de38
7 https://prob.space/competitions/salary-prediction/discussions/upura-Post29db854982f9d802bb7b
10 https://prob.space/competitions/salary-prediction/discussions/physyuki-Post5fc459a996222908d0bd

1位

f:id:upura:20191223163329p:plain https://prob.space/competitions/salary-prediction/discussions/senkin13-Post46bdfde9468e3d01f4e7

1位の方は、5段階の処理を経て最終的な予測値を算出していました。

  1. LightGBMで152の特徴量を用いて予測
  2. LightGBMの残差が120未満のデータのみをダウンサンプリングして、Neural Networkで予測
  3. Neural Networkの残差が129未満のデータのみをダウンサンプリングして、Neural Networkの残差を新しいtargetにして、LightGBMで予測
  4. LightGBMの残差が129未満のデータのみをダウンサンプリングして、LightGBMで予測
  5. trainのtargetの値でtestを埋める後処理(trainとtestが似ている2件のみ)

残差を取りながらの多段推論がここまで効果を発揮するとは驚きでした。このアイディアはKaggle「Predicting Molecular Properties」コンペのCPMPさんの7位解法*1を参考にしたそうです*2

githubでコードも公開してくださっています*3

2位

2位の方は、480個のNeural Networkのアンサンブルでした。「Feature Encoding」と呼んでいる手法で特徴量自体を480通りに変換しているそうで、とてもユニークな取組だと感じました。

4位

4位の方は、Neural NetworkのSeed値を変えながらのアンサンブルのようです。活性化関数の利用回数を意図的に減らすなどで、過学習への対策をしていました。

6位

6位の方もNeural Networkのアンサンブルで、10個を混ぜたそうです。

7位

最終的なベストスコアは、Neural NetworkとLightGBMの重み付き和でした。チームマージ時点で、まぐちさんがNeural Network、私がLightGBMを進めていました。私の具体的な取り組みについては、discussionに投稿済です。

10位

特徴量エンジニアリング+LightGBMという、テーブルデータコンペの王道の取り組みでした。個人的に興味深かったのは次のデータ水増しです。今回は恐らく独自に作成したデータセットなので、特に効果を発揮する可能性があったと思います。

EDAからsexとtargetだけに注目すると2変数間に関係がなさそうだったので、試しにtrainのsexだけを反転させたデータを元のtrainにくっつけてデータ量を2倍にして学習しました。

おわりに

本記事では、ProbSpaceで開催された給与推定コンペの上位陣解法をまとめました。

*1:www.kaggle.com

*2:

*3:github.com