글 작성에 앞서 참고한 자료와 그 출처를 밝힙니다.
베이스라인은 데이콘 측에서 제공해 준 코드를 사용했고,
유가 크롤링은 데이콘 '김나맥' 님의 코드 공유를 사용했습니다.
참고자료 및 출처
- Baseline :
https://dacon.io/competitions/official/235606/codeshare/1100 page=1&dtype=recent&ptype=pub
- 유가 크롤링 :
https://dacon.io/competitions/official/235606/codeshare/1037?page=1&dtype=recent&ptype=pub
2. 코드분석
2-1. 전체적인 뼈대 구상
데이터를 받자마자 무엇을 해야할까요?
전처리와 EDA를 하며 데이터의 특성을 파악하는 것일수도 있고,
target 변수가 되는 것의 그래프를 그려보며 시계열적 특성을 파악해 볼 수도 있습니다.
하지만 제가 생각하는 가장 우선시 되어야 할 것은 대충이라도 모델의 뼈대를 구상하는 것입니다.
- 평균 SMP를 예측하고 최대, 최소는 편차의 개념으로 접근해볼지
- 최대, 최소, 평균을 모두 따로 예측할지
- 시간대별로 예측할지, 일자별로 예측할지
- 어떤 알고리즘을 시도해볼지
물론 아무것도 모르는 상태에서 결정할수는 없지만,
제일 먼저 뼈대를 구상하고 모델링을 시작해보니 전처리, EDA, 특성 공학 과정에서 더 유의미한 시도를 해볼수 있었던 것 같습니다.
그럼 이제 고민해 볼까요?
- 뼈대
" 학습 데이터로부터 일주일 후의 28일간의 최대, 최소, 평균 SMP와 전력수급실적을 예측해라 "
일주일 후로부터 28일간의 데이터를 예측한다?
이 말은 모델을 훈련시킬때 과거 n일간의 데이터를 가지고 7일 후, 8일 후, ... 34일 후의 값을 예측하면 될 것 같습니다.
7일 후를 예측하는 모델을 예로 들자면,
" 18년 5월 1일부터 5월 31일까지의 데이터 = 6월 7일의 평균 SMP 값,
18년 5월 2일부터 6월 1일 까지의 데이터 = 6월 8일의 평균 SMP 값,
...
20년 5월 1일부터 6월 1일까지의 데이터 = 20년 6월 7일의 평균 SMP값 "
을 모델에 학습시키면 훈련데이터의 마지막 한달을 가지고 7일후의 값을 예측할 수 있을 것입니다.
같은 방식으로 8일 후, 9일 후, .. 34일 후의 값을 예측하면 되겠죠?
이제 시간대별 데이터가 있다면 일자별 데이터로 전처리하고,
최대, 최소, 평균 SMP를 모두 별개로 예측해야겠다는 생각을 가질 수 있습니다.
일단은 이정도만 생각해두고 자세한건 데이터를 보면서 파악합시다 !!
2-2. 코드 뜯어보기
전체코드는 아래 깃허브를 참고해주세요.
https://github.com/sanghwi-git/predict_SMP/blob/master/Predict_SMP.ipynb
과정
- 데이터 전처리
- 데이터 로드
- 결측치 확인
- 날씨, smp, supply 간의 상관관계 파악 - 날씨 데이터에서 '기온' 사용 근거
- 특성 추가
- 시계열적 특성(년, 월, 일) 추가 - pd.to_datetime
- 국경일, 공휴일 특성 추가 - API 사용
- 유가 데이터 특성 추가 - pd.read_html
- 날씨 데이터 특성 전처리 및 추가
- 탐색적 자료 분석(EDA)
- 기존 특성(smp, supply, 기온)의 추세선 비교
- 기존 특성 + 추가된 특성의 상관관계 파악
- 모델링 - LightGBM
- supply + 추가된 특성의 예측
- 과거 60일 데이터(년, 월, 일, 주말, supply, 공휴일, 기온, 유가)로 7~21일 이후 'supply' 예측모델 15개
- 과거 90일 데이터(년, 월, 일, 주말, supply, 공휴일, 기온, 유가)로 22~34일 이후 'supply' 예측모델 13개
- 과거 7일 데이터(년, 월, 일, 주말, supply, 공휴일, 기온, 유가)로 7~34일 이후의 '유가' 예측모델 28개
- 과거 30일 데이터(년, 월, 일, 기온)로 7~34일 이후의 '기온'을 예측모델 28개
- 예측된 28일치의 값들을 바탕으로 smp 예측
- 훈련 데이터를 랜덤으로 섞고 KFold 진행 (k=5), 5개의 모델 생성
- 예측한 supply, 유가, 기온 + 공휴일, 년, 월, 일 주말 데이터를 모델에 넣고 평균냄
- supply + 추가된 특성의 예측
'Project > Dacon' 카테고리의 다른 글
[Dacon] 전력수요 및 SMP 예측 AI 경진대회 - 결과분석 (0) | 2020.05.31 |
---|---|
[Dacon] 전력수요 및 SMP 예측 AI 경진대회 - 도메인 지식 (0) | 2020.05.30 |