【House Prices】問題理解と EDA
House Prices 回帰コンペの課題を理解し、歪んだ目的変数を対数変換する理由を学びます。
課題を理解する#
House Prices は、住宅の特徴から **販売価格 SalePrice を予測する回帰**コンペです。
評価指標は 対数を取った価格の RMSE(実質 RMSLE)で、
比率の誤差が重視されます。提出は Id と SalePrice の 2 列 CSV です。
import pandas as pd
train = pd.read_csv("/kaggle/input/house-prices-advanced-regression-techniques/train.csv")
test = pd.read_csv("/kaggle/input/house-prices-advanced-regression-techniques/test.csv")
train.shape # (1460, 81) 特徴量が多い目的変数の歪み#
価格データは高額側に裾を引く(右に歪んだ)分布になりがちです。
train["SalePrice"].skew() # 大きな正の歪度評価指標が対数ベースであることとも整合するため、目的変数を対数変換して扱います。
import numpy as np
y = np.log1p(train["SalePrice"]) # log(1 + x) で変換対数変換すると分布が左右対称に近づき、線形モデルが扱いやすくなります。
予測後は np.expm1 で元のスケールに戻して提出します。
注意
log1p で学習したのに、予測値をそのまま提出すると桁が合いません。 提出前に必ず expm1
で逆変換することを忘れないでください。
特徴と欠損の把握#
# 数値特徴と SalePrice の相関上位
num = train.select_dtypes("number")
num.corr(numeric_only=True)["SalePrice"].sort_values(ascending=False).head(8)
# OverallQual, GrLivArea, GarageCars などが上位
# 欠損が多い列
train.isnull().mean().sort_values(ascending=False).head(8)OverallQual(全体の品質)や GrLivArea(居住面積)が価格に強く効くと分かります。
理解度チェック#
次のステップ#
次は欠損処理・特徴量の数値化・回帰モデルで提出まで通します。