SIGNATE Student Cup 2023に参加し、25位で銀メダルという結果でした。
今回は備忘録も兼ねて、解法や初めて使ったライブラリなどまとめていきます。
コンペについて
SIGNATE主催の、Student Cup 2023に参加しました。
Student Cupは毎年行われている?(去年も参加しました)いるコンペで、学生No.1データサイエンティストを決めるデータ分析コンペティションとされています。
モデリング部門とChatGPT部門があり、今回はモデリング部門に参加しました。
コンペの目的としては、中古自動車の情報(車種・走行距離など)をもとに、中古車の価格を予測するものでした。
今回の情報共有は、HP上のフォーラムではなく、Slack上で行われていました。(Slackを盛り上げた人に贈られる賞もあるそうです。)
解法
前処理
- LightGBM
- stateはregionから一意に決定されるので、stateの欠損値はregionを参照することで補完
- size, manufacturerの表記ゆれを修正
- yearが3000以上のものは存在し得ないはずなので、2000年代に変更
- cylindersから数値のみを取り出す
- NN
- 数値の欠損はすべて平均で、カテゴリ変数の欠損は、欠損ということがわかるように補完しました(この辺りは改善できそう)
- StandardScalerを使用
特徴量
- カテゴリ変数についてはtarget encoding
- 数値に関してはそのまま
- size_rankがカテゴリ型であったため、順位を明示したものを追加
- 'full-size': 4, 'mid-size': 3, 'compact': 2, 'sub-compact': 1
- メーカー名から、どの国の車であるかを追加
- 車の色を、黒系、明るい系などにカテゴライズした特徴量を追加
- 走行距離 / 製造年 を追加
- 緯度経度(geopy)を追加
- condition, fuel, typeに関して、走行距離のaggregationを実施
- 平均値、中央値
- 上記の平均・中央値と、走行距離の差分を追加
学習
- LightGBMとNNを使用
- 最終subは以下の2つを提出しました。(最後に選択したファイル2つのスコアが最終評価で一番よかったです)
- LightGBM(60%)、LightGBM+geopy(30%)、NN(10%): 43.3074128
- LightGBM(55%)、LightGBM+geopy(35%)、NN(10%): 43.3175492
他に試したこと
- catBoost
- tabNet
- XGBoost
- カテゴリ変数のOnehot
- aggregationに使用する変数の追加
- 上記のモデルのアンサンブル
改善点
- ハイパーパラメータの最適化を行うことができなかった。
- NN系は工夫次第で精度がまだ上がりそうなイメージ。
- 走行距離の重要度が高いので、欠損値を埋めるためのモデルを作ると良いらしい。
- catboostの予測結果を特徴量に追加して、LightGBMで予測すると、かなり精度が上がったらしい。
- 上位の方で、tabNetを使用していた方がいるらしい。
- 実験のコードと提出ファイルが途中でごちゃついて、同じファイルを提出していた(割と終盤に。。。)ので、コード管理を改める。
今回勉強になったこと
- 今回初めてcolumn transfomerを使用して便利だった。
- NN系のモデルで、テーブルデータにも精度高く使用できるtabNetというものがあることを知った。
感想
欠損値の補完や、特徴量の作成のみでは大幅な改善が見込め無さそうだったので、多くのモデルを試せたことは良かったです。
今回のコンペは金メダルを狙いにいっていたので、銀メダルという結果は納得のいくものではなかったですが、勉強になることが多いコンペだったので、次回以降Master目指して頑張っていきたいと思います。