【HousePrice】アンサンブル学習使って精度向上した話

Kaggle
しぃ たけ
しぃ たけ

Kaggle本によく書かれているアンサンブル学習試してみました。

概要

前回、前処理まで行ったHousePriceのコンペの続きをやっていきます。

今回一番やりたいことは、アンサンブル学習を使ってどれくらい精度が向上するのかを検証することです。

前処理の方法については前回の記事をご覧ください。

それでは進めていきます。

特徴量の選定

LabelEncording

特徴量を選定するため、

Object変数をLabelEncordingで離散化していきます。

確認したところ離散化できていたので、教師データとテストデータを準備していきます。

 

feature importanceで重要度の確認

全部で70個以上の説明変数が存在するので、すべてを特徴量には使えなさそうなので住宅価格に効いているもののみを選び、学習させていきます。

特徴量の選定には効いている目的変数と相関が強い説明変数を計算してくれる、ランダムフォレストのfeature importancesメソッドを使っていきます。

‘OverallQual’,’GrLivArea’の重要度が高く、それ以外は大きく寄与していなさそうです。
全部の説明変数を特徴量に使う必要ないので、省いていきます。

数えてみたところ、上位20項目くらいで全体の9割以上寄与しているので、上から20項目のみ抽出します。

 

特徴量と目的変数の関係と外れ値の削除

目的変数である、’SalesPrice’と選んだ20個の特徴量の関係を可視化してみます。

グラフ化してみると、

‘OverallQual’,’GrLivArea’,’TotalBsmtSF’などの上位のデータと’SalesPrice’の間にきれいに線形の相関がみられること、

‘GrLivArea’,’TotalBsmtSF’,’1stFlrSF’,’BsmtFinSF1′ あたりに外れ値らしきデータが存在すること

などがわかります。とりあえず外れ値は消していきましょう。

外れ値消えてますね。

これで特徴量加工終了です。


モデル作成とパラメータ調整

モデルの作成

まずは、モデル作成前に特徴量を標準化していきます。

ようやくモデル作成パートです。上記で準備した特徴量を使って学習させていきます。

今回は、RandomForest、XGBoost、LightGBM の3つのアルゴリズムを学習に利用することにします。

こいつらを選んだ理由は、特徴量の離散化にLabelEncordingを使っているので、決定木系のアルゴリズムを選ぶ必要があったためです。

まずは、インポートと学習をさせていきます。

  

パラメータ調整

次に、GridSearchを利用してハイパーパラメータの調整をしていきます。

パラメータの水準は効きそうな項目を適当に設定します。

計算終了です。ベストパラメータの中身については割愛しますが、上記のパラメータで学習させてまずは普通に提出してみましょう。

csv出力と提出

前項で計算終わった、パラメータを使って学習、提出していきます。

まずは、ベストパラメータで学習させます。

上記の3つのモデルをKaggleに提出した結果、下記のような結果となりました。

・RandomForestのモデル    Score : 0.14859

・XGBoostのモデル      Score: 0.14977

・LightGBMのモデル     Score : 0.14118

ScoreはRMSEの値となるので、Scoreが低いほど精度が高いモデルといえます。

そのため今回のモデルの精度は

LightGBM > RandomForest > XGBoost

ということになりますね。

さぁ、この3つのモデルの結果を使ってアンサンブル学習のパートに移っていきましょう!


アンサンブル学習

最後に、前章で作成した3つのモデルを使って、

アンサンブル学習を試していきたいと思います。

正直、今回の記事はこれがしたかっただけといっても過言ではないです。

アンサンブル学習とは?

アンサンブル学習は、

複数のモデルを組み合わせて予測をすることで、予測精度を高める手法のことです。

手法としては、いくつかモデルを作って平均値で予測をする手法と、スタッキングと呼ばれる方法で予測をする手法が存在します。

今回は簡単に、前章で作成した3つのモデルの加重平均で予測モデルを作成する方法を試していきます。

加重平均の重みを決定

まずは、3つモデルの予測結果をDaraFrameに入れていきます。

emsemble_testにテストデータの予測値が格納されている状態になりました。

次に、各モデルにつける加重平均の重みづけを考えます。

作成した3つのモデルは、下記の順番で精度が高かったです。

LightGBM > RandomForest > XGBoost

そのため、精度が高いLightGBMモデルに重みを強くする設定し、精度が悪かったXGBoostの重みは小さくする必要があるので、下記の重み付でモデル作成してみます。

 アンサンブルモデル = LGB ×0.5 + RFR × 0.3 + XGB ×0.2

mean列が今回作成した、アンサンブル学習の結果となりました。

ほかのモデルの平均くらいの値になっているので、うまくいってますね。

このデータでKaggle提出してみましょう。

提出

Kaggleに提出した結果がこちらになります!

荷重平均のアンサンブルモデル   Score: 0.14010

前回一番精度の高かったLightGBMのモデルのScoreが 0.14118 であったため

荷重平均をとるだけで精度が向上しました!

感想

今回はHousePriceのコンペで、アンサンブル学習を利用して精度が向上することがわかりました。

最後の精度の追い込みで使えそうですね。

コメント

タイトルとURLをコピーしました