전력사용량 예측 AI 경진대회

시계열 | SMAPE | 한국에너지공단 | 전력

  • moneyIcon Prize : 1,800만원
  • 2,549명 마감

 

j_sean팀 | Private 1위(5.0293) | XGBoost 단일 모형

2021.06.29 20:03 17,970 Views language

우선 이렇게 좋은 대회 열어주신 한국에너지공단과 데이콘 감사드립니다. public score에서 6위를 하여 우승할거라 예상하지 못했는데 1위를 하게 되어 기쁩니다.
대회를 2주 정도밖에 참여하지 못해 feature들에 대한 고민을 많이 하지 못했는데, Analytics 부문에서 좋은 아이디어를 많이 얻었습니다. 태양광 발전 대회에서 5위 하신 고라파덕님, 이번 대회 Analytics에서 좋은 코드 공유해주신 동준이님에게 특별히 감사드립니다.

저희가 고민한 부분은 크게 3가지입니다. 
1. 건물별 모델링 or 전체 데이터에 대한 모델링
: 처음에는 전체 데이터로 모델링을 시도했으나 성능이 좋지 않아 건물별 모델링을 진행했고 큰 향상이 있었습니다.
2. Custom Loss Function
: 전력사용량에 대한 비지니스 모델은 적어도 과소추정보단 과대추정이 더 합리적이라 생각했습니다. 이 부분을 반영하여 평가 metric 역시 SMAPE로 설정했으리라 생각합니다. 그러므로 과소추정에 대해 높은 가중치를 부여하는 custom loss function을 정의했습니다. public 기준 6.07에서 5.75까지 성능 향상이 있었습니다. 
3. 후처리
: 2번과 같은 맥락에서 모델의 예측치 중 비합리적으로 과소추정하는 경우를 보정해주기 위해 후처리를 진행했습니다. train set의 마지막 28일 데이터에 대해 각 건물별로 요일별 시간대별 최솟값을 구했고 예측값과 비교하여 만약 예측값이 더 작다면 최솟값으로 대체해주었습니다.  public 기준으로는 0.01 , private 기준 0.08 정도의 성능 향상을 이뤄냈습니다. 

CatBoost 와의 앙상블도 고려했는데 이 또한 private 5.10으로 좋은 성능을 보였습니다. CatBoost도 XGBoost와 동일한 방식으로 훈련하여 두 모델의 예측값의 평균으로 제출했습니다. 

이 대회에 관심을 가지고 참여해주신 모든 분들 감사드리며 이 대회를 계기로 더욱 정진하는 j_sean 팀이 되도록 하겠습니다. 

Code
로그인이 필요합니다
0 / 1000
건조한안구는싫어
2021.06.29 20:31

loss에 대한 고찰이 인상적이네요. 고생하셨습니다.

정개
2021.06.29 22:05

Loss에 대한 수정은 대회마다 실험해보고 있는데, 좋은 결과가 있어서 다행이네요 ㅠㅠ 심짱님도 참여하시는 대회에서 좋은 성과 있으시길 바라겠습니다!

ccw7463
2021.09.15 16:20

좋은코드 감사합니다
질문이 하나있는데, csv파일도 첨부하신거라고 글을읽었는데 csv파일을 못찾겠어서...
hyperparameter_xgb.csv 파일은 어디있는건가요?

정개
2021.09.15 16:23

이 페이지에선 csv 첨부가 불가해서 데이콘 측에 제출했습니다! 데이콘 제출용 노트북을 만들다보니 코드공유에도 첨부된 것으로 혼동을 드렸네요 ㅠㅠ  

ccw7463
2021.09.15 16:40

csv파일을 받을수는있나요? 데이콘 대회문의에 제출한csv파일을 제공해주진않는다고나와있네요 물론 대회종료전에 작성된글이긴한데.....

정개
2021.09.15 17:48

팀원들과 상의하여 다시 댓글 남기겠습니다! 

ccw7463
2021.09.15 18:42

곤란하시다면 괜찮습니다 ㅎㅎ
질문하나더가능할까요?
gridsearchcv 코드에서 for문안에 gcv.fit(x_train,y_train)부터 자꾸 인덱스에러가 나는데 혹시왜그런지 아실까요?
ㅠㅠ

정개
2021.09.15 19:20

아 우선 하이퍼 파라미터 제공 가능하니 메일 주소 달아주시면 보내드리겠습니다. 

그리고 오류가 나는 이유는 제가 코드 에러를 수정하지 않고 올린 것 같습니다 ㅠㅠㅠ 
저 부분은 어차피 주석처리하니 자세히 들여다보지 않고 수정 전 코드를 첨부했습니다.
y_train, y_test, x_train, x_test = temporal_train_test_split(y = y, X = x, test_size = 168) 이 코드를 제거해주시고, 
gcv.fit(x, y)로 수정해주세요! gcv 정의할 때 이미 pds를 통해 train test 범위를 지정해줬으므로 전체 train, test set을 fitting하는 것이 맞습니다. 혼란을 드려 죄송합니다.

ccw7463
2021.09.16 08:50

친절한 답변 감사합니다.
메일 : changwoo7463@naver.com  감사합니다.

gks6141
2021.09.23 11:02

좋은 코드 감사합니다!  
hyperparameter_xgb.csv 첨부하셧다구 글을 읽었습니다. 찾아봐도 없어서... 
답변들을 읽다보니 혹시 hyperparameter_xgb.csv 파일을 받을 수 있을까요? 

정개
2021.09.24 14:12

메일 댓글로 달아주시면 보내드리겠습니다!

들숨날숨
2021.09.25 18:35

안녕하세요! 좋은 코드 감사합니다! 혹시 이 코드를 공부하고 싶은데 저도 csv파일을 받을 수 있을까요? 제 메일은 sumini0516@naver.com입니다! 감사합니당

정개
2021.09.28 00:24

보내드렸습니다. 감사합니다.

Dumpling
2021.09.28 14:40

안녕하세요! 먼저 좋은 코드 감사합니다. 덕분에 공부하는데 많은 도움 됐습니다. 감사합니다. 실례가 안된다면 hyperparameter_xgb.csv파일을 받을 수 있을까요? 많은 도움이 될 것 같습니다. 제 이메일은 ib0623@naver.com입니다. 다시 한번 감사합니다.

레오레오
2021.09.29 10:28

좋은 코드 감사합니다!

정개
2021.10.12 14:40

레오레오님 감사합니다!

사키논
2021.09.29 21:18

안녕하세요! 먼저 좋은 코드 감사합니다. 덕분에 공부하는데 많은 도움 됐습니다. 감사합니다. 실례가 안된다면 hyperparameter_xgb.csv파일을 받을 수 있을까요? 많은 도움이 될 것 같습니다. 제 이메일은 fosehdwl@naver.com입니다. 다시 한번 감사합니다.

deno
2021.10.08 17:44

데이터 분석에 관심있는 학생입니다. 해당 코드로 공부하고 싶은데 csv파일 공유 부탁드려도 될까요?(21thpoem@naver.com)

정개
2021.10.12 14:40

오늘까지 파라미터 문의주셨던 분들 메일로 보내드렸습니다! 저희 코드에 관심 가져주셔서 감사합니다.

wldbsdudzz
2021.10.14 09:11

안녕하세요!! 이렇게 좋은 코드로 공부할 기회를 제공해 주셔서 감사합니다. 혹시 늦지 않았다면 저도 csv파일을 공유 받을 수 있을까요? 제 이메일 주소는 wldbsdudzz@naver.com입니다!

해바라기
2021.10.17 13:29

안녕하세요 좋은 코드를 보게 되어서 감사합니다. 저도 csv파일을 공유 받을 수 있을까요? 메일주소는  kqngsuny@naver.com 입니다.

jee_p0
2021.10.21 00:29

좋은 코드 공유 감사합니다. 저도 실례가 안된다면 파라미터 파일을 공유받을 수 있을까요? easypyeong@naver.com 입니다!

유누
2021.10.25 17:25

좋은 코드 공유 정말 감사합니다.. 혹시 저도 csv파일 공유 받을 수 있을까요..? 공부하는데 정말 많은 도움이 될것 같습니다! yourim100415@naver.com 입니다!

jskong80
2021.11.06 14:21

안녕하세요. 공부에 많은 도움이 되는 것 같습니다. 혹 아직 csv 파일 공유해주실 수 있을까요. jskong80@naver.com 입니다. 감사합니다.

푸루
2021.11.08 21:26

좋은 자료 감사합니다! 보면서 한번 따라해보고 싶은데, 혹시 하이퍼파라미터를 받을 수 있을까요? mssongn@naver.com입니다!

정개
2021.11.15 17:17

취업 준비로 인해 글을 주기적으로 체크하지 못했습니다 ㅠㅠ 그간 하이퍼파라미터 관련 문의가 많았는데, 매번 메일로 보내드리기에는 어려울 듯 싶어 제 개인 블로그에 위 대회 관련 포스팅에 같이 파일을 첨부해두었습니다. 아래 링크에서 확인해보시고, 다운받아서 사용해주시면 되겠습니다!

저희 코드에 많은 관심 가져주셔서 감사합니다:)
https://blog.naver.com/chunsa0127/222427763833

최선웅
2021.11.22 02:32

안녕하세요! 너무 좋은 자료 감사합니다. 참고해서 따라하면서 공부하고 있는데, GridSearchCV를 통해서 Hyperparameter를 찾는 부분에서 위에 댓글 보고 수정을 해서 진행하고 있는데 NotFittedError: All estimators failed to fit 가 발생합니다.

scoring = smape 부분에서 smape가 별도의 scorer로 지정이 안되있어서 
from sklearn.metrics import make_scorer
smape = make_scorer(SMAPE, greater_is_better=False)
로 설정했는데 해당 부분에서 문제가 있는 걸까요?

정개
2021.11.23 17:48

from sklearn.metrics import make_scorer
smape = make_scorer(SMAPE, greater_is_better = False)

공유 코드 이전 파일을 살펴보니 공유된 파일에서 위 코드가 빠져있는 것을 확인했습니다. 최종적으로 노트북을 정리하며 실수로 삭제한 것으로 보입니다. 
댓글 달아주신 것처럼 위 코드를 넣어서 돌렸을 때에도 문제가 발생한다면 다시 댓글 부탁드립니다!

러쉬는좋지만비싸
2023.03.07 10:58

안녕하세요. 공유해주신 코드덕에 학습에 큰 도움이 되네요.
혹시 hyperparameter_xgb.csv 파일도 공유받을수 있을까요?
city256@naver.com 입니다.
감사합니다.

shimseonjo
2023.03.17 20:32

삭제된 댓글입니다

흑두루미
2023.04.09 16:14

안녕하세요, hyperparameter_xgb.csv 공유받고싶습니다..! 
heechang0306@naver.com로 보내주시면 감사하겠습니다...!

송경준12
2023.08.19 16:34

안녕하세요. 좋은 글 남겨주셔서 감사합니다.
hyperparameter_xgb.csv 공유해주실 수 있으실까요? 
메일은 songkj8170@naver.com입니다!

광란의황태자
2023.10.03 19:55

삭제된 댓글입니다

bbans
2023.10.19 14:17

삭제된 댓글입니다

jackpot3016
2024.03.20 15:40

삭제된 댓글입니다