Wine 등급 예측 경진대회 두번째 이야기

1편에 이어서…

최소 3등 안에 들 수 있을 거란 예상을 깨고 5등에 올랐다.ㅜㅜ

결국 이 대회는 다른 사람들과의 싸움이 아니라 얼마나 이전 내가 만든 모델보다 더 좋은 모델을 만들어 내느냐는 나 자신과의 싸움이 되어 버렸다.

전략이 있다면 점차 좋은 모델을 만들 수 있겠지만 전략없이 마구 시도를 한다면 그닥 좋은 모델은 만들어 내지 못하는 그런 대회가 이런 데이터 마이닝 대회가 아닌가 싶다.

내가 지금까지 모델 예측 값을 올린 이력은 아래와 같다. 사실 16일까지는 전략이 없었다.

5/28/2011       0.793290832
6/1/2011         0.651258728
6/6/2011         0.653900762
6/14/2011       0.66176357
6/16/2011       0.800861605
6/17/2011       0.647275457

RMSE라는 방법으로 에러를 측정한 값인데, 정답하고 평균적인 에러의 편차가 0.65정도가 나고 있다고 이해하면 된다.

6월1일에 0.65로 4등을 했고 6월 16일까지 헤매고 있다가 어제 0.64로 약간 퍼포먼스 향상을 가져왔다. 0.004 정도의 에러 감소를 위해 한 작업은 6월 1일에 내가 0.65정도의 에러를 가진 모델을 올리기 위해 했던 노력에 비해 10배 정도의 노력이 들어갔다고 생각하면 된다.

이 과정에서 학습 알고리즘은 바꾸지 않았고, 심지어 알고리즘 파라메터 최적화도 하지 않았다. 이 변수들까지 건드리게 되면 모델 튜닝의 복잡도는 훨씬 늘어난다. 게다가 이 변수를 건드려 봤자 모델 퍼포먼스 향상은 그리 크지 않다.

단지 시도했던건 학습셋을 어떻게 하면 더 늘릴 수 있느냐였다.

좀더 정확한 모델 생성에 도움을 줄 수 있는 정보가 많다면 더 좋은 모델을 만들 수 있겠다는 생각을 했었고, 그 일환으로 할 수 있는게 양질의 학습셋을 더 확보하는거였다.

사실 이 방법은 한번도 실무에서 써보지 못한 방법이였는데, 바로 semi-supervised learning 방법이다. 이 대회에서는 4547개의 학습셋과 unlable된 평가셋이 1950개가 주어졌는데, 평가셋을 학습을 하는데 사용할 수 있다면 더 좋은 모델을 만들 수 있겠다는게 이 시도의 시작이였다.

그러나 문제는 1950개가 unlabel 되어 있는 데이터라는 것과 이들의 예측값을 어떤 값으로 채울 것인지 그리고 모든 데이터를 사용할지 아니면 정말 확실한 일부분만을 사용할지를 결정해야 했다. 일단 모두를 사용하는것은 아닐거라는게 예상이고 이들중에서 정말 확실하게 값을 확정 지을 수 있는 것들만 선별해서 넣어야 될 거란 생각을 해볼 수 있었다.

이래저래 해서 선별된 389개의 평가셋만 학습셋에 추가 했고 그 결과가 0.6472 라는 RMSE 값으로 나온 것이며 이로서 한 등수를 올릴 수 있었다.

사실 “이래저래” 라는 말에는 상당히 많은 과정이 들어가 있고 이 자리에서 선뜻 말 할 수 없는 아이디어들이 들어가 있다. 아마도 이 대회에 관심 있는 분들은 더 좋은 아이디어를 만들 수 있을 거라는 생각을 해보고 직접 도전해 보라는 말을 해주고 싶다.

오늘도 내부 평가에서 더 좋게 나온 모델 하나를 submit했다. 아마 내일 정도에 또 등수가 올라간걸 볼 수 있지 않을까 한다.

 

이 대회에서 내가 했던 시행착오 결과들을 정리해 보자면 아래와 같다.

 

1. 선형 분류 알고리즘은 해결 방법이 아니다.

2. 앙상블 알고리즘이 좋은 결과를 가져다 준다.

3. semi-supervised learning이 모델 성능향상에 도움을 준다.

4. ?

 

현재 참가인원 119명, dead line까지는 3개월, 나의 등수 5등…

어떤일이 일어날지 모를 기간이긴 하다.

CC BY-NC 4.0 Wine 등급 예측 경진대회 두번째 이야기 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.