본문 바로가기

Project/Dacon

[Dacon] 전력수요 및 SMP 예측 AI 경진대회 - 코드분석

글 작성에 앞서 참고한 자료와 그 출처를 밝힙니다.

 

베이스라인은 데이콘 측에서 제공해 준 코드를 사용했고, 

유가 크롤링은 데이콘 '김나맥' 님의 코드 공유를 사용했습니다.

 

참고자료 및 출처

- Baseline : 

https://dacon.io/competitions/official/235606/codeshare/1100 page=1&dtype=recent&ptype=pub

 

공공 데이터 활용 전력수요 및 SMP 예측 AI 경진대회

출처 : DACON - Data Science Competition

dacon.io

 

- 유가 크롤링 :

https://dacon.io/competitions/official/235606/codeshare/1037?page=1&dtype=recent&ptype=pub

 

공공 데이터 활용 전력수요 및 SMP 예측 AI 경진대회

출처 : DACON - Data Science Competition

dacon.io


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

 

sanghwi-git/predict_SMP

Contribute to sanghwi-git/predict_SMP development by creating an account on GitHub.

github.com

 

과정

  1. 데이터 전처리
    1. 데이터 로드
    2. 결측치 확인
    3. 날씨, smp, supply 간의 상관관계 파악 - 날씨 데이터에서 '기온' 사용 근거
  2. 특성 추가
    1. 시계열적 특성(년, 월, 일) 추가 - pd.to_datetime
    2. 국경일, 공휴일 특성 추가 - API 사용
    3. 유가 데이터 특성 추가 - pd.read_html
    4. 날씨 데이터 특성 전처리 및 추가
  3. 탐색적 자료 분석(EDA)
    1. 기존 특성(smp, supply, 기온)의 추세선 비교
    2. 기존 특성 + 추가된 특성의 상관관계 파악
  4. 모델링 - LightGBM
    1. supply + 추가된 특성의 예측
      1. 과거 60일 데이터(년, 월, 일, 주말, supply, 공휴일, 기온, 유가)로 7~21일 이후 'supply' 예측모델 15개
      2. 과거 90일 데이터(년, 월, 일, 주말, supply, 공휴일, 기온, 유가)로 22~34일 이후 'supply' 예측모델 13개
      3. 과거 7일 데이터(년, 월, 일, 주말, supply, 공휴일, 기온, 유가)로 7~34일 이후의 '유가' 예측모델 28개
      4. 과거 30일 데이터(년, 월, 일, 기온)로 7~34일 이후의 '기온'을 예측모델 28개
    2. 예측된 28일치의 값들을 바탕으로 smp 예측
      1. 훈련 데이터를 랜덤으로 섞고 KFold 진행 (k=5), 5개의 모델 생성
      2. 예측한 supply, 유가, 기온 + 공휴일, 년, 월, 일 주말 데이터를 모델에 넣고 평균냄