u++の備忘録

「マイナビ × SIGNATE Student Cup 2019: 賃貸物件の家賃予測」まとめ

はじめに

マイナビ × SIGNATE Student Cup 2019: 賃貸物件の家賃予測」コンペ(マイナビコンペ)が11月上旬に終了しました。賃貸物件の家賃予測を題材とした学生限定のコンペです。私は学生ではないため参加できなかったのですが、SIGNATEのコンペには珍しく取り組みの共有が認められていたので、ざっと眺めてみました。

signate.jp

一覧

Rank Link
1~3, 11* https://signate.jp/competitions/182/summary
1 https://www.slideshare.net/ssuserf0844f/zozei
https://github.com/analokmaus/signate-studentcup2019
7 https://github.com/Anguschang582/Signate---Student-Cup-2019---7th-solution
10 https://github.com/OctopCat/SIGNATE_mynavi2019/blob/master/ApproachSummary.md
11* https://speakerdeck.com/shogonagano/expert-x-contibutor-mainabikonpe2019-aideashang-shou-shang-suraido
https://chizuchizu.com/2019/11/19/chizu_data/
12 https://mosamosa.hatenadiary.jp/entry/2019/11/12/191142
https://mosamosa.hatenadiary.jp/entry/2019/11/13/112939
20 https://kyouyap.hatenablog.com/entry/2019/11/13/145836
24 https://twitter.com/ykskks/status/1192680578367098880
29 https://www.acceluniverse.com/blog/developers/2019/11/3-814953-signate-23.html
34 https://tellmoogle.hatenablog.com/entry/signate_mynavicomp_losers_solution
88 https://masanori.hateblo.jp/entry/2019/11/08/175710
90 https://kutohonn.hatenablog.com/entry/2019/11/08/101512
https://github.com/kuto5046/signate

*イデア

コンペ概要

所在地・間取り・築年数などが与えられ、東京23区における賃貸物件の賃料を予測するコンペでした。

評価関数

評価関数は、RMSE(Root Mean Squared Error)でした。比較的外れ値の影響を受けやすい指標です*1

データ

データに関して特徴的な点は、次の2つだったようです*2

  1. trainとtestに同一の建物内の物件が存在する
  2. 外れ値となる高額物件が存在する

前者について、同一の建物内の物件は賃料も似ている、もしくは階に比例して変動するなど、比較的予想が容易になると考えられます。 これらの物件をどのように扱うかが勝負の鍵となったようです。

後者は、評価関数がRMSEであるため、本コンペでは重要な問題となりました。

目的変数の賃料の分布は次の通りです(画像は共に*3から引用)。trainの中に家賃50万円以上の物件は123件しかなかったそうです*4

f:id:upura:20191121191152p:plain f:id:upura:20191121191206p:plain

また外部データの利用も許可されており、緯度・経度などを多くのチームが活用していた模様です。

コンペ設計

コンペの参加者は724人で、チーム参加も可。一度でも投稿したのは302チームでした。

SIGNATEのコンペには珍しく参加者が公式に議論できる「フォーラム」*5も存在していました。ただし、さほど活発な議論は行われていないようでした。*6でも言及がありますが、KaggleやPropSpace*7など他のデータ分析プラットフォームとは異なり、SIGNATEには議論に対するポイントなどの動機づけがないことが理由の一つだと考えられます。

表彰

評価関数の優れている上位5チームには「予測精度賞」として表彰されます。モデルやデータ分析の創意工夫点を評価する「アイデア賞」も存在し、提出したレポート優れていた1チームが選出されました。

予測精度賞(1位解法)

最終順位は次の通りです。1位チームが1カ月近く首位を走り続けたらしく、最終スコアでも頭一つ抜けている印象があります。

f:id:upura:20191121192448p:plain

1位チームのモデル構成は次の通りです(画像はスライドから引用)。

f:id:upura:20191121193128p:plain

前処理・特徴量エンジニアリング

  • 住所・間取り・最寄り駅・路線などの表記揺れの修正と名寄せ
  • 緯度・経度
  • 公示地価情報
  • 最寄り駅の利用者数
  • 各物件の各区からの距離(の逆比)

建物IDの付与

trainとtestに同一の建物内の物件が存在するという特徴に対応すべく「建物ID」を定義していました。具体的には、住所の一部・建物構造・築年数・最上階数が一致するデータは、同一の建物に存在すると見なしたようです。

同一建物内での回帰モデル

同一の建物内の物件は比較的予想が容易という特徴を活かし、次のフローチャートに沿って線形回帰で予測したそうです(画像はスライドから引用)。同一建物内であっても面積と賃料に相関がない場合は対象としない工夫があり、データを丁寧に分析していると感じました。

f:id:upura:20191121194322p:plain

CatBoost

線形回帰の対象外となったデータについては、3種類のCatBoostで予測しています。このとき、目的変数を賃料ではなく「単位面積当たりの賃料」に変換したとのことです。この変換は、7位の方も試しており「アンサンブルに寄与した」とのコメントがあります。

CVは、建物IDを用いたGroupKFoldを使っていました。同一の建物内の物件については既に予測済であることを考えると、非常に妥当な選択だと考えられます。ここでGroupKFoldを使わない場合、ある種の「リーク」が発生してしまいCVスコアが不当に良く出てしまう可能性があります*8

Pseudo Labeling*9を使ったデータの水増しも行っていました。先述の線形回帰の予測値のうち正確だと思われる一部のデータを利用することで、trainを31470件から46290件まで増やしていたそうです。

特徴量の重要度を見ると、港区からの距離や公示地価情報など、特徴量エンジニアリングで追加した特徴量が上位に来ていました。

Stacking

データの特徴を考慮した2種類のStacking*10を実施していました。スライドでは、それぞれ「Stratified Stacking」「Adaptive Stacking」として紹介されていました。共に思考停止でアンサンブルするのではない工夫があり、素晴らしいと思いました。

Stratified Stacking

区ごとに異なる賃料の傾向を掴むため、全量を用いてCatBoostで学習した後、区ごとに束ねて、Ridge回帰でStackingしたそうです。

Adaptive Stacking

外れ値となる高額物件が存在する問題に対応するため、全量を用いてCatBoostで学習した後、特徴量を分析した結果外れ値を取りうる物件だと期待される群を抽出して、Ridge回帰でStackingしたそうです。

イデア

イデア賞は最終結果で11位だったチームが選ばれました。個人的に一番興味深かったアイデアを紹介しておきます。その他、「McCatRank」*11も特徴量エンジニアリングの選択肢として持っておきたいなと思いました。

賃料と合わせて緯度・経度も予測するMulti-modal NNを学習

賃料だけでなく緯度・経度も予測するNNを学習させていました。10月に開催された「Kaggle Days China*12」のオフラインコンペで優勝したtakuokoさんの解法を参考にしているそうです*13

複数の目的変数を設定することで性能を向上させるテクニックは近年いろいろな分野で採用されている印象はあります*14が、テーブルデータだけでなく周辺の地図の画像データも入力して扱っている点も含めて、面白いアプローチだなあと感じました。

おわりに

本記事では、マイナビコンペの解法をまとめました。やはり個々人が取り組みを共有できるコンペは良いなあと改めて感じました。

*1:門脇ら, Kaggleで勝つデータ分析の技術, 技術評論社, p. 63, 2019.

*2:

www.slideshare.net

*3:tellmoogle.hatenablog.com

*4:github.com

*5:https://signate.jp/competitions/182/discussions

*6:mosamosa.hatenadiary.jp

*7:prob.space

*8:門脇ら, Kaggleで勝つデータ分析の技術, 技術評論社, pp. 107-108 & 278-279, 2019.

*9:門脇ら, Kaggleで勝つデータ分析の技術, 技術評論社, pp. 266-267, 2019.

*10:門脇ら, Kaggleで勝つデータ分析の技術, 技術評論社, pp. 360-368, 2019.

*11:tech.preferred.jp

*12:kaggledays.com

*13:github.com

*14:data.gunosy.io