Upgrade to Pro — share decks privately, control downloads, hide ads and more …

expert_x_contibutor: マイナビコンペ2019 アイデア賞受賞スライド

Pondel
November 07, 2019
5.1k

expert_x_contibutor: マイナビコンペ2019 アイデア賞受賞スライド

マイナビ × SIGNATE Student Cup 2019: 賃貸物件の家賃予測
https://signate.jp/competitions/182
アイデア賞受賞スライド

Pondel

November 07, 2019
Tweet

Transcript

  1. 本コンテストにおけるデータ理理解及びチームの基本戦略略 ▸ ⾼高額賃貸物件(外れ値)への対処が鍵 ▸ 評価指標RMSE.最⾼高額:250万円/⽉月 (港区のタワマン) ▸ データセットに類類似したデータが存在 ▸ 同じマンションの同じフロア等

    ▸ 外部データ利利⽤用可能 ▸ 提供されたデータセットは⽐比較的シンプル ▸ 外部データの有効活⽤用による差別化がポイントになりそう 右に裾が⻑⾧長いTarget分布 2 最初は⽬目視で似ている物件の法則を確認..(同じ⾊色で塗る) 地理理情報は重要そう 上記より,① ⾼高額物件の対策,② 類類似物件の置換,③ 外部データの有効活⽤用を基本戦略略とした Train: 全31470件 50万以上は133件しかない BUT RMSEなので無視できない
  2. アイデア ① データ数が極めて少ない⾼高額物件予測の対策 ▸ 物件のタイポ修正 (CV: 18002→ 16801) ▸ Targetが1203500円の賃料料を1件120350円だと仮定して置換

    ▸ 置換(後述)することででなるべく予測しない ▸ ⾼高額物件予測が難しいという前提でなるべく置換する ▸ データの⽔水増し(後述)によりデータ不不⾜足を補う ▸ 50万円以上の⾼高額物件はTrainに133件しかない ▸ ⾮非⾼高額物件予測モデルによる予測精度の向上 ▸ 着眼点: ⾼高額物件データの無理理な学習がモデルに悪影響では? ▸ ⾼高額物件を除いたデータで置換することでCV 100程度↑ 3 タイポだと考えられる
 モデルが⼤大きく外しているプロット 特徴量量 全ての特徴量量を使⽤用して学習 Target<= 500000のみを使⽤用して学習 通常モデル ⾮非⾼高額物件予測モデル 予測結果が300000以上の場合通常モデルを採⽤用 300000未満の場合⾮非⾼高額物件予測モデルを採⽤用 タイポの修正
  3. アイデア ② Train/Test間の類類似物件の推定及び置換 ▸ Train/Test間で類類似物件が存在 ▸ 理理由:同じマンションの同じフロアや違う階など ▸ 考案した置換プロセス(補⾜足資料料2)によりTestデータ置換 ▸

    更更に置換精度を上げるための置換⽅方法の⼯工夫 ① ▸ Train/Testで同じマンションのデータを線形補完 ▸ Train: ⻘青,Test: ⾚赤を示す (figは賃料料 vs 階) ▸ 内挿は⾏行行う,外装は線形回帰の誤差が0の場合のみ ▸ 更更に置換精度を上げるための置換⽅方法の⼯工夫 ② ▸ ⽅方⻆角キーを加えると置換対象が減る(条件が厳しくなる) ▸ 検証した結果,よりLBが上がったので採⽤用 ▸ 上記の置換結果をPseudo-Labelにした ▸ 約3割のデータを⽔水増しすることでCV100程度改善 4 Testデータの約38%を置換: LB14232→LB 12839 ⻘青のTrainデータで⾚赤のTestデータを線形補完した例例 左: 複数の線形回帰の結果に誤差があるため内挿のみ 右: 複数の線形回帰の結果の誤差が0のため外挿も⾏行行う 機械学習の予測値を採⽤用 線形補間を採⽤用 左: ⽅方⻆角を識別していないので平均で置換してしまう 右: ⽅方⻆角を識別しているので精度が向上 2つ⽅方⻆角が混ざっている 2つ⽅方⻆角を区別 得られた示唆 家賃は結局は⼈人間が決めているので 機械学習を使わなくてもパターンが分かる場合もある
  4. アイデア ③ 外部データを活⽤用したMulti-target Multi-modal NN ▸ 着眼点:緯度経度を特徴量量としてではなくtargetとして使いたい*1 ▸ 仮説: Multi

    target lossで緯度経度のlossも下がるように学習すると精度が上がりそう ▸ 地図画像(外部データ)の取得 ▸ スクレイピング+緯度経度情報をクリッピング*2 ▸ Train/Testデータと同じ枚数の画像を取得 ▸ Multi targetモデルの設計 ▸ outputを1. 賃料料,2. [緯度,経度] とした ▸ 賃料料: [緯度, 経度]のlossのweightを1:2000とした ▸ 緯度経度もしっかり学習させた⽅方がスコア↑(CV 500程度改善) ▸ モデル構造 ▸ 線形モデルとDeepモデルを組み合わせたWide & Deep Learning様構造*2を採⽤用 5 + スクレイピングした地図画像+ 基本特徴量量による マルチモーダル学習 *1 Kaggle Days China Winners Solutionを参考 https://github.com/okotaku/kaggle_days_china *2 foliumを使い、⼊入⼒力力した緯度経度を中⼼心とした地図のHTMLファイルを作成し、seleniumでクロップ *3 Wide & Deep Learning for Recommender Systems (https://arxiv.org/pdf/1606.07792.pdf) モデル構造
  5. expert_x_contributor Model Pipeline Feature A Feature A pseudo Feature B

    Map image NN NN pseudo LGBM A LGBM A pseudo XGB B XGB B pseudo LGBM B LGBM B pseudo 1. ALL data model 2. Target <= 500000 model Replace Predict<=300000 of 1 to 2 Feature B pseudo Post process Blending Best Submission Score: LB モデルはLight GBMを主軸としてXgboost, NNを採⽤用しアンサンブル学習 Pseudo-Labelingの有無でそれぞれ2パターンモデルを構築
  6. 本コンテストのまとめ 7 ▸ アイデアのまとめ ▸ ⾼高額物件の予測は困難 → 置換やモデリングを⼯工夫して精度を上げる アイデア① ▸

    Train/Testに類類似物件が存在 →法則を考えて置換精度を上げる アイデア② ▸ 緯度経度もうまく予測するようにモデルを組む アイデア③
 ▸ 本コンテストを通して得られた示唆 ▸ データ分析コンテストだからといって機械学習を使う必要はない ▸ タスク特有の知識を活かして機械学習をなるべく使わない⼿手もある ▸ 感想と⾔言い訳 ▸ 中学⽣生〜⼤大学院⽣生,多様なバックグラウンドのメンバーで議論できて楽しかった ▸ 東京在住のメンバーがいなかったので東京のことが全く分からなかった
  7. 補⾜足資料料1 LBスコア推移 ‣ 後処理理の精度を⾼高めること,外部データを有効活⽤用することが重要 ‣ 後半はお互い相関が低くなるようにモデルを構築しアンサンブル学習 8 10,000 12,000 14,000

    16,000 18,000 20,000 22,000 24,000 28/09/2019 08/10/2019 18/10/2019 28/10/2019 07/11/2019 チームマージ前 後処理理の重要性に気づく 外部データの追加等 後処理理の精度向上 アンサンブルによる地道で⾟辛い作業
  8. 補⾜足資料料2 アイデア②の詳細プロセス 1. 区、町、丁⽬目、⾯面積、築年年数、建物構造、間取り、最⼤大階、階、アクセス、⽅方⻆角をキーとした家賃平均 2. 区、町、丁⽬目、⾯面積、築年年数、建物構造、間取り、最⼤大階、階、⽅方⻆角をキーとした家賃平均 3. 区、町、丁⽬目、⾯面積、築年年数、建物構造、間取り、最⼤大階、階、アクセスをキーとした家賃平均 4. 区、町、丁⽬目、⾯面積、築年年数、建物構造、間取り、最⼤大階、階、をキーとした家賃平均

    5. 区、町、丁⽬目、築年年数、建物構造、間取り、最⼤大階、階、⽅方⻆角をキーとし、⾯面積をDBSCANでクラスタリング(eps=0.1)し、⾯面積の分散が1を下回った時の家賃平均 6. 区、町、丁⽬目、築年年数、建物構造、間取り、最⼤大階、階をキーとし、⾯面積をDBSCANでクラスタリング(eps=0.1)し、⾯面積の分散が1を下回った時の家賃平均 7. 区、町、丁⽬目、⾯面積、建物構造、間取り、最⼤大階、階、⽅方⻆角をキーとし、築年年数をDBSCANでクラスタリング(eps=0.2)した時の家賃平均 8. 区、町、丁⽬目、建物構造、間取り、最⼤大階、階をキーとし、築年年数をDBSCANでクラスタリング(eps=0.2)した時の家賃平均 9. 区、町、丁⽬目、建物構造、間取り、最⼤大階、階、⽅方⻆角をキーとし、⾯面積と築年年数をDBSCANでクラスタリング(eps=0.1)し、⾯面積の分散が1を下回った時の家賃平均 10. 区、町、丁⽬目、建物構造、間取り、最⼤大階、階をキーとし、⾯面積と築年年数をDBSCANでクラスタリング(eps=0.1)し、⾯面積の分散が1を下回った時の家賃平均 の10段階で置換。その後、 2段階⽬目のキーから所在階を抜いたキーで所在階で線形回帰し、誤差が0になれば置換、ならなければ最近傍の階のみで線形回帰し内挿する。 4段階⽬目のキーから所在階を抜いたキーで所在階で線形回帰、誤差が0になれば置換、ならなければ最近傍の階のみで線形回帰し内挿する。 9 ▸ 基本的な考え⽅方 ▸ 1. 最初は完全⼀一致データを探して変換する ▸ 2. 少しずつ条件を緩めて(表記揺れに対応して)より柔軟に変換する
  9. 補⾜足資料料3 本編中で解説しなかったサブアイデア 10 ▸ McCatRank*1 ▸ アクセスの駅の掲載順をお勧め度と仮定 ▸ McCatRankで上記仮定を表現 ▸

    CV: 100程度改善↑ ▸ 外部データの使⽤用 ▸ 区毎の犯罪件数データの追加*2 ▸ 駅ごとの乗降者数データの追加*3 ▸ 緯度経度情報の有効活⽤用 ▸ 皇居など主要建物からの距離に変換 ▸ 緯度経度の⼩小数点をround (区画を作るイメージ) ▸ 半径X km内に存在する駅の数のカウント *1 McCatRank参考資料料: https://research.preferred.jp/2019/09/kddcup2019automl/ *2 http://opendata-catalogue.metro.tokyo.jp/dataset/t000022d0000000034 *3 http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-S12-v2_3.html 駅の緯度経度データセット
  10. 補⾜足資料料4 上⼿手く⾏行行かなかったアイデア 11 ▸ モデリング ▸ Targetを[0, 1]の範囲で正規化 → Xntropy

    Loss ▸ ⾼高額物件/低額物件を予測するモデルを構築し,AUCで加重平均 ▸ Catboostを試したが精度が出なかった ▸ 外部データ ▸ 道路路の位置情報の追加(画像から無理理やりデータセット作成) ▸ ⼟土地利利⽤用情報の追加 ▸ 東京の公共施設の緯度経度情報の追加 ▸ 特徴量量エンジニアリング ▸ SWEMで単語埋め込み ▸ 置換 ▸ Testデータ間で類類似物件があった場合平均 ⾼高速道路路等のデータセット ⼟土地利利⽤用データセット