あるケミストの独り言(winchemwinの日記)

ケミスト(化学者)の視点で、面白そうな情報(シミュレーション関係など)を発信

機械学習による(中古)不動産価格の予測 その4

 前回までの記事で中古不動産価格の予測モデルの作成として、scikit-learnでの回帰モデル作成(Ababoost法)について紹介してきました。ただ、ハイパーパラメータの最適化も行いましたが回帰モデルとしてはあまり良い結果が得られてきていませんでした。

 そこでpycaretを利用して再度各種回帰方法の検討を行ったところ、lightGBMで比較的良い結果が得られてきていましたので、今回はlightGBMでのハイパーパラメータ最適化事例について紹介したいと思います。

コード1 ライブラリーのインポート

 まずはこれまでと同様にライブラリーのインポートです。今回はlightGBMを使いますので、”lightgbm"を読み込んでいます。またハイパーパラメーターの最適化には今回もOptuna™を利用しています。

コード2 不動産情報の読み込みと前処理その1

 

コード3 前処理その2

 

まずはデータの読み込みと前処理ですが、これまでと同様に前処理として築年数の算出のための処理及び回帰モデル作成用の目的変数などの設定を行っています。

コード4

 続いてデータの分割(訓練用、テスト用)をデータの標準化処理ですが、これらもこれまでと同様の操作になります。

 

コード5 Optunaの探索条件設定

 次にOptuna™で行う探索条件の設定をobjective という関数として設定しています。まず変化させるパラメーター、回帰モデルの設定を行っています。今回はlightGBM用ということで前回とは検討パラメータが前回とは異なり、多くのパラメータを検討しています。パラメータの設定に関しては、下記の記事を参考にさせていただきました。

qiita.com

またコードの下部は得られた結果の評価値の算出で、トライアル回数ごとの評価値の保存を行っています。最後にOptuna™で最適化する目標値を関数の返り値として設定しています。

 

コード6 自動最適化の実施及び結果表示

 

 最終的にOptuna™で最適化の設定ですが、この辺は前回のOptuna™での最適化の記事と同様です。R2値を関数の返り値として設定していますので、その値を最大値とするよう最適化するよう設定するとともに、先に作成したobjective の関数に従って100回のトライアルを行う形としています。

 結果はベストスコアとパラメーターを表示させるとともに、途中経過の確認のため逐次保存されている評価値のデータフレームの表示も行っています。

 

  最適化が開始されると以下のような表示が始まります。

最適化途中の表示

 以下は最終的な最適化結果です。100回のトライアルの結果。R2値は0.7679でした。Ababoost法での結果が、0.2997でしたので、かなり改善されているのがわかるかと思います。

 

結果1

結果2

結果3

l ightGBMでかなり良いモデルが作成できましたので、次回は作成した予測モデルの保存について紹介したいと思います。