728x90
728x90
* 본 포스팅은 1월 27일 제3회 CDS 빅데이터 경진대회에서 푼 문제에 대한 내용입니다. 스스로 생각하고 푼 것이라 틀린 부분이 많을수도 있다는 점 양해 부탁드립니다.
전처리 과정
- 건물별 발전량 데이터와(cds2_data.csv) 건물정보(cds2_building_metadata.csv)를 user_id 기준으로 결합
- 1.번 데이터와 날씨 데이터(cds2_weather.csv)를 datetime과 region_id 기준으로 결합
- Missing Value를 이용해서 construct_year과 num_floors를 mean값으로 바꿈 (mean값으로 한 이유 : 발전량을 예측하는 데 있어 별 의미 없는 변수라고 생각해서 mean값 사용, 결론적으로 Backward Feature Elimination에서 선택안 돼서 아무 값이나 해도 상관없었음.)
- Missing Value를 이용해서 결측치인 12/31일 데이터 previous value값으로 변경 ( 이유: 전날과 날씨가 비슷할 거라 생각)
- Row Splitter 이용해서 train데이터와 test 데이터를 나눔
- train 데이터에서 변수에 해당하지 않는 idx, user_id 열 제거
데이터 EDA
- Parallel Corrdinates를 통해 generate가 높을수록 rain_hourly가 낮은 것을 확인
- Parallel Corrdinates를 통해 generate과 cloud, wind_direction 상관관계가 없는 것으로 파악하고 진행(실제 상관관계가 없는 것은 확인 못 함)
데이터 모델링 수행 내역
- 회귀 모델( Linear Regression, Simple Regression Tree, Random Forest, Gradient Boosted Tree, XGBoost , XGBoost Tree Ensemble) 총 6가지 실행
- train 데이터에서 partitioning을 통해 validation데이터와 test데이터로 나눔 ( 3:7)
- 1. 과정에서 R^2 높은 Simple Regression, Gradient Boosted Tree, XGBoost Tree Ensemble를 뽑아 Backward Elimination 실행 후 feature 선정
- 결과
Simple Regression - R^2 : 0.94, RMSE : 36.516
Gradient Boosted Tree - R^2 : 1 , RMSE : 4.334
XGBoost Tree Ensemble - R^2 : 1 , RMSE : 0.717 로
XGBoost Tree Ensemble 모델 결정, Boostring rounds는 100, 200, 300 중 성능이 300이 제일 높은 것으로 확인
※ R^2값이 높아 과적합되었는지 걱정했는데 validation 데이터에서 실제 값과 예측 값이 비슷한 것을 확인
주관처에서 요구하는 대로 column 바꿔서 csv파일로 저장~
최종 workflow
시간에 쫓겨 다시보니 전처리 그냥 마음가는대로 했네,, 아쉬운 부분이 많이 보이는데 다시 돌아간다고해도 이것보다 잘 할 자신도 없고 결과도 만족하기에 마무리~
https://jxxngho.tistory.com/22
728x90
728x90