관리 메뉴

귀퉁이 서재

데이콘 - 1. AI프렌즈 시즌1 온도 추정 경진대회 (379팀 중 22위) 본문

캐글 (Kaggle)

데이콘 - 1. AI프렌즈 시즌1 온도 추정 경진대회 (379팀 중 22위)

Baek Kyun Shin 2020. 4. 24. 19:51

대회

데이콘의 AI프렌즈 시즌1 온도 추정 경진대회

대회 설명

우리나라에는 전국에 걸쳐 시도별 기상관측소가 있어 지역별 기온을 알 수 있습니다. 하지만, 각 지역 내에서도 대상과 위치에 따라 온도 차이가 매우 많이 납니다. 더운 여름날 뜨거운 아스팔트 위를 걸어보셨거나, 겨울철 칼바람 부는 교량 위를 걸어보신 분들은 체감하셨을 겁니다. 그렇다고 '모든 곳'에 관측소를 만들어 '지속적'으로 측정하기란 현실적으로 어렵습니다.

그래서 생각해 낸 방법이 ‘기상청 공공데이터를 활용한 온도 추정’입니다. 저가의 센서로 관심대상의 온도를 단기간 측정하여 기상청의 관측 데이터와의 상관관계 모델을 만들고, 이후엔 생성된 모델을 통해 온도를 추정하여 서비스하는 것입니다. 2013년 10월부터 시행된 ‘공공데이터의 제공 및 이용에 관한 법률 제21조’에 의해 기상청에서 데이터를 무료로 제공하고 있습니다. 멋지지 않나요? 그럼, 새로운 알고리즘을 통해 '나만의 기상청'을 만들어주세요.

데이터 설명

- 대전지역에서 측정한 실내외 19곳의 센서 데이터와, 주변 지역의 기상청 공공데이터를 semi-비식별화하여 제공합니다.

- 센서는 온도를 측정하였습니다.

- 모든 데이터는 시간 순으로 정렬되어 있으며 10분 단위 데이터입니다.

- 예측 대상(target variable)은 Y18입니다.

1. 훈련 데이터

- 30일간의 기상청 데이터 (X00~X39) 및 센서 데이터 (Y00~Y17)

- 이후 3일간의 기상청 데이터 (X00~X39) 및 센서 데이터 (Y18)

2. 테스트 데이터

- 훈련 데이터 기간 이후 80일간의 기상청 데이터 (X00~X39)

Feature (X00 ~ X39)로부터 예측해야 하는 타깃 값은 Y18입니다. 하지만 특이한 점은 30일간의 데이터는 X00~X39, Y00~Y17 만 존재합니다. 그 이후 3일간의 데이터는 X00~X39, Y18 만 존재합니다. 즉 Y18에 대한 데이터는 3일 치밖에 존재하지 않습니다. 굉장히 적다는 말입니다. 결국 Y00~Y17과 Y18과의 상관관계를 파악해 Y00~Y17중 Y18과 가장 밀접한 관련이 있는 feature를 Y18로 대체해서 생각해야 한다는 말입니다.

시계열 예측이기 때문에 모델은 RNN의 LSTM을 사용했습니다. 그리고 30일간의 데이터를 미리 학습한 모델을 전이 학습(Transfer Learning)하여 3일 치에 대해서 학습했습니다.

최종 모델이 궁금하신 분들은 제 깃헙을 참고해주시면 되겠습니다.

 

이 대회를 위해 몇 주를 투자했습니다. 처음에는 간단한 모델링, 피처 엔지니어링만으로도 성능이 팍팍 올랐습니다. 하지만 후반부로 갈수록 성능 올리기가 쉽지 않더군요. 이래저래 쥐어짜도 성능은 손톱만큼 올랐습니다.

캐글과 마찬가지로 데이콘도 대회가 끝나기 전에는 테스트 데이터의 일부만 활용해 성능을 측정합니다. 그렇기 때문에 대회가 끝나기 전의 성능 점수는 정확한 점수가 아닙니다. 대략적인 점수입니다. 하지만 대회가 끝나면 전체 데스트 데이터를 활용하여 성능을 측정합니다. 따라서 대회 종료 전에 좋은 성능으로 높은 순위에 있었더라도 대회가 끝나면 순위가 떨어질 수도 있습니다. 반대로 대회 종료 전엔 낮은 순위였어도 대회가 끝나고 순위가 높아지는 경우도 있습니다. 대회 전 순위가 높았다가 떨어지는 것은 오버 피팅(overfitting)이 되었다는 뜻입니다. 일부 테스트 데이터에만 지나치게 과적합되어 대회 종료 전에는 순위가 높았지만 전체 테스트 데이터로 측정을 하면 순위가 떨어지는 것입니다.

저는 대회 종료 전에는 순위가 36위까지 떨어졌습니다. 14위까지 갔다가 대회 후반부에는 순위가 점점 떨어져 반 포기 상태였죠. 그런데 대회 종료 후 최종 결과는 22위였습니다. 전체 테스트 데이터로 채점한 결과 성능이 상대적으로 좋아진 겁니다.

이번 대회를 참가하며 2가지를 깨달았습니다. 첫 번째는 좋은 성능을 조금이라도 더 좋게 하는 건 걸레 짜듯 힘들다는 것, 두 번째는 끝날 때까지 끝난 게 아니라는 것입니다. 최종 결과는 언제나 바뀔 수 있다는 마음가짐을 가져야겠습니다. 첫 대회치고는 생각보다 좋은 성적이었습니다. 다음에 참가할 대회는 캐글의 텍스트 대회입니다. 사실 NLP가 처음인데 대회를 참가하며 이 참에 배워보려고 합니다. 무엇보다 대회에 참가한다는 것 자체가 재미있어 즐겨보려 합니다.

2 Comments
댓글쓰기 폼