終了済み: 給与推定

給与推定により人事の赤池くんの窮地を救おう

賞金: 100,000 参加チーム数: 341 3ヶ月前に終了

46th place approach

今更ですが、「給与推定」コンペのアプローチを投稿させていただきます。 上位の方々に比べると、お粗末なアプローチではありますが、最終的な状態だけでなく、そこにたどり着くまでの四苦八苦したプロセスも含めて記載しますので、何かの参考にしていただければと思い投稿いたしました。

[特徴量(その1)]

1.欠損値を確認

データを読み込んで、とりあえず欠損値の有無を確認しました。 確認したところ、欠損値がなく、補完の処理も不要であったので、ここは楽でした。

2.ラベルエンコーディング

「Area」の列が、「東京都」、「大阪」など文字列の情報になっているので、数値データに置き換えました。

[アンサンブル学習(スタッキング)のモデルを作成(その1)]

1.1層目の作成

1層目は、まず、RandomForet,AdaBoost,GradientBoosting,ExtraTree,Baggingの5つをつかってみました。

2.2層目の作成

2層目は、LightGBMを使ってみました。

[特徴量(その2)]

特徴量(その2)では、いくつかの特徴量を新たに追加したのですが、効果を発することなく終わってしまいました。

1.Areaカウントを追加

「Area」について、単純にコード化するのではなく、エリアごとのレコード数をコードの代わりにする列を作ってみました。

2.Educationを分割

また、「Education」が、2以下と3以上でSalaryの傾向が異なっていたので、2分割にしてみました。

3.Service_length,commute,study_timeをビンニング

「Service_length」,「commute」,「study_time」については、それぞれ、5、5、4にビンニング処理を実施。

[特徴量(その3)]

特徴量(その3)では、複数の特徴量を組み合わせたり、対数をとったりしてみました。 これによって、MAEが24を切ることができました。

1.交差項追加

いろいろな列の掛け算をとって、モデルに投入して、精度が上がる組み合わせをOptuna等をつかって探索しました。 df['commute_x_partner'] = df['commute'] * df['partner'] などなどいろいろ追加して試しました。

2.対数変換

数値の列については、対数をとってみました。 ついでに、Salaryも対数変換しました。 うっかり、提出用のデータも対数のまま提出してしまい、提出データの精度がガタ落ちして、何が起こったかわからず、プチパニックになりました。

3.「東京」、「大阪」は特別扱い

トピックに「東京」、「大阪」を特別扱いするとよいとの記事があったので、さっそく参考にさせていただきました。

4.Target Encording

「Kaggleで勝つデータ分析の技術」を拝見して、Target Encordingにも挑戦してみました。 リークとならないように、平均につかったレコード以外を置き換えていくのがポイントでした。

[アンサンブル学習(スタッキング)のモデルを作成(その2)]

1.1層目の予測パターンを作成

1層目について、 特徴量として「①対数変換を行う前」「➁対数変換を行った後」「➁にTargetEncording実施」の3つそれぞれに、予測モデルとしてRandomForet、AdaBoost、GradientBoosting、ExtraTree、Baggingの5つを使った、合計15個の予測パターンを作成しました。

2.2層目の作成

2層目は、LightGBMで、1層目の15個の予測パターンのうち、どのパターンを使うと最も精度が高くなるかをOptunaを使って探索しました。

[アンサンブル学習(スタッキング)のモデルを作成(その3) ]

1.3層目を作ってみる

モデルを作成(その2)で行き詰まってしまったので、その2のOptunaで、精度が良かった組み合わせをいくつかピックアップして、2層目の出力の平均をとる3層目をつくってみました。 ここからは、いろんなパターンを作成して、少しでも精度が良かったモデルができたら出力ファイルをためておいて毎日提出するという力技になってしまいました。

[結果]

最終結果としては、提出回数109回、ベストスコア:22.539、順位:46位でフィニッシュできました。

最後までやり切った初めてのコンペでした。

充実感もありましたが、やはり、全体的な計画ができていなかったので、特徴量を検討するのか、モデルを検討するのか、どっちつかずで、おろおろしている間に終わってしまったのが反省点でした。

また、今回は木モデルを中心に構成しましたが、上位陣の方々の解法を拝見するとニューラルネットワークを使いこなしていらっしゃったので、もっと勉強して手札を増やしていく必要があると感じました。

次のコンペはもっと、計画的にいろいろなパターンを試して、さらに順位アップを狙っていきたいと思います。

また、同様の内容ですが、図解などを交えてブログにも投稿しているので、こちらもご参照ください。

ブログ>> ProbSpace給与推定コンペ振り返り

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。