콘텐츠로 이동

주택 가격 예측

Kaggle House Prices 데이터 기반 회귀 분석 프로젝트


개요

Kaggle의 House Prices 데이터셋을 활용한 주택 가격 예측 프로젝트. 다양한 회귀 모델을 비교하고 앙상블 기법을 적용하여 예측 성능을 최적화했다.


문제정의

주택 가격은 다양한 특성(위치, 면적, 연식 등)에 의해 결정된다.

핵심 질문: 1. 어떤 특성이 주택 가격에 가장 큰 영향을 미치는가? 2. 범주형 변수와 가격 간의 상관관계는? 3. 어떤 모델이 가장 좋은 예측 성능을 보이는가?


데이터

데이터셋 구조

구분 설명
Train 1,460건
Test 1,459건
Features 79개 (수치형 + 범주형)
Target SalePrice (주택 판매가격)

주요 특성

특성 타입 설명
LotArea 수치형 부지 면적
OverallQual 수치형 전반적 품질 (1-10)
YearBuilt 수치형 건축 연도
TotalBsmtSF 수치형 지하실 면적
GrLivArea 수치형 지상 생활 면적
Neighborhood 범주형 동네

분석/모델링

1. 범주형 변수 상관관계 분석

# 원-핫 인코딩 후 상관관계 계산
correlation_dict = {}
for col in categorical_cols:
    dummies = pd.get_dummies(df[col], prefix=col)
    for dummy_col in dummies.columns:
        corr = dummies[dummy_col].corr(df['SalePrice'])
        correlation_dict[dummy_col] = corr

2. 이상치 처리

# train 데이터의 극단치를 test 평균값으로 대체
for col in ['LotFrontage', 'LotArea']:
    mask = train[col] > test[col].max()
    train.loc[mask, col] = test[col].mean()

3. 모델 학습

Lasso Regression

from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.001)
lasso.fit(X_train, y_train)

Gradient Boosting

from sklearn.ensemble import GradientBoostingRegressor
gbm = GradientBoostingRegressor(n_estimators=100, max_depth=5)
gbm.fit(X_train, y_train)


결과

모델별 예측 성능

Lasso 회귀 성능

Lasso 회귀 모델의 실제값 vs 예측값 - 대각선에 점들이 밀집

Gradient Boosting 성능

Gradient Boosting 모델의 실제값 vs 예측값

성능 비교

모델 RMSE R2 Score
Linear Regression 0.142 0.89
Lasso 0.128 0.91
Ridge 0.130 0.90
Gradient Boosting 0.118 0.93
XGBoost 0.115 0.94

배운 점

  1. 특성 중요도: OverallQual, GrLivArea가 가격에 가장 큰 영향
  2. 이상치 처리: train/test 분포 차이를 고려한 처리 필요
  3. 앙상블 효과: 단일 모델보다 앙상블(Stacking)이 더 좋은 성능

기술 스택

분류 도구
언어 Python
분석 pandas, numpy
모델링 scikit-learn, XGBoost, LightGBM
시각화 matplotlib, seaborn

관련 문서