์ด ํ๋ก์ ํธ๋ Kaggle์ House Prices - Advanced Regression Techniques ๋ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํ๋์์ต๋๋ค. ๋ชฉํ๋ ๋ค์ํ ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฒ์ ํ์ฉํ์ฌ ์ฃผํ ๊ฐ๊ฒฉ์ ์์ธกํ๋ ๋ชจ๋ธ์ ์ต์ ํํ๋ ๊ฒ์ ๋๋ค.
์ด ํ๋ก์ ํธ์์๋ ๋ ๊ฐ์ง ๋
ธํธ๋ถ(house_price.ipynb
, house_price_add.ipynb
)์ ํ์ฉํ์ฌ ๋ชจ๋ธ์ ๊ฐ์ ํ์์ต๋๋ค.
house_price.ipynb
: ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋ฐ ๋ชจ๋ธ๋ง ์ํ (Baseline Model)house_price_add.ipynb
: Feature Engineering ์ถ๊ฐ, ๋ค์ค๊ณต์ ์ฑ ํด๊ฒฐ, XGBoost ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋ ์ ์ฉ
- train.csv: ๋ชจ๋ธ ํ์ต์ ์ํ ๋ฐ์ดํฐ์ (1460๊ฐ ์ํ)
- test.csv: ์ฃผํ ๊ฐ๊ฒฉ ์์ธก์ ์ํ ํ ์คํธ ๋ฐ์ดํฐ
- sample_submission.csv: Kaggle ์ ์ถ ํ์ ์์
GarageType
,BsmtQual
๋ฑ ๋ฒ์ฃผํ ๋ณ์ โ 'None'์ผ๋ก ๋์ฒดLotFrontage
,GarageYrBlt
,MasVnrArea
๋ฑ ์์นํ ๋ณ์ โ ์ค์๊ฐ(median)์ผ๋ก ๋์ฒดElectrical
๋ณ์ ์ต๋น๊ฐ(mode)์ผ๋ก ๋์ฒด- ๋ถํ์ํ ๋ณ์ ์ ๊ฑฐ (
PoolQC
,MiscFeature
,Alley
,Fence
)
BuildingAge
์์ฑ (ํ์ฌ ์ฐ๋ -YearBuilt
)Remodeled
๋ณ์ ์ถ๊ฐ (YearBuilt
vsYearRemodAdd
)- ๋ก๊ทธ ๋ณํ ์ ์ฉ (
Log_SalePrice
) - VIF(๋ค์ค๊ณต์ ์ฑ) ์ ๊ฑฐ ๋ฐ PCA ์ ์ฉ (
TotalLivingArea
โPCA_LivingArea
) - ์ด์์น ์ ๊ฑฐ (IQR์ ํ์ฉํ์ฌ ๊ทน๋จ๊ฐ ์ ์ธ)
- Linear Regression
- RandomForest Regressor
- XGBoost Regressor
- Feature Engineering ์ ์ฉ ํ ์ฌํ์ต
- ๊ต์ฐจ ๊ฒ์ฆ ์ ์ฉ (K-Fold)๋ก ๋ชจ๋ธ ํ๊ฐ
- XGBoost ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋ ์ถ๊ฐ ์ ์ฉ
- GridSearchCV๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ํ์ดํผํ๋ผ๋ฏธํฐ ํ์
- ์ต์ ์ ํ์ดํผํ๋ผ๋ฏธํฐ ์ ์ฉ ํ ๋ชจ๋ธ ์ฌํ์ต
param_grid = {
"n_estimators": [300, 500, 1000],
"learning_rate": [0.01, 0.05, 0.1],
"max_depth": [3, 6, 9],
"subsample": [0.6, 0.8, 1.0],
"colsample_bytree": [0.6, 0.8, 1.0]
}
- RMSE(Log(SalePrice)) ๊ธฐ์ค ์ฑ๋ฅ ๋น๊ต| Model | RMSE | | ----------------- | ------------------ | | Linear Regression | 0.155 | | Random Forest | 0.139 | | XGBoost | 0.129 | | Tuned XGBoost | 0.120 โ |
def create_submission(model, X_test, test_df, model_name):
y_pred = model.predict(X_test)
y_pred = np.expm1(y_pred) # ๋ก๊ทธ ๋ณํ ๋ณต์
submission = pd.DataFrame({"Id": test_df["Id"], "SalePrice": y_pred})
file_name = f"submission_{model_name}.csv"
submission.to_csv(file_name, index=False)
print(f"โ
{model_name} ์ ์ถ ํ์ผ ์ ์ฅ ์๋ฃ: {file_name}")
create_submission(best_xgb_model, X_test_preprocessed, test_df, "Tuned_XGBoost")
submission_Tuned_XGBoost.csv
ํ์ผ์ Kaggle์ ์ ๋ก๋ํ์ฌ ํ๊ฐ ๊ฒฐ๊ณผ ํ์ธ
-
LinearRegression, RandomForestRegressor, XGBoost ํ๊ท ๋ชจ๋ธ RMSE ๋น๊ต ํ ์ ์ผ ์ข์ ๋ชจ๋ธ ์ ์ถ
-
ํ๊ท๋ชจ๋ธ+์ ๋ณ์ ์ถ๊ฐํ๊ณ ํ์ดํผํ๋ผ๋ฏธํฐํ๋ (VIF์ค์ด๋ฉด ์คํ๋ ค ๋ชจ๋ธ ์ ํ๋๊ฐ ๋จ์ด์ ธ์ ๋ฐ๋ก ์ก์ง ์์)
pip install pandas numpy scikit-learn xgboost seaborn matplotlib
jupyter notebook
house_price.ipynb
์คํ โ Baseline ๋ชจ๋ธ ํ๊ฐhouse_price_add.ipynb
์คํ โ Feature Engineering + XGBoost ํ๋ ์ ์ฉ- ์ต์ ํ๋ ๋ชจ๋ธ ํ์ต ํ Kaggle์ ์ ์ถ