【House Price】住宅価格予測コンペ前処理編

Kaggle

概要

Kaggleのチュートリアルの1つ、house priceのコンペに参加しました。

パラメータの加工に時間かかったので、前処理編として記事にします。

コンペについて

house priceのコンペは名前の通り、住宅価格を予想するコンペになってます。

価格の予測となるので、タイタニックやMNISTのようなクラスを予想する分類問題(classification)ではなく、数値を予想する回帰問題(regression)となるのがこのコンペの特徴です。

コンペのURLは下記になります。

House Prices - Advanced Regression Techniques | Kaggle
Predict sales prices and practice feature engineering, RFs, and gradient boosting

ということでまずはデータの中身を確認していきます。

前処理

データ確認

まずはデータの取得と中身を確認していきます。

最初に気になるのは、カラムが81個存在することです。

全てのデータを特徴量として使うのはしんどそうです。中身を確認して内容を精査していきます。

データの内容も欠損値が多そうですね。欠損値が多いものは特徴量から省いてしまおうかと思いましたが、まずは欠損値を含むデータとデータの型の確認します。

object型、float,int型など、数値、名義どちらのデータでも欠損値が含まれてます。

これは分けて考える必要がありそうですね。

PoolQC、Fence、MiscFeatureなどのObject変数のデータに欠損値が多いので、まずはobject変数のデータから加工していきましょう。

Object変数の加工

このコンペにはdata_description.txtというデータの内容を説明するドキュメントが添付されており、データの意味について理解することができます。

確認してみると欠損値が多かったPoolQCは備え付けのプールのクオリティを表しており欠損値であるNAはNo Pool(プールのない物件)と記載されていました。

つまり、欠損値のデータ自体に意味があると考えられるので、むやみにdropしてはいけないデータだと考えられます。

欠損値が多かったパラメータについて、欠損値をダミーで埋めたうえで、価格との関係を見てみましょう。

PoolQC,Alley,FenceともにNoDataが特徴のあるデータになってます。

Alley(路地)、Fence(フェンス)もデータの内容を確認しましたが、同様に欠損値そのものに意味があるデータでした。

そのためこのコンペでは欠損値自体もデータとして扱うことにしましょう。

obfect変数で、欠損値を含むカラムをNoDataで補間していきます。

数値データの加工

object変数の処理は終了したのでint,float型の確認をしていきます。

object変数の欠損値は補間済みなので、欠損値 = 数値データ と考えられます。

説明変数ごとの欠損値の数をグラフ化してみます。

教師データの方は欠損値を含む数値データのカラムが3件、テストデータの方は9件程度見られました。

欠損値が多かった、LotFrontageとGarageYtBltについてですが、

GarageYtBltは、ガレージの築年数。LotFrontageはpropety(資産?)までの直線距離というデータとなっています。

どちらも欠損値にも意味がありそうなデータだと思いましたが、変に補間するとややこしいので省いていきます。

残りの欠損値を含むカラムについては、全部見るの面倒なので中央値で補間することにします。

データを確認したところ問題なだそうだったので、説明変数の前処理は終了です。

目的変数の分布を確認

最後に目的変数の分布を確認しておきます。

やや右側に尾を引くような分布になっており、きれいな正規分布とはなってません。

回帰分析をする上では正規分布にならなければ精度が下がるそうなので、対数変換を利用して正規分布に変換します。

正規分布に変換できました。これで前処理終了です。

次したい事

今回は説明変数が多かったため、前処理だけの記事となりましたが、次回モデル作成までやっていきます。

コメント

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