House Prices — 住宅価格予測(回帰入門)
Kaggle の定番回帰コンペ House Prices を題材に、対数変換から提出までの流れを学びます。
概要#
House Prices - Advanced Regression Techniques
は、住宅の特徴から **販売価格 SalePrice を予測する回帰**コンペです。
約 80 個の特徴量があり、欠損処理や特徴量エンジニアリングの練習に最適です。
データ#
- 目的変数:
SalePrice(販売価格、連続値・右に歪んだ分布) - 代表的な特徴:
OverallQual(品質)、GrLivArea(居住面積)、GarageCars、TotalBsmtSFなど
ベースラインの方針#
目的変数を対数変換(log1p)し、欠損補完とカテゴリ数値化を Pipeline でまとめ、
回帰モデルで予測します。予測後は expm1 で価格スケールへ戻して提出します。
import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
from sklearn.ensemble import GradientBoostingRegressor
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")
y = np.log1p(train["SalePrice"])
X = train.drop(columns=["Id", "SalePrice"])
X_test = test.drop(columns=["Id"])
num = X.select_dtypes("number").columns
cat = X.select_dtypes("object").columns
pre = ColumnTransformer([
("num", SimpleImputer(strategy="median"), num),
("cat", Pipeline([
("imp", SimpleImputer(strategy="most_frequent")),
("oh", OneHotEncoder(handle_unknown="ignore")),
]), cat),
])
model = Pipeline([("pre", pre), ("gbr", GradientBoostingRegressor(random_state=42))])
model.fit(X, y)
pred = np.expm1(model.predict(X_test))
submission = pd.DataFrame({"Id": test["Id"], "SalePrice": pred})
submission.to_csv("submission.csv", index=False)提出#
生成した submission.csv をコンペの Submit Predictions からアップロードすると、
Public リーダーボードにスコアが表示されます。
ヒント
対数変換した目的変数を expm1 で戻し忘れると、スコアが極端に悪化します。提出前に
submission.head() で値の桁を必ず確認しましょう。
学習トラックで詳しく学ぶ#
このコンペの取り組みは、学習トラックで段階的に解説しています。