住宅価格の予想"House-Price-Regression"で感じた事

Kaggle始めたい・・・

でも何から始めればいいのか・・・
とりあえずKaggleのKernelを読みながら、まとめていきます。
Kernelやブログを参考にしながら、
自分でコードを動かしているのですが、感じた事を少しずつ。
最初はKernelを見様見真似で実行していきました。

全体の流れ

  1. データの分析・可視化
  2. 前処理
  3. 特徴量抽出
  4. モデル構築

Kaggleで行う作業を大別するとこんな感じ。
モデル構築は"House-Price-Regression"コンペだと回帰モデル「Lasso」を扱っているケースが多く、


本当に肝となってくるのは、データ分析と前処理。

データ分析

"House-Price-Regression"コンペだと膨大な量の変数が与えられます。
敷地面積の広さやら浴室、フェンスの有無。
現実的に考えると、フェンスの有無よりも敷地面積の方が価格に直結しそうですよね。
これをデータを用いて、実証させなければいけません。
ただこの何気ない「仮説」→「実証」の思考プロセスはKaggleを進める上で非常に重要です。

気に入ったコード

変数間の相関係数を可視化
df_train = pd.read_csv('train.csv')
corr = df_train.corr()
corr = corr.nlargest(k, 'SalePrice')['SalePrice'].index

#[[a1,a2,a3],[b1,b2,b3]] → [[a1,b1],[a2,b2],[a3,b3]]
#np.corrcoefは引数[[a1,b1],[a2,b2],[a3,b3]]

cm = np.corrcoef(df_train[corr].values.T)

sns.set(font_scale=1.25)
sns.heatmap(cm, cbar=False, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=corr.values, xticklabels=corr.values)
plt.show()

f:id:electric-city:20200319230845p:plain:h400:w500
相関係数の可視化

これで目的変数となり得るSalePrice(価格)と説明変数の相関性が可視化されます。

外れ値の確認も可能
top10list = list(corr)
sns.set()
sns.pairplot(df_train[top10list], height=1.5)
plt.show()

f:id:electric-city:20200319232019p:plain:h400:w500
変数間の相関性を可視化

外れ値を確認すると、
モデルと評価方法次第では、外れ値の影響を受ける場合もあるので、
この時点で削除しておくと精度が向上するかもしれません。

前処理

欠損値

どうやら欠損値にもいくつか種類があるようです。

  • 値が存在しない
  • 欠損値そのものが意味のある情報となっている
  • 値を取得できていない

本コンペではNaNであったとしても、その値には意味があります。
そのため欠損値だからと言って、不用意に削除するわけにはいきません。

本コンペでは
変数がfloat型の場合、欠損値には0.0
変数がobject型の場合、欠損値にはNAで補ってやります。

ケース次第では、中央値・平均値・最頻値や
欠損値を他変数から補う事も可能なようです。

参考サイト

以下のサイトで本コンペの流れが詳しく説明されています。

yolo-kiyoshi.com