[Challenge] Elice MINI 경진대회 후기

이준성·2023년 1월 2일
1

Challenge

목록 보기
1/2

휴가 중에 갑자기 공지된 MINI 경진대회

휴가를 잘 즐기고 있다가 갑자기 Elice에서 MINI 경진대회를 한다는 것을 봤다. 한창 AI 경진대회라면 뭐든 참여하는 나였기에 당연히,,!!! 해야겠다고 생각했다. 그래서 휴가의 일부를 이 대회에 태웠다 ...

Time-Series Regression

난생 처음 보는 분야의 경진대회였다. 사실 그 전까지 Image-Based Model만을 다루었기에 이 대회처럼 Multivalue를 이리저리(?) 해서 무언가를 Prediction하는 분야는 아예 몰랐다 ㅋㅋㅋ 그래서 그냥 일단 해보자!! 라는 생각으로 시작했다.

Stage의 유무

이 대회는 '공정 프로세스 예측'을 주제로 하는데, Stage가 총 2개 있다.

Stage 1: Machine 1, 2, 3이 병렬적으로 공정을 수행하여 Stage 1을 예측, 다시 말해 Machine 3개의 Feature로 Stage 1의 MultiOutput (#features = 15)을 내야 한다.

Stage 2: Stage 1의 Output이 Machine 4, 5를 통과하는 공정을 수행해 Stage 2의 MultiOutput (#features = 15)을 예측해야 한다.

삽질의 시작

처음엔 모델을 만드는 것에만 집중했었다. 따로 아는 게 없었기에 그나마 가장 친숙한? LSTM Layer와 Drop을 사용하는 것만 진행했었다.

Stage 1에서는 Machine 별로 3개의 모델을 만들어 Prediction을 만들고, 그 Prediction들의 Average 값으로 최종 값을 만들었다... (지금 생각해보면 겁나 한심)

Stage 2도 마찬가지이다. Stage 1의 Output > Machine 4 > Machine 5 별로 LSTM-Based Model을 통과시켜서 진행했다.

결과는 ㅋㅋㅋㅋㅋ -60점 ㅋㅋㅋ (점수는 각 Stage별 R2 Score의 평균으로 내었다)
진짜 그 전에는 뭐라도 점수가 나왔는데 이건 그냥 할 말이 없었다 ...

삽질 벗어나기

그래서 정말 많은 내용을 찾아봤다. -60점은!!! 내 자존심이 허락 못한다 ㅠㅠㅠ 이러면서
찾아보니 정말 다양한 것들이 있었다. 대표적으로는 EDA, Feature Selection, Scaler, MultiOutputRegressor ?

가장 내게 필요했던 건 MultiOutputRegressor였다. 그래 이런 모델을 원한 것이었다 ㅠㅠ
찾아보니 데이터별로 Scaler를 적용한 후 MultiOutputRegressor를 적용하면 효율이 더 늘어난다고 했다! Image Segmentation할 때 Image Data를 Normalize하는 거랑 비슷한 맥락이라고 이해했다.

그래서 처음에는 Feature Selection 없이 LGBM-based MultiOutputRegressor를 모델로 했다. 이번에는 Stage와 무관하게 각 Stage별 Prediction에 해당하는 Feature를 모두!! 넣어서 진행했다.

결과는 다행히도 ㅠㅠ 66점 ? 정도가 나왔던 것 같다. -가 아닌 것에 안도했고, 나름대로 이해를 하고 있구나 라고 생각했다.

그래서 Feature Selection이 뭔데

당연히 생각했던 건 Feature Selection이었다. 불필요한 Feature Selection이 방해를 하고 있구나! 하는 생각은 자명한데, 그걸 어떻게 하는지 잘 몰랐다. 찾아보니까 다양하게 있더라... Stationary, Variance, Feature Importance 등등 ...

가장 내가 먼저 시도할 수 있었던 건 Variance였다. Target의 변동이 심한데, Variance가 상당히 낮은 Feature는 그 과정에서 불필요할 가능성이 높다고 생각했다. 그래서 처음엔 모든 변수의 Variance를 조사하고, 특정 값을 Threshold로 잡아 삭제했다. 내 기억 상으로는 1이 넘어가는 것들이 많아서, 0.37 정도를 Threshold로 잡고 삭제했다.

그런 뒤에 결과를 확인했더니 ... 아이러니하게 나아지질 않았다. 이 방법이 아닌가? 라는 생각이 들어서 바로 Variance는 따지지 않기로 했다.

다음으로는 CatBoostRegressor에서 제공하는 Feature Importance를 확인해보았다. 근데 이것도, 전처리 방식 등이 좀 달라지면 금세 달라지는 거 같아서 분간하기 좀 어려웠다. 특정 전처리 방식으로 고정해놓고, Feature Importance를 확인하여 하위 몇 개의 Feature를 삭제한 뒤 다시 진행했다.

그랬더니 결과가 ... 오히려 더 안 좋아졌다 ㅠ 내가 Feature Selection을 잘못 이해하고 있는 건가

최종 선택

방대한 정보를 내 것으로 만들려고 할 때 시간이 이미 너무 많이 소요된 상태라, 거의 하루밖에 남지 않은 상태였다. 더군다나 GPU도 아닌 CPU를 제공해줘서, 속도도 디게 느렸다 ... 도박을 하기에는 좀 어렵다 싶어서, 가장 확실했던 첫 번째 방법, MultiOutputRegressor로 바로 진행하는 것이 좋다고 생각했다. 거기에다가 대회에서도 많이 사용했던 Ensemble을 넣으면 좋을 것 같다고 생각했다.

찾아보니 많은 사람들이 KFold도 사용하고 있는 걸 확인할 수 있었다. 그러면 KFold + Ensemble을 진행하면 결과가 조금 나아지지 않을까라는 생각을 가지고 작업을 진행했다.

KFold는 12, Ensemble을 LGBM-MultiOutputRegressor와 CatBoostRegressor의 평균값으로 진행하였고, Training을 시작한 지 5-6시간이 지나서야 결과를 확인할 수 있었다.

결과는 아쉽게도 ㅠㅠ 69점이 나왔다. 더 좋아지긴 했지만 순위권에서는 한참 모자른 점수였다. 15등으로 만족해야 한다는 사실이 좀 아쉬웠다... 능력 부족의 결과 ㅠ

결론

이 분야에 대한 공부가 확실히 필요함을 느꼈고, 경험도 엄청 중요하다고 생각했다. 특히 이 분야는 Feature Selection이 굉장히 중요하다고 많은 사람들이 이야기하기에 데이터 분석을 하는 방식도 어느 정도 숙달하고 대회에 참여해야겠다고 생각했다 ... 다음엔 더 잘하자 ㅠㅠ

profile
만나서 반갑습니다!

2개의 댓글

comment-user-thumbnail
2023년 1월 3일

저도 놀다가 아무런 사전 공지 없이 대회가 시작해서 노는 시간을 버리고 대회에 투자했네요 ㅜㅜ
저도 이번 대회를 통해 많이 배웠습니다.
화이팅입니다!

1개의 답글