コンペ参加結果

こんにちは!

このたび、プロジェクトのあいまを使って、国土交通省が主催する不動産賃料・賃貸価格の予測をするコンペのモデリング部門にIFDの社内チームで参加しました。

結果は528チーム中49位!銀メダル🥈を獲得しました!

後日開催されたコンペの振り返りイベントによると、コンペの総参加者は1,532名、総投稿数9,709件とのことです。

このコンペは不動産の賃料・賃貸価格の予測モデルの精度を競うもので、株式会社LIFULLが提供する全国の賃貸マンション・アパートの賃料と物件情報を使用します。

また、国土交通省主催で開催していることもあって、国土数値情報のデータ使用が義務付けられている点が特徴です。

第1回 国土交通省 地理空間情報データチャレンジ ~国土数値情報編~

今回モデリングをするにあたって工夫した点についてこれからまとめていきます。

特にスコアに影響があった処理などを抜粋して記載していきますので、是非ご覧いただきたいです!!!!

前処理

【面積】

まずは、目的変数の賃料を坪単価にする上で、最も影響のある指標になると考えられる面積の前処理についてお話します。

一般的に面積の値が大きくなるにつれて、賃料も増加する傾向にあります。

ただ、面積の広い物件と狭い物件では単純に面積の違いだけでなく、設備などの条件が大きく異なるので、目的変数を坪単価に変更することで条件の均一化を行いました。次に前処理に移ります。

面積のカラムは異常値や欠損値が多かったので、その処理が必要でした。

異常値に関してですが、5〜400㎥という閾値を設定することで対応することにします。

閾値の基準としては賃貸物件の平均的な面積の値に幅を持たせたもので、細かい調整は閾値を都度変更しながらモデルの評価スコアを確認して最適な値になるようにしました。

続いて欠損値についてですが、間取りごとの面積平均を算出することで対応します。

全体の値を使用するよりも正確な値が導き出せると考えました。

欠損値処理に関してはこれらの方法以外にも、ロフト付きの条件を追加してみたり、平均ではなく中央値を使用してみたりしましたが、シンプルな間取りごとの平均が一番スコアが高かったです。

【階数カラム】

該当物件の階数が入っているカラムは、建物全体の比率として再定義しました。

そうすることで、同一建物内での階数の価値が分かるようになり、階数のカラムをそのまま使用するよりも精度が出せると考えたからです。

結果としては単純に階数のカラムを使うよりも、スコアを向上させることができました。

【オープンデータ】

国土交通省が提供する国土数値情報というサイトの中からモデルの精度を向上させるようなデータをいくつか持ってきます。

選択基準としては一般的に考えてこれがモデル精度向上に効果がありそうだと思ったものを選びました。

人口動態や乗降客数や土地価格、公示価格はそのまま新しい説明変数として使用しました。

また、線路のデータは物件の緯度経度と紐づけて線路と物件との距離を算出し、新たな説明変数とします。

駅や小学校・中学校との距離のカラムは元々存在していましたが、欠損値や異常値があったのでオープンデータを使用して置き換えました。

オープンデータを利用することで、新しい説明変数を作成するだけでなく、元々存在していたカラムの穴埋めをすることができました。

【物件詳細情報】

提供されたデータには物件の詳細な情報が入ったカラムがありました。

中身は風呂トイレ別やオートロック付きなどの該当物件に対する設備やシステムがコード値として割り振られています。

こちらのコード値は数十件にも及ぶので、スコアが最良になるようにベースモデルの段階でスコアを確認しながらコード値の取捨選択を行いました。

【その他前処理】

今回提供されたデータの中には上記に挙げた指標の他にも、異常値や欠損値が含まれる項目が多く存在しました。

具体的には、築年数や部屋数、駐車場料金、コンビニ距離などが挙げられます。

こちらについては、欠損値処理が必要なものとそうでないものの二つに分けました。

駐車場料金やコンビニ距離などは、欠損値自体に意味があると考え処理を加えることをせず、他のカラムに対しては欠損値を平均値と中央値を算出して穴埋めします。

算出の仕方として、まず異常値に対して閾値を設定し、異常値を中央値で置き換え、その後該当カラムの平均値を算出し欠損値を埋める方法をとりました。

異常値含め全体の平均を取るより値の精度が高いと思い、そのような手法を用いました。

モデル

【クラスタリング】

モデルの精度を高める段階で、コンペ側の指定の評価方法であるRMSEのスコアをレコード別に見てみると東京都の100㎡以上の物件のスコアが他と比較した時にかなり悪いことが分かりました。

そこで、訓練用データを東京都かつ100㎡のデータとそれ以外のデータで分けて別々にモデルを作成し、それぞれ予測することで対応することにしました。

【スタッキング】

LightGBM、CatBoost、Lidgeをスタッキングさせることによりお互いの長所を活かす形をとりました。

数値データに強いLightGBMと、カテゴリカルデータに強いCatBoostを組み合わせることで、データの特性に合わせたモデルが構築できます。

また、線形モデルであるLidgeが複雑な非線形モデルであるLightGBMやCatBoostの予測を補正することができ、過剰なモデルのバイアスを抑制する効果も期待できます。

まとめ・感想

特定条件下でのスコア低下要因を分析する力は向上しましたが、精度改善にはさらなる工夫が必要だと感じました。今後は機械学習の知識を深化させ、より多様なアプローチを試みていきます。

データ分析やモデル構築でお困りではありませんか?

今回の取り組みで培ったノウハウを活かし、課題解決のお手伝いをいたします!

ぜひお気軽にご相談ください。

一覧へ戻る