ExploratoryでKaggleのHouse Priceをやってみる

ExploratoryでKaggleのHouse Priceをやってみる

前回の投稿でベイジアンA/Bテストを紹介しましたが、その際に参考にした記事でExploratoryというツールが用いられていました。


調べてみると、ExploratoryではベイジアンA/Bテストはもちろんのこと、データの可視化やモデル構築までできるとのこと。
Public版なら無料で使えるので、今回はKaggleのHouse Priceチュートリアルを題材に、Exploratoryでどういうことができるのかを試してみます。
ちなみに、KaggleのHouse Priceチュートリアルについては以下の記事で取り上げています。

Exploratoryとは

Exploratoryを一言でいうと、データ分析タスクの3本柱である、データラングリング、データ可視化、分析(統計処理、機械学習)をデータサイエンティスト・アナリスト・エンジニアではなくてもお手軽にできてしまうツールです。
Exploratoryのインストール方法や使い方は以下で詳しく説明されていますので参照してください。

データ読み込み

KaggleのHouse Priceチュートリアルのtrain.csv、test.csvをExploratoryで読み込み、データフレームとして格納します。
すると、「Summary」シートで各特徴量の分布や頻度を把握することができます。

特徴量エンジニアリング

ターゲット変数(SalePrice)の加工

まず、「Summary」シートで目的変数(ターゲット変数)であるSalePriceの分布を見てみます。

典型的な年収分布のように右に裾が長い分布になっていることがわかります。
必ずしも目的変数を正規分布に近似する必要はありませんが、今回はExploratoryの機能の確認としてlog-transform(対数変換)によって正規分布に近似させます。
SalePriceで「数値関数を使う」>「log1p」を選択します。

実行をクリックします。

SalePriceにlog1p関数が適用され、正規分布に近似することができました。

特徴量選択

borutaというランダムフォレストと検定を用いた特徴量選択手法を使って、回帰に効く特徴量を選択します。
「Analytics」シートで「タイプ」>「ランダムフォレスト」をクリックします。

目的変数(ターゲット変数)にSalePrice、説明変数(特徴量)にIDとSalePrice以外の特徴量全てを選択し実行します。
デフォルト設定でborutaを用いた特徴量選択が行われ、どの特徴量が目的変数に寄与するのかを3段階(Confirmed, Tentative, Reject)で評価し、可視化してくれます。

後ほど、Confirmed, Tentativeと判定された特徴量を使ってモデルを構築するため、いったん検定結果をExcelファイルでエクスポートしておきます。

特徴量の名前の変更

特徴量の「1stFlrSF」、「2ndFlrSF」はカラム名の先頭に数字が入っているため、このカラム名のままではExploratoryのモデル構築で扱うことができません。
※Rだと、カラム名の先頭に数字が入っていても、カラム名を「`」で挟むことで扱えますが、なぜかExploratoryでは扱えません。
なので、特徴量「1stFlrSF」、「2ndFlrSF」のカラム名を変更し、先頭に数字が入らないようにします。
「新規ステップを追加」> 「列名を変更」をクリックします。

以下のようにカラム名を変更し、「実行」をクリックします。

修正前カラム名修正後カラム名
1stFlrSFFlrSF_1st
2ndFlrSFFlrSF_2nd

モデル構築

今回は各特徴量の欠損値補完を行なっていないため、XGBoostを使います。
※XGBoostは安定して良い精度を期待できるのに加えて、欠損値を補完することなくモデルに学習データを入力できます。
「新規ステップの追加」>「XGBoostモデルを構築」>「回帰」をクリックします。

borutaで検定された特徴量のうち、Confirmed, Tentativeと判定された特徴量を使います。
モデルで使用する特徴量を画面でポチポチ選択していくのは面倒なので、「カスタム」タブの「カスタムフォーミュラ」で以下を入力し、「実行」をクリックします。

SalePrice ~ GrLivArea + OverallQual + FlrSF_1st + GarageArea + TotalBsmtSF + LotArea + FlrSF_2nd + BsmtFinSF1 + ExterQual + GarageCars + LotFrontage + TotRmsAbvGrd + GarageType + Fireplaces + FireplaceQu + MSSubClass + YearBuilt + KitchenQual + YearRemodAdd + GarageFinish + MSZoning + OverallCond + GarageYrBlt + FullBath + Neighborhood + OpenPorchSF + CentralAir + MasVnrArea + BsmtQual + BedroomAbvGr + WoodDeckSF + BldgType + HalfBath + BsmtFinType1 + BsmtUnfSF + HouseStyle + BsmtFullBath + Exterior2nd + BsmtExposure + Exterior1st


XGBoostアルゴリズムの学習結果のサマリが出力されます。

推論

構築したモデル(XGBoost)を使ってtestデータフレームに対して推論を実行します。
※testデータフレームの列名をtrainデータフレームと同様に変更しておく必要があります。
「新規ステップの追加」>「他のデータフレームで予測」をクリックします。

「予測対象データフレーム」でtestを選択し、「実行」をクリックします。

testデータフレームを入力とした推論結果が出力されます。
testデータフレームに「Predicted_value」という推論結果が入ったカラムが追加されます。

Kaggleに提出する必要がある「ID」と「SalePrice(Predicted_value)」の2カラムだけを残します。
「新規ステップの追加」>「列を選択」をクリックします。

「ID」と「Predicted_value」を選択し、「実行」をクリックします。

「Predicted_value」はlog1p関数が適用されたままなので、exp関数を適用させて提出できる数値に再変換します。
「数値関数を使う」>「exp」をクリックします。

最後にカラム名「Predicted_value」を「SalePrice」に変更します。
「新規ステップを追加」>「列名を変更」をクリックします。

以下のようにカラム名を変更し、「実行」をクリックします。

修正前カラム名修正後カラム名
Predicted_valueSalePrice


これで、Kaggleに提出するデータフォーマットに整形できました。
このデータをcsvファイルでエクスポートすることで、Kaggle提出できます。

まとめ

KaggleのHouse PriceチュートリアルでExploratoryを使ってみて、Exploratoryがかなり便利なツールだと実感しました。
今回は説明していませんが、Exploratoryはデータ可視化機能も優れているので、機械学習モデルも使えるTableauみたいな感じです。
※一応TableauでもRと連携できますが、結構クセが強いのでオススメしません。
また、Exploratoryは内部でGit連携していて、かつ、分析に使う関数はRで実装されているので、カスタマイズ次第で最新の分析手法を取り入れることもできます。
複雑な前処理やスタッキングなどの高度なモデル構築はできませんが、分析の最初のフェーズで使うツールとしてはかなり有用と思いました。