[공모전] 「2024 날씨 빅데이터 콘테스트」

이 프로젝트는 기상 데이터를 통합, 전처리, 분석 및 모델링하여 기상 변화를 예측하는 데 중점을 둔다.
1. 데이터 로드
1.1 파일 경로 설정
프로젝트에서 사용할 다양한 CSV 파일의 경로를 설정하였다. 이 파일들은 각각 적산온도, 기온, 바람, 습도, 일조일사, 강수량 데이터를 포함하고 있다.
1.2 데이터 로드
각 파일을 Pandas 라이브러리를 사용하여 데이터프레임으로 불러왔다. 이 과정에서 각 파일의 인코딩 방식을 'cp949'로 설정하고, 불필요한 헤더 행을 건너뛰도록 설정하였다.
2. 데이터 전처리
2.1 열 이름 변경 및 날짜 형식 변환
데이터의 일관성을 위해 열 이름을 변경하고, 날짜 형식을 통일하였다. 예를 들어, '년도' 열을 '날짜'로 변경하고, 문자열 형태의 날짜를 Pandas의 to_datetime 함수를 사용하여 datetime 형식으로 변환하였다.
2.2 결측치 처리
각 데이터셋에서 결측치를 확인하고 적절히 처리하였다. 예를 들어, 강수량 데이터의 결측치는 0으로 채우고, 다른 수치형 데이터의 결측치는 앞뒤 값의 평균으로 대체하였다. 이를 통해 데이터의 일관성을 유지하고 분석의 정확성을 높였다.
3. 데이터 분석 및 시각화
3.1 기초 통계 분석
각 데이터셋에 대해 기초 통계량을 계산하였다. 이를 통해 데이터의 평균, 표준편차, 최소값, 최대값 등을 파악할 수 있었다. 또한, 결측치의 개수를 확인하여 데이터의 완전성을 평가하였다.
3.2 히스토그램 및 시계열 그래프
데이터의 분포와 시간에 따른 변화를 시각적으로 확인하기 위해 히스토그램과 시계열 그래프를 작성하였다. 히스토그램을 통해 각 변수의 분포를 확인하고, 시계열 그래프를 통해 시간에 따른 변화 패턴을 분석하였다.
3.3 상자 그림 및 산점도 행렬
상자 그림을 통해 데이터의 중앙값, 사분위수, 이상치를 시각화하였다. 산점도 행렬을 통해 변수 간의 상관관계를 시각적으로 확인하고, 데이터 간의 관계를 파악하였다.
4. 피처 엔지니어링
4.1 새로운 변수 생성
데이터의 분석을 돕기 위해 새로운 변수를 생성하였다. 예를 들어, 최고기온과 최저기온의 차이를 계산하여 온도 변동성을 나타내는 변수를 추가하였다. 또한, 평균풍속 대비 최대풍속의 비율을 계산하여 바람의 강도 변동을 파악할 수 있는 변수를 생성하였다.
4.2 계절성 변수 생성
날짜 열을 사용하여 각 행이 어느 계절에 속하는지를 나타내는 새로운 이진 변수를 생성하였다. 예를 들어, 봄, 여름, 가을, 겨울을 나타내는 변수를 추가하여 계절별 패턴을 분석할 수 있도록 하였다.
4.3 습도의 일일 변동성
평균 습도와 최저 습도의 차이를 계산하여 습도 변동성을 나타내는 변수를 추가하였다. 이는 날씨 변동성의 또 다른 측면을 분석하는 데 도움이 된다.
5. 머신러닝 및 딥러닝 모델 구축
5.1 데이터 분할 및 표준화
모델 학습을 위해 데이터를 학습용과 테스트용으로 분할하였다. 또한, 모델의 성능을 향상시키기 위해 데이터의 스케일을 표준화하였다.
5.2 모델 구성
TensorFlow와 Keras 라이브러리를 사용하여 신경망 모델을 구성하였다. 모델은 여러 개의 은닉층과 출력층으로 구성되었으며, 각 층은 ReLU 활성화 함수를 사용하였다. 또한, 드롭아웃과 배치 정규화를 적용하여 모델의 과적합을 방지하였다.
5.3 모델 컴파일 및 학습
Adam 최적화기와 MSE(Mean Squared Error) 손실 함수를 사용하여 모델을 컴파일하였다. 그런 다음, 모델을 학습시키기 위해 데이터를 배치 단위로 나누어 여러 에포크 동안 훈련하였다. 이 과정에서 교차 검증을 통해 모델의 성능을 평가하고, 하이퍼파라미터를 튜닝하여 최적의 성능을 도출하였다.
6. 결과 분석 및 앙상블, 결론
6.1 모델 평가
프로젝트에서는 다양한 머신러닝 모델을 통합하여 서울시의 강수량을 예측하였다. VotingRegressor와 StackingRegressor 같은 앙상블 기법을 사용하여 개별 모델보다 더 안정적이고 일반화된 성능을 달성하려고 시도하였다. 각 모델의 RMSE 값을 비교하여 앙상블 모델이 개별 모델들의 단점을 어느 정도 보완하였는지 평가하였으며, 가중치를 조정하여 최적의 결과를 도출하려고 노력하였다.
6.2 결론 도출
이번 프로젝트를 통해 서울시의 기상 데이터를 성공적으로 통합 및 분석하여 강수량 예측 모델을 구축하였다. 데이터 전처리 및 피처 엔지니어링을 통해 데이터의 질을 개선했고, 이를 기반으로 다양한 머신러닝 모델을 실험하여 강수량을 예측하는 데 유의미한 결과를 얻었다. 앙상블 방법을 적용함으로써 모델의 예측 성능을 높였으며, 이러한 접근 방식은 향후 다른 기상 데이터에 대한 예측에도 유용하게 활용될 수 있다. 또한, 이러한 분석은 기상 변화에 따른 사회적, 경제적 영향을 미리 파악하고 대응하는 데 큰 도움이 될 것이다.
6.3 향후 연구 방향
앞으로의 연구에서는 더 다양한 변수를 포함하여 모델의 정확도를 더욱 향상시킬 수 있을 것이다. 예를 들어, 공간적 특성을 고려한 모델링, 시간적 변동성을 더 잘 반영하는 시계열 분석 기법 등이 적용될 수 있다. 또한, 실시간 데이터 처리를 통해 동적으로 변화하는 기상 조건에 신속하게 대응할 수 있는 시스템을 구축하는 것도 중요한 연구 주제가 될 것이다.
깃허브 링크
wonderfulawsome/Weather-Big-Data-Contest (github.com)
GitHub - wonderfulawsome/Weather-Big-Data-Contest
Contribute to wonderfulawsome/Weather-Big-Data-Contest development by creating an account on GitHub.
github.com