전력수요예측 프로젝트

2019021166 이민예 Date: 2019-10-06

1. 다변량 시계열 모형의 전력 수요 추정 및 예측 정확도 평가

인천시는 전력 사용을 줄이고, 환경을 살리고자 19년 6월 전력 수요 관리 사업을 확대하였다. 인천시 주민들의 전력 사용량을 예측하여 전력 사용의 효율성을 증대하고자 한다.

계절별 전력 수요량 분석

인천 지역의 X251호를 대상으로 2017년 7월 부터 2018년 6월까지 축적한 자료를 분석한 결과, 인천 지역 주민들의 전력 사용량은 1월에 압도적으로 높은 것으로 나타났다. 이는 추운 겨울에 전력을 많이 찾는 현상이 반영된 결과이다.

시간별 전력 수요량 분석

인천 지역의 X303호를 대상으로 2017년 8월 부터 2018년 6월까지 축적한 자료를 분석한 결과, 전력 사용량이 가장 높은 시간은 오후 10시 이었고, 다음으로 오후 8시, 오후 11시, 오전 9시 순이었다. 이는 어두운 저녁에 전력을 많이 찾는 현상이 반영된 결과이다.

STL(Seasonal and Trend decomposition using Loess) 분해

전력 사용량 데이터에 STL(Seasonal and Trend decomposition using Loess) 분해를 적용하였고, 계절 주기가 있음을 알 수 있다.

VAR Model 의 요약 및 예측

한계점

  • VAR모형이 자기 자기만 예측을 하는 것 같은데, 예를 들어 X26, X303을 훈련하고 X241도 예측하는 방법을 찾아보아야함.

  • 오차측정하는 법

  • 머신러닝은 데이터 많이 못쓸것 같음 => 예측모델에만

  • 다변량 회귀 분석 VAR 이외에 다른 것도 리서치

[ Reference ]

https://yjucho1.github.io/spatio-temporal%20data/time-series/time-series-part4/

https://www.r-bloggers.com/an-inconvenient-statistic/

2. 딥러닝 모형의 전력 수요 추정 및 예측 정확도 평가

1번째 실험

  • 모델구조 : conv + 2layer의 bi lstm

  • 사용한 데이터 : (망. 데이터가 좋아야함..!!)

2번째 실험

  • 모델구조 : conv + 2layer의 lstm

next progress (10/17)

  1. 데이터를 최대한 작게, 효율적으로 다시 셋팅한다.

  2. conv + lstm 을 사용한다. (양방향보단 단방향lstm..)

  3. 미니배치를 도입한다.

  4. 파라미터를 셋팅한다.

  5. 결과를 올린다.

[1] 데이터

1-1.결측값 핸들링 아이디어

pandas 의 fillna 함수는 다양한 방법으로 결측치를 핸들링하는 방법을 제공한다. 데이터의 형태가 선형, 다항인지에 따라, 혹은 뒤에값으로 또는 앞에값으로 결측치를 채울수 있다. 하지만, 이슈는 같은 값으로 결측치를 채워넣을 경우, 트랜드를 잡지 못한다. 또한, 본 데이터의 특성상, 2017년도를 포함한 앞년도에서 상당히 많은 데이터가 결측되어 있다. 따라서, 대다수에 호수들에 대해 데이터가 결측된 시간을 공통적으로 없애고 실험한. 또한 중간에 빈 값은 다항으로 결측값을 채워넣는다.

1-2. window함수

시계열 데이터의 feature와 label은 다음과 같다.

  • feature : 윈도우 사이즈 (20) 개의 value

  • label : 윈도우 사이즈 다음에 나오는 value

  • drop_reminder : True (마지막에 사이즈가 다른 것들을 없앰)

feature과 label을 매핑 시키기 위해서 map함수를 사용하며, window[:-1]은 마지막 값을 제외한 값들의 집합이며, 마지막 값은 window[-1:] 이다. 처음에 20으로 주었으면, 0-18이 feature, 마지막이 label이 되기 때문에, 실질값보다 1을 더해주어 윈도우 사이즈를 준다.

[2] 모델

2-1. 성능 향상을 위한 hyper param 셋팅

2-1-1. learning rate

Learningrate scheduler를 통해 최적의 학습속도 plot시킨 후 셋팅한다.

2-1-2. epoch

각 epoch마다 loss가 어떻게 줄어드는지 확인하고, 최적의 epoch수를 찾는다. epoch을 100을 줄이고, loss가 0.001만큼 올라도 이는 괜찮다. 시간을 줄였으니깐

2-1-3. 옵티마이저

2-1-4. 모멘텀

2-1-5. mini batch gradient decent

2-2. 모델 비교

  • rnn

  • lstm

  • bi-lstm

  • cnn + lstm

  • cnn + bi-lstm

특약사항

  • 순서가 결과에 영향에 미치기 때문에 시퀀스 데이터를 랜덤하게 섞지 않았음.

  • 17일 데이터 제대로 해서 submission 한번 올림 / 22일 최종 제출

이슈사항

  • 새로운 호수의 데이터는 다른 호수와 섞이지 않도록 windowed_dataset 함수 업데이트한 결과 데이터 생성 자체에 시간이 많이 소요된다.

  • 총 16908 열씩 1308호수에 대해서 훈련하는 것이 시간이 너무 많이 걸린다.

  • 결측치 핸들링하는게 주요 문제인것 같다. 하지만 값이 하나로 통일되면 트랜드를 잡지 못한다. 학습하는 것이 없다. 따라서 결측된 갯수만큼, 앞 뒤에 시퀀스를 같다 붙이는 등의 아이디어??는 어떨까..?

  • 연구실 지피유로 해야한다..

공부

트레인으로 훈련시키고, 테스트로 모델 점검해보고, 하이퍼파라미터 튜닝한다음, 테스트랑 트렌인이랑 합쳐서 트레인하고, (테스트가 최신거이기 때문에) 서브미션 해본다.

Last updated