これは何?
某社で行われている社内コンペのメモです。私の備忘録でもあります。
結果:3位
精度:60.7%
今回は学習データが12,000件ほどあり、ある程度多いデータ量での学習ができました。
学習データは評価データと分布が同じとされていましたが、それはちょっと怪しかったかなと思います。
今回の目的変数
「その部屋が何の間取りに種別されるか」のテーブルデータの多値分類問題です。
回答は、
・3LDK
・2K
・1K
などとよくある形です。目的変数の種類が多い(最大38個)ことを除けば。
今回の評価指標・ベースレート
Accuracy(精度)です。
出題者によると、お試しの意味も込めてAccuracyだそうです。
普通なら複合指標による評価が妥当とされています。
Precision(適合率:真の陽性をいかに漏れなく見分けられたか)やAUC(認識性能の高低を表す)、MAP(Mean Average Precision、Precisionの応用)などなど。
ベースレートはAccuracy50%でした。
僕は、検証の際はAccuracyを用いていました。
今回は別の目的があり、全く工夫をしませんでした。
今回の説明変数の特徴
テーブルデータ
訓練に使用できるのは12,000データ
同じような目的変数がある
3LDK、3DK、3K・・・違いが判らん!
それらのデータの特徴量も似たようなものでした。
つまり、ルールベースで分けたほうが精度が上がる目的変数のグループも存在しました。
ルールベースで分けること自体はKaggleやSIGNATEではあまり言及されませんが、現場ではよく使われる手法です。実データはデータ量が足りない場合も多く、環境が整っていないからその手法採用されているだけで、本来のデータが潤沢にある状況であれば予測すべきです。
説明変数の作成が手入力(で雑)
家探ししているとよく見かけるのですが、敷金、礼金は家賃の〇か月分ってありますよね?
その値が手入力のようで、一致している場合もあればしていない場合もありました。
例を挙げると以下のようになっていました。
・家賃:8万
・敷金(家賃の〇か月):2
・敷金額:12万円 ← What’s?????
今回の目標
特徴量生成のみで乗り切る。
(一応3位なんで乗り切れたと思いたい。)
今回行った特徴量生成の方法
データの適正化
手入力が多かったので上記のようなことが起こっていました。
グループ平均との差分を取り、標準偏差で表す
例えば、「その地域の家賃平均から高ければ高いほど、大きな部屋である可能性が高い」を数値化しました。
グループ内での順位を取る
上記と同じ考え方です。
業者の電話番号は業者ごとに存在すると考え、ラベルエンコーディングで特徴量化しました
建設業者はそれぞれの得意な分野(大きさ、形、場所)があり、棲み分けがされているようでした。
施設管理・施設設計をしていた経験からそう判断しています。施設の発注代がとても高かった記憶があります。(‘A`)
UMAPでの次元削減
t-SNEと同様でしたが、計算速度が速い・・・ハズ。
ただ、計算リソースが少ないPCだと結構エラーが出るので面倒でした。
Kaggleであった同様のコンペでは効果があったようですが、今回はあまり意味がなかったです。
K-Meansクラスタリングで教師なし学習結果を特徴量化
大分類で8クラスに分かれることが分かったので、それぞれの確率を特徴量としました。
あまり意味がなかったorz
その他の情報
モデル:XGB+LGBM(23:1)アンサンブルモデル
バリデーション方法:層別K-Fold(9:1)
パラメータチューニング:Optuna、Optuna LGB
その他の解法
パラメータチューニング
Kaggleで勝つデータ分析の技術P.318-320に載っているパラメータチューニング方法を、XGBにそのまま使うと大分上手くいったようです。
Optunaはベイズ最適化なのである程度は上手くいきますが、より精度を高めるのであれば手動をお勧めします。
それをしないと無理な境地がありそうです。
Deep Learningを含めて全部できるのはスゴイと思う。計算速度の良いPCが必要だ・・・お金足りないよ。
Optuna LGBは初めて使いましたが、Optunaに比べコードがかなり簡略化されており、初心者にも扱えそうで便利でした。
※個人的に、Kaggleはデータ分析というよりデータモデリングが主だと思っている。
スタッキング
よく使われるようになった手法。
ただし、今回はあまり効果がなかったようです。
※私は使ったことはない。
最後に
間取り予測して何に使うんですか?
目的がわかってない、分析では最悪なパターンです。
コンペに参加する目的が最近の手法の大枠を捉えなおすことなので、ボチボチ更新できたかなと思う程度でした。
日本語のはある程度読みましたが、海外の資料や論文は10も読まなかったかな。
この考え、動き方を社内でできる人を増やす方向で動いているので、あまり時間を割きたくないという理由もある。
やってみたではなく、何を考えたか、なぜそう考えたかを包括的に書いた記事が少ないので、少しずつですがアップしていこうと思います。
その他コードやデータサイエンス関連の質問はR:Twitterまでお願いします。