2026. 3. 9. 23:24ㆍAI/ML
LightGBM을 사용한 부동산 실거래가 예측을 위한 개발 과정을 담았습니다. 대략적인 순서는 모델 선정,학습 데이터 전처리, 테스트 모델 개발, 변수 및 파라미터 값 조정 순으로 진행해보려 합니다.
이번 글은 앞선 전처리 글에 이어지는 테스트 모델링 · 하이퍼파라미터 튜닝 · Expanding Window · SHAP 분석까지 포함한 글입니다.
LightGBM 부동산 가격 예측 – 모델링, Optuna 튜닝, Expanding Window 검증, SHAP 해석
이전 글에서는 전처리 전략을 다뤘고 그에 이어, 이번 글에서는 다음 내용을 정리합니다.
- 왜 KFold가 아닌 Expanding Window인가?
- Optuna를 활용한 하이퍼파라미터 탐색
- 최종 테스트 성능 평가
- 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%
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
이 그래프를 보면:
- 비선형 구간
- 특정 임계값
- 상호작용 효과
를 직접 확인할 수 있습니다.

9. 이 접근 방식의 강점
이번 모델링의 핵심 강점은 다음과 같습니다:
- Random Split 대신 Expanding Window
- 연도별 평균 MAPE 기반 Optuna 최적화
- Early Stopping 적용
- RMSE, MAPE 이외에 Hit@10%, Hit@20% 실무형 지표 도입
- SHAP 기반 해석 가능 모델 구축
단순히 RMSE, MAPE 가 낮은 모델이 아니라 시간에 대해 안정적이고, 해석 가능한 모델을 만드는 것이 목표였습니다.
'AI > ML' 카테고리의 다른 글
| LightGBM(LGBM)을 사용한 부동산 가격 예측 - 2(전처리) (0) | 2026.03.06 |
|---|---|
| LightGBM(LGBM)을 사용한 부동산 가격 예측 - 1(모델 선정) (0) | 2026.03.04 |