住宅価格の予想"House-Price-Regression"で感じた事
Kaggle始めたい・・・
でも何から始めればいいのか・・・
とりあえずKaggleのKernelを読みながら、まとめていきます。
Kernelやブログを参考にしながら、
自分でコードを動かしているのですが、感じた事を少しずつ。
最初はKernelを見様見真似で実行していきました。
全体の流れ
- データの分析・可視化
- 前処理
- 特徴量抽出
- モデル構築
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()
これで目的変数となり得るSalePrice(価格)と説明変数の相関性が可視化されます。
外れ値の確認も可能
top10list = list(corr) sns.set() sns.pairplot(df_train[top10list], height=1.5) plt.show()
外れ値を確認すると、
モデルと評価方法次第では、外れ値の影響を受ける場合もあるので、
この時点で削除しておくと精度が向上するかもしれません。
前処理
欠損値
どうやら欠損値にもいくつか種類があるようです。
- 値が存在しない
- 欠損値そのものが意味のある情報となっている
- 値を取得できていない
本コンペではNaNであったとしても、その値には意味があります。
そのため欠損値だからと言って、不用意に削除するわけにはいきません。
本コンペでは
変数がfloat型の場合、欠損値には0.0
変数がobject型の場合、欠損値にはNAで補ってやります。
ケース次第では、中央値・平均値・最頻値や
欠損値を他変数から補う事も可能なようです。