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

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

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

 

 前回の記事で中古不動産価格の予測モデル作成について、scikit-learnでの回帰モデル作成について、紹介しました。あまり良い結果はえられなかったのですが、今回はAbaboost法でのハイパーパラメータの最適化について紹介したいと思います。

 ハイパーパラメータの最適化手法については、これまでの記事でも紹介ましたが、条件をランダムに発生させ最適化を行うランダムサーチ、網羅的に条件を発生させ最適化を行うグリッドサーチ、さらには自動最適化のフレームワークを利用した方法などがありますが、今回はOptuna™を利用した最適化について紹介したいと思います。

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

  今回もまずはライブラリーインポートですが、これまでに利用してきたライブラリー以外に特に回帰モデル作成用にAbaboostRegressor、ハイパーパラメーター最適化用にOptuna™をインポートしています。

 

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

  

コード3 前処理その2

 続いてこれまでも行ってきたように、不動産情報の読み取りと前処理として築年数の算出のための処理及び回帰モデル作成用の目的変数などの設定を行っています。

 

コード4 データ分割、標準化処理

 次は回帰モデル作成の設定で、データの分割と標準化処理を行っています。

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

 次にOptuna™で行う探索条件の設定をobjective という関数として設定しています。まず変化させるパラメーター、回帰モデルの設定を行っています。コードの下部は得られた結果の評価値の算出で、トライアル回数ごとの評価値の保存を行っています。最後にOptuna™で最適化する目標値を関数の返り値として設定しています。

 

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

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

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

 

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

最適化途中の表示

 以下は最終的な最適化結果です。100回のトライアルの結果。R2値は0.2997でした。正直あまり良い値ではありませんが、前回のscikit-learnでの網羅的な検討での結果ではR2は0.0189程度でしたので、ある程度最適化がうまく行われていることがわかるかと思います。

 

結果1

結果2

結果3

 以上、今回は選択した回帰手法(Ababoost法)でのハイパーパラメータの最適化の事例について紹介させていただきました。

 ただ、評価値としてあまり良い結果は得られていませんので、次回はpycaretで探索した結果最も有望であったlightGBMでの検討結果について紹介したいと思います。