다양한 회귀 모델을 학습하고 성능을 비교 분석하여 최적의 예측 모델을 도출했습니다.
데이터 엔지니어링을 통해 정제된 데이터셋을 기반으로, 댐 유입량이라는 복잡한 시계열 데이터를 가장 정확하게 예측할 수 있는 모델을 찾는 것이 핵심 과제였습니다. 다양한 머신러닝 및 딥러닝 모델의 성능을 객관적으로 비교하고, 과적합을 방지하면서 최상의 예측 성능을 달성하기 위한 체계적인 검증과 최적화 과정이 필요했습니다.
트리 기반의 강력한 머신러닝 모델(XGBoost, LightGBM)과 시계열 데이터에 특화된 딥러닝 모델(LSTM)을 모두 실험하여 가장 적합한 모델을 찾고자 했습니다. 모델의 일반화 성능을 높이기 위해 홍수 사상을 기준으로 한 GroupKFold 교차 검증을 수행했으며, Bayesian Optimization을 통해 각 모델의 하이퍼파라미터를 최적화했습니다. 최종적으로는 개별 모델의 예측을 결합하는 Stacking 앙상블 모델을 구축하여 성능을 극대화했습니다.
[그림 6] 머신러닝 모델링 및 앙상블 파이프라인
각 홍수 사상은 독립적인 이벤트이므로, 동일 사상의 데이터가 훈련셋과 검증셋에 섞이지 않도록 GroupKFold를 적용했습니다. 각 모델의 예측 결과를 새로운 피처로 사용하여 최종 모델(Meta-learner)이 학습하는 Stacking 기법을 통해, 단일 모델보다 더 안정적이고 정교한 예측을 할 수 있었습니다.
# 예시: Scikit-learn을 활용한 Stacking 앙상블 모델 구성from sklearn.ensemble import StackingRegressorfrom sklearn.linear_model import LinearRegressionfrom xgboost import XGBRegressorfrom 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)을 효과적으로 예측하여, 기존 물리 모델의 한계를 데이터 기반 모델로 극복할 수 있는 가능성을 입증했습니다. 이 프로젝트 경험을 통해 머신러닝 파이프라인 설계 및 성능 최적화에 대한 실전 역량을 확보했습니다.