댐 유량 예측 모델

Machine Learning Modeling

다양한 회귀 모델을 학습하고 성능을 비교 분석하여 최적의 예측 모델을 도출했습니다.

PythonScikit-learnXGBoostLightGBMTensorFlow

핵심 기여 사항

  • XGBoost, LightGBM, LSTM 등 모델 학습 및 교차 검증 기반 튜닝
  • Stacking 앙상블 및 Bayesian Optimization 전략을 적용하여 예측 성능 극대화

도전 과제: 최적의 시계열 예측 모델 선정 및 성능 극대화

데이터 엔지니어링을 통해 정제된 데이터셋을 기반으로, 댐 유입량이라는 복잡한 시계열 데이터를 가장 정확하게 예측할 수 있는 모델을 찾는 것이 핵심 과제였습니다. 다양한 머신러닝 및 딥러닝 모델의 성능을 객관적으로 비교하고, 과적합을 방지하면서 최상의 예측 성능을 달성하기 위한 체계적인 검증과 최적화 과정이 필요했습니다.

해결 전략: 다중 모델링, 교차 검증 및 앙상블 기법 적용

트리 기반의 강력한 머신러닝 모델(XGBoost, LightGBM)과 시계열 데이터에 특화된 딥러닝 모델(LSTM)을 모두 실험하여 가장 적합한 모델을 찾고자 했습니다. 모델의 일반화 성능을 높이기 위해 홍수 사상을 기준으로 한 GroupKFold 교차 검증을 수행했으며, Bayesian Optimization을 통해 각 모델의 하이퍼파라미터를 최적화했습니다. 최종적으로는 개별 모델의 예측을 결합하는 Stacking 앙상블 모델을 구축하여 성능을 극대화했습니다.

다이어그램을 불러오는 중...

[그림 6] 머신러닝 모델링 및 앙상블 파이프라인

각 홍수 사상은 독립적인 이벤트이므로, 동일 사상의 데이터가 훈련셋과 검증셋에 섞이지 않도록 GroupKFold를 적용했습니다. 각 모델의 예측 결과를 새로운 피처로 사용하여 최종 모델(Meta-learner)이 학습하는 Stacking 기법을 통해, 단일 모델보다 더 안정적이고 정교한 예측을 할 수 있었습니다.

# 예시: Scikit-learn을 활용한 Stacking 앙상블 모델 구성
from sklearn.ensemble import StackingRegressor
from sklearn.linear_model import LinearRegression
from xgboost import XGBRegressor
from lightgbm import LGBMRegressor
# 1. 개별 모델(Base Models) 정의
estimators = [
('xgb', XGBRegressor(random_state=42)),
('lgbm', LGBMRegressor(random_state=42))
]
# 2. Stacking 모델 구성
# 개별 모델의 예측을 취합하여 최종 예측을 할 모델(Meta-Model)로 LinearRegression 사용
stacking_model = StackingRegressor(
estimators=estimators,
final_estimator=LinearRegression(),
cv=5 # 5-Fold 교차 검증
)
# 3. 모델 학습
stacking_model.fit(X_train, y_train)

결과 및 성과

다양한 모델을 RMSE와 MAPE 기준으로 평가한 결과, XGBoost 모델이 158.09의 가장 낮은 RMSE를 기록하며 최적 모델로 선정되었습니다. 이 모델은 특히 홍수 예측에서 가장 중요한 최대 유입량(Peak Inflow)을 효과적으로 예측하여, 기존 물리 모델의 한계를 데이터 기반 모델로 극복할 수 있는 가능성을 입증했습니다. 이 프로젝트 경험을 통해 머신러닝 파이프라인 설계 및 성능 최적화에 대한 실전 역량을 확보했습니다.