民泊サービスの宿泊料金予測

一泊の適正価格はいくら?

賞金: 100,000 参加ユーザー数: 334 2年以上前に終了

1st place solution

運営者様、参加者の皆様、コンペティションお疲れ様でした。
ソリューションを投稿します。

コードリンク
https://github.com/ktrw1011/probspace-minpaku-service

Key Feature

はじめは定石通りLightGBMでモデリングしましたが、有効な特徴量を見つけられず0.8くらいでスタックしました。
特に駅からの距離等を入れても改善がなく、外れ値なpriceを決めるのに有効な特徴量がないように感じました。

Feature importanceを見る限りほぼroom_typenameで決まる感じだったので
room_typenameのみ使用して、BERTで予測すると0.7後半くらい出ました。

最終的に日本語系+マルチリンガル系Transformerのpretrainedモデルと最初に作成していたGBDTとのアンサンブルです。
テーブルコンペ的なテクニックはほとんど使用しなかったので、NLP(+カテゴリ)だったという感想です。

CV

KFold(n_split=5)
host_idでsplitされているようなのでGroupKFoldと迷いました。
localとpublicの乖離が酷かったですが、KFoldでもlocalの改善がpublicに反映されたのでKFoldにしました。
host_idが異なっていても似たようなnameのレコードが存在したので、GroupKFoldにしても同じかなという理由もあります。

Model

  • Transformers:number_of_reviewsminimum_nightsroom_typeneighbourhoodnameを結合してinput
    • cl-tohoku/bert-large-japanese、cl-tohoku/bert-base-japanese-whole-word-masking
    • bert-base-multilingual-uncased、xlm-roberta-base、xlm-roberta-large、microsoft/mdeberta-v3-base
    • sep_token = tokenizer.sep_token
      input_text = "number of reviews, " + str(examples["number_of_reviews"]) + sep_token +\
      "minimum nights, " + str(examples["minimum_nights"]) + sep_token +\
        examples["room_type"] + sep_token + examples["neighbourhood"] + sep_token + examples["name"]
  • GBDTs:ラベルエンコーディング、nameのTF-IDFなどの一般的な特徴量
    • LightGBM(x2),CatBoost

Ensemble

9 models weighted average (Nelder-Mead)

Aws4 request&x amz signedheaders=host&x amz signature=1d3841ce0a16164d890ee1ddd4b4d82c03ab0d1b25734d150573b3ac466ca90a
ProbSpace_official

ktr様、team pcluの皆さま

1st place solutionの公開、ありがとうございます。
5/9に公開いただきましたので、
オープンレビュー期間については、一週間後の5/16までと設定させていただきます。

どうぞよろしくお願いいたします。

Aws4 request&x amz signedheaders=host&x amz signature=1d3841ce0a16164d890ee1ddd4b4d82c03ab0d1b25734d150573b3ac466ca90a
ProbSpace_official

OpenReview期間中の疑義コメントはありませんでしたので、順位確定とさせていただきます。
team pcluの皆さま、改めまして優勝おめでとうございます!

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