초보자는 각양각색의 AWS로 전력 예측 시스템을 만들어 보았다

개시하다


나는 먼저 책을 보고 기계를 배우기 시작했지만 어떻게 해야 좋을지 몰라서 유형적인 것을 만들고 싶었다(작년 여름).그 1탄으로 전기 소모 예측 시스템을 만들어 보았다.
※ 이 기사가 나오기 전에 싸이메이커 기사를 먼저 올릴 예정입니다. 시간 순서가 이상하기 때문에 작년 여름에 한 것을 강조해야 합니다.(혹시 모르니까)
그리고 이번 기사의 제목은 싸이메이커와 아마존 ML인데 전혀 사용하지 않았기 때문에 이 기사를 사용한 사람을 찾아서 죄송합니다.

어쨌든 완성형입니다.



이런 느낌의 페이지를 만들었어요.정밀도를 나타내기 위해 실측치와 예측치의 비교도표와 5일 전의 전력예보를 실었다.이 페이지 제작은 goo 언어의 버팔로 프레임워크를 사용하고 그래프 그리기에chart를 사용합니다.js를 사용하고 있습니다.이 글은 페이지 제작이 아닌 체계적인 제작을 위주로 하기 때문에 페이지 제작 부분은 생략한다.

시스템 전체 프로세스


이번에 제작된 시스템의 대략적인 절차는 아래 그림과 같다.오픈 웨더맵의 일기예보가 3시간마다 나오고, 램바도 3시간마다 나오기 때문이다.다이나모에서는 월과 요일 등의 예측 출력을 출력하기 위해 필요한 값과 예측 소모 전력, 실제 소모 전력을 같은 표에 넣는다.웹 페이지에 연결하면dynamo에 들어가는 시간과 예측값, 실측값을 얻어 이 값을 사용하여 도표를 그립니다.실제 전력 소비량은 1일 1회(이번은 오전 9시) 사용 전날 수치도쿄 전력 공급 현황 API로 나왔다.또 히로쿠가 만든 API를 사용해 전기 소모를 예측했다.

학습 방법


이번에는 랜덤 숲이라는 수법으로 예측을 진행했다.
입력한 값(설명 변수)은 그림과 같습니다.요일과 날씨의 원래 데이터는 문자열로 인해 숫자로 바뀌었다.그리고 출력의 값(목표 변수)은 출력을 소모하는 것이다.

랜덤 숲?


이른바 랜덤 숲이란 쉽게 말하면 나무를 결정하는 많은 것들을 모은 것이다

트리를 결정합니까?


그럼 나무를 정하는 건 뭘까요?요컨대
결정목은 여러 개의 설명 변수의 조합으로 목적 변수에 속하는 확률을 계산하는 방법이다.아래 그림에서 보듯이 각종 조건의 조합을 고려하면 출력이 3000만 kw에 달할 확률, 4000만 kw에 달할 확률...일본어를 배우다.날씨부터 고민이 하나밖에 없을 때, 시간부터 고민할 때 등은 생각할 수 없기 때문에 그런 결정 트리도 고민하려고 준비했다.이렇게 여러 개의 결정 나무를 모아 공부하는 방법을 랜덤 숲이라고 한다.

학습 데이터 정보


이번 예측 전력 소모에 사용된 정보는 월, 주, 시간, 날씨, 기온 5가지다.기계에 던지는 데이터는 반드시 숫자이어야 하기 때문에, 무슨 요일에 날씨가 숫자로 바뀌었다
예.
월요일→1
맑음→0, 비→2
이번에는 학습 데이터기상청로 활용된 도쿄 과거 데이터와 도쿄전력 과거 데이터 중 2012~20142016년의 데이터를 사용했다.(2015년에는 도쿄전력의 데이터가 없어 포함하지 않음)
도쿄전력의 과거 데이터와 관련해서는 다음 URL의 숫자 부분을 취득하려는 해에 취득할 수 있다.
http://www.tepco.co.jp/forecast/html/images/juyo-2017.csv
MONTH
WEEK
TIME
TEMP
WEATHER
ELECTRIC
1
3
3
3.5
0
2455
1
3
6
7.2
0
2477
1
3
9
9.4
0
2687
...
...
...
...
...
...
상기 느낌으로 csv 파일을 만들었습니다.

API 생성


이번에 히로쿠가 제작한 API(플래시 사용)에서 달 등에 던지면 전력 소모가 json 형태로 반납될 것으로 예상된다.(EC2를 사용하려고 했는데 여러 가지 이유로 Heroku가 되었어요...)
Heroku에는 방금 준비한 csv로 만든 모형이 미리 놓여 있습니다.POST가 예측에 필요한 데이터를 가져오면 이 모델로 계산된 예측 값을 json 형식으로 되돌려줍니다.이런 식이야.

이게 다야!


간단한 설명이지만 대략적으로는 그것만으로도 예측 시스템을 만들 수 있다.모형을 만들 때 준비된 함수를 사용하면 몇 줄로 완성할 수 있어 간단해!
이렇게 되면 예측치만dynamoDB에 저장!
실측값은 앞에서 말한 바와 같이 도쿄 전력 공급 현황 API에서 꺼내dynamo를 업데이트합니다.

하지만...정밀도를 더 높이고 싶어요!


다만 이 상태라면 처음 입력한 학습 데이터만 있으면 앞으로 계속 예측할 수 있을 것이다.학습은 기상청의 데이터이지만 오픈웨더맵을 사용하는 정보를 예측합니다.정보원은 서로 다른 것이기 때문에 정확한 예측을 위해 더욱 풍부한 학습 데이터가 필요하다.

정밀도를 높이기 위해 하는 일


오픈웨더맵 정보로 예측하면 추가 학습 데이터가 추가되면 정밀도가 더 높겠지?!그래서 이번에 S3와 헤로쿠의 스케줄러 기능을 사용해 개량했다.

도표는 위의 느낌이다.지금까지dynamo에 실측값만 넣었지만 csv가 연속적으로 추적한 것을 S3에 미리 저장합니다.이렇게 되면 지금까지의 학습 데이터 외에 새로운 학습 데이터로 모델을 만들 수 있다.Heroku에서 하루에 한 번 모델을 업데이트하기 위해 S3에서 최신 데이터에 추가된 csv를 얻어 모델을 업데이트하고 최신 모델로 예측치를 되돌려줍니다.여기 아까 헤로쿠 schedule 사용했어요.이것을 실시하면 아무것도 하지 않아도 학습 데이터를 마음대로 늘려 그 모델로 전력을 예측할 수 있다!그렇지!

최후


기계를 배우는 초보자도 이렇게 될 수 있다니 솔직히 놀랍다.
도쿄전력에서 전력예측대회(작년 여름)가 열렸다는 소식을 듣고 응모하려고 했는데 마감일이 지났어요. 너무 슬퍼요...
이번에는 코드를 보면서 처리 과정을 대충 해설한 게 아니라 코드를 보면서 해설한 기사를 썼으면 좋았을 텐데 생각지도 못했어...
정보가 틀리면 꼭 알려주세요.

좋은 웹페이지 즐겨찾기