다양한 소스로부터 시계열 데이터를 수집 및 정제하고, 모델 학습에 적합한 파생 변수를 생성했습니다.
프로젝트의 초기 데이터는 홍수 사상(event)을 기준으로 수집되어 데이터의 양이 부족했고, 특정 홍수 사상(1번)의 유입량은 다른 데이터에 비해 현저히 높은 이상치(Outlier)를 포함하고 있었습니다. 또한, 물리 기반 모델의 한계를 극복하기 위해서는 기상 데이터와 같은 외부 요인을 통합하여 모델의 설명력을 높여야 했습니다.
데이터의 부족 문제를 해결하기 위해 기상청의 외부 데이터를 통합하고, 시계열 데이터의 특성을 최대한 활용하기 위한 파생 변수를 생성했습니다. 이상치는 통계적 검토를 통해 제거하고, Box-Cox 변환을 통해 데이터의 정규성을 확보했습니다.
[그림 1] 데이터 엔지니어링 처리 흐름도
Pandas를 사용하여 두 데이터를 일시 기준으로 병합하고, 통계적으로 유의미한 차이를 보인 홍수사상 1번 데이터를 이상치로 판단하여 제거했습니다. 이후, rolling과 difference 기법을 적용하여 과거 시점의 데이터를 현재 데이터에 포함시키는 파생 변수를 생성함으로써 모델이 시계열 패턴을 더 잘 학습하도록 설계했습니다.
# 예시: Pandas를 활용한 Rolling Feature 생성import pandas as pd# '7_유역평균강수' 컬럼을 1, 2, 3시간 전으로 시프트하여 새로운 피처 생성for i in range(1, 4):data[f'7_avg_rain_shift_{i}'] = data['7_유역평균강수'].shift(i)# 1시간 전 데이터와의 차이를 계산하여 변화량 피처 생성data['7_avg_rain_diff_1'] = data['7_유역평균강수'].diff(periods=1)# 결측치 처리 (예: 0으로 채우기)data.fillna(0, inplace=True)
체계적인 데이터 엔지니어링을 통해 불완전하고 노이즈가 많았던 원시 데이터를 머신러닝 모델 학습에 적합한 고품질의 데이터셋으로 변환했습니다. 특히, 시계열 특성을 반영한 파생 변수들은 후속 모델링 단계에서 예측 성능을 크게 향상시키는 데 결정적인 역할을 했습니다.