LightGBM(LGBM)을 사용한 부동산 가격 예측 - 3(테스트 모델 개발)

2026. 3. 9. 23:24AI/ML

LightGBM을 사용한 부동산 실거래가 예측을 위한 개발 과정을 담았습니다. 대략적인 순서는 모델 선정,학습 데이터 전처리, 테스트 모델 개발, 변수 및 파라미터 값 조정 순으로 진행해보려 합니다.
이번 글은 앞선 전처리 글에 이어지는 테스트 모델링 · 하이퍼파라미터 튜닝 · Expanding Window · SHAP 분석까지 포함한 글입니다.

LightGBM 부동산 가격 예측 – 모델링, Optuna 튜닝, Expanding Window 검증, SHAP 해석

이전 글에서는 전처리 전략을 다뤘고 그에 이어, 이번 글에서는 다음 내용을 정리합니다.

  1. 왜 KFold가 아닌 Expanding Window인가?
  2. Optuna를 활용한 하이퍼파라미터 탐색
  3. 최종 테스트 성능 평가
  4. SHAP 기반 모델 해석

1. 왜 KFold가 아니라 Expanding Window인가?

부동산 가격은 명확한 시계열 데이터입니다.
전체 연도를 다 넣어서 바로 2024 예측하면 모델 평가 안정성이 떨어질 수 있으니 연도를 나눠서 각각 테스트 후 평균을 내야 올바른 평가를 도출하는 과정입니다. 

문제점(예시)

 

  • 2024는 아직 실제값을 모름 (진짜 예측 상황)
  • 2024에 특이 이벤트가 있으면?
    • 금리 급등
    • 정책 변화
    • 거래량 급감
  • 단 한 번의 테스트 결과에 의존하게 됨

 

따라서 우리는 Expanding Window 방식을 사용했습니다.

검증 방식

  • 2015~2019 → 2020 검증
  • 2015~2020 → 2021 검증
  • 2015~2021 → 2022 검증
  • ...

즉, 시간이 지날수록 학습 데이터가 확장됩니다.

for valid_year in range(min_year + 5, max_year + 1):
    train_mask = df_train["deal_year"] < valid_year
    valid_mask = df_train["deal_year"] == valid_year
 

이 방식은 실제 서비스 상황과 가장 유사합니다.

"과거 데이터로 미래를 예측한다"

 


2. Optuna를 활용한 하이퍼파라미터 최적화

LightGBM은 하이퍼파라미터에 매우 민감합니다.

이번 프로젝트에서는 Optuna를 활용해 자동 탐색을 진행했습니다.

탐색한 주요 파라미터

 
params = {
    "objective": "regression",
    "metric": "rmse",
    "boosting_type": "gbdt",
    "learning_rate": trial.suggest_float("learning_rate", 0.01, 0.03, log=True),
    "num_leaves": trial.suggest_int("num_leaves", 10, 30),
    "max_depth": trial.suggest_int("max_depth", 3, 5),
    "min_child_samples": trial.suggest_int("min_child_samples", 80, 200),
    "subsample": trial.suggest_float("subsample", 0.7, 0.9),
    "colsample_bytree": trial.suggest_float("colsample_bytree", 0.7, 0.9),
    "reg_alpha": trial.suggest_float("reg_alpha", 0.01, 5.0, log=True),
    "reg_lambda": trial.suggest_float("reg_lambda", 0.1, 10.0, log=True),
    "seed": 42,
    "verbose": -1,
}

목적 함수

  • 각 연도별 validation MAPE 계산
  • 모든 연도의 평균 MAPE 최소화

이 방식의 장점:

  • 특정 연도에만 최적화되지 않음
  • 전체 시계열 구간에서 안정적인 모델 탐색 가능

3. Early Stopping 적용

각 fold에 대해서

model = lgb.train(
    params,
    train_data,
    num_boost_round=3000,
    valid_sets=[valid_data],
    callbacks=[lgb.early_stopping(100, verbose=False)],
)
  • 100 round 개선 없으면 중단
  • 과적합 방지
  • 최적 iteration 기록

그리고 각 fold의 best_iteration 평균을 최종 모델에 사용했습니다.

이 방식은 고정된 3000 round 학습보다 훨씬 안정적입니다.


4. 최종 Test 성능 평가

최종 모델은 전체 train 데이터로 재학습 후
hold-out test 데이터에서 평가했습니다.

평가 지표:

  • RMSE
  • MAE
  • MAPE
  • R2
  • Hit@10%
  • Hit@20%
파이썬의 sklearn.metric 라이브러리를 사용하면 지표 계산이 안정적입니다.
y_pred = np.expm1(final_model.predict(X_test))
y_true = y_test

error_rate = np.abs(y_true - y_pred) / np.clip(y_true, 1e-8, None)
rmse = root_mean_squared_error(y_true, y_pred)
mae = mean_absolute_error(y_true, y_pred)
mape = mean_absolute_percentage_error(y_true, y_pred)
hit10 = np.mean(np.abs(y_true - y_pred) / y_true < 0.10)
hit20 = np.mean(np.abs(y_true - y_pred) / y_true < 0.20)
r2 = r2_score(y_true, y_pred)

이 지표는 실무적으로 매우 중요합니다.

RMSE : 5727369.9045
MAE  : 2442274.8736
MAPE : 0.1849
Hit@10% : 0.3750
Hit@20% : 0.6689
R2 : 0.6145
최소 오차율: 2.7603220665847956e-05
최대 오차율: 1.6388146238496544
평균 오차율: 0.1849333101130317

예를 들어:

  • 10% 오차 이내 예측 비율
  • 20% 오차 이내 예측 비율

단순 RMSE보다 현실적인 해석이 가능합니다.


5. 예측 시각화

1. Actual vs Predicted

대각선에 가까울수록 좋은 모델입니다.

2. Error Distribution

  • 오차가 정규에 가까운지
  • 한쪽으로 치우쳤는지 확인

3. Predicted vs Error Rate

  • 고가 부동산에서 오차율이 증가하는지 확인 가능
  • 단순 성능 숫자보다 훨씬 많은 인사이트를 줍니다.


6. LightGBM 내부 중요도

LightGBM plot importance

Split 기준 / Gain 기준 중요도는 빠르게 참고하기 좋습니다.

하지만 이 방식에는 한계가 있습니다:

  • 변수 간 상호작용 반영 어려움
  • 실제 예측 기여도와 다를 수 있음

그래서 SHAP 분석을 진행했습니다.


7. SHAP 기반 모델 해석

모델 해석에는 SHAP을 사용했습니다.

1. SHAP Summary Plot

  • 각 변수의 전체 영향력
  • 값이 증가할 때 가격이 오르는지/내리는지
  • 분포 특성 확인 가능

이 플롯은 모델을 "블랙박스"에서 꺼내주는 핵심 도구입니다.

2. SHAP Global Feature Importance

평균 절대 SHAP 값 기준으로 정렬하면 실제 예측 기여도가 높은 변수 확인 가능.

LightGBM 내부 중요도와 비교해보는 것도 매우 의미 있습니다.

3. SHAP Dependence Plot

특정 변수와 가격 관계를 직접 시각화합니다.

예:

  • latest_official_land_price
  • building_age
  • total_area
  • loan_rate
  • office_index

이 그래프를 보면:

  • 비선형 구간
  • 특정 임계값
  • 상호작용 효과

를 직접 확인할 수 있습니다.

연면적 상호작용 변수와 SHAP value 관계


9. 이 접근 방식의 강점

이번 모델링의 핵심 강점은 다음과 같습니다:

  1. Random Split 대신 Expanding Window
  2. 연도별 평균 MAPE 기반 Optuna 최적화
  3. Early Stopping 적용
  4. RMSE, MAPE 이외에 Hit@10%, Hit@20% 실무형 지표 도입
  5. SHAP 기반 해석 가능 모델 구축

단순히 RMSE, MAPE 가 낮은 모델이 아니라 시간에 대해 안정적이고, 해석 가능한 모델을 만드는 것이 목표였습니다.