ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Dacon_운동동작분류] 1D CNN을 이용한 예측 모델 만들기 (private 11th, 수상)
    My practice 2021. 2. 27. 00:00

     

    dacon.io/competitions/official/235689/codeshare/2385?page=3&dtype=recent&ptype=pub

     

    운동 동작 분류 AI 경진대회

    출처 : DACON - Data Science Competition

    dacon.io

     

    어차피 사이트 가면 누구나 볼 수 있지만... 일단은 내 블로그니 다른 분들 닉네임은 다 가렸다.

     

    말이 11등이지 점수 차이는 어마어마하다.

     


     

     

     

     

     

     

     

     

     

     

     


     

    2021/02/04 - [Paper] - 논문 리뷰 : CNN을 이용한 운동 데이터 분류

     

    논문 리뷰 : CNN을 이용한 운동 데이터 분류

    Um, T. T., Babakeshizadeh, V., & Kulić, D. (2017, September). Exercise motion classification from large-scale wearable sensor data using convolutional neural networks. In 2017 IEEE/RSJ Internatio..

    st4ndup.tistory.com

     

    이 글의 논문을 읽은 이유가 바로 이 월간 데이콘 11 때문이다.

     

    처음 데이터를 받아 봤을 때는 분석해본 적 없는 데이터 형태다 보니, 조금 당황해서 ARIMA를 이용해서 계수를 x로 모델을 돌려야 하나 생각했는데, 논문을 살펴보니까 이런 형식의 데이터를 CNN으로 처리를 하길래, 처음으로 CNN을 이용해서 분석을 해봤다.

     

    주로 신경을 쓴 부분은, 첫 번째로 데이터가 너무 불균형하고 적어서 데이터를 새로 만들어낼 필요가 있다고 생각했다. 언더샘플링이나 오버샘플링을 활용하기엔, 불균형한 정도가 너무 심했기 때문이다. 운동 상태에 대한 기록이 담긴 데이터이므로, 데이터는 특정 주기, 즉 패턴을 갖는 상태일 것이다. 그러므로,,,

     

    만드느라 힘들었다.

     

    물론 주어진 데이터가 위처럼 완벽하게 패턴을 이루지는 않겠지만, 운동 데이터의 임의의 한 부분을 잘라서, 두 덩어리의 순서를 바꾸면 특징은 고유하게 유지되면서, 학습에 도움이 되는 데이터가 추가될 수 있을 것이라는 아이디어로 만들어냈다.

     

    두 번째로는 모델링과 soft voting에 시간을 좀 쏟았다. 다만 그 시간이 고민이나 공부의 시간이라기보단,,, 코드를 돌리는데 걸린 물리적인 시간일 뿐이다. 일단 내가 전처리를 매우 소극적으로 (Data Augmentation과 Scaling, Total acc 변수 추가. 이 세 가지가 끝이다,,,) 하였기 때문에, 적당한 층수의 CNN 모델링을 단 한번 돌리는 것으로는 결과가 그렇게 좋지 못했다. 따라서, Dropout을 0.5로 하고, 반복 수를 크게 늘렸다. Bootstrap을 통한 Bagging과, 단순 repeat가 그것이다. 한 모델당 180번 돌렸다. 모델도 Layer의 층수에 따라 깊은 모델, 중간 모델, 얕은 모델 세 개를 돌렸다. 총 540회분의 output을 soft voting 한 것이다. 효과 향상은 엄청났다. 점수가 0.8xxx에서 0.5xxx가 될 정도였으니,,,

    Public과 Private 성적 사이에 차이가 크지 않았던 이유도 많은 repeat에 이유가 있다고 생각된다. 다른 분들의 경우를 보면, 오히려 Public 성적은 높은데 Private와의 갭이 커져 등수가 많이 떨어지기도 하였는데 성능 향상과 더불어 그러한 문제를 막아준 듯하다.

     

    근데 대회가 끝나고, 코드공유를 살펴보니까 ARIMA 계수를 실제로 쓰신 분도 계시고, Feature를 상당히 많이 추가하셨었더라, 너무 전처리를 대충 했던 것 같다. 가속도와 속도의 관계를 생각해서 속도나 변곡점에 대한 변수를 추가할 수도 있었고,,, 이런 부분을 너무 생각을 안 하고 Modeling에만 시간을 쏟은 것 같다. 전처리와 변수 처리를 더 열심히 했으면, 지금보다 나은 점수와 등수를 얻어낼 수 있었지 않았을까,,,

     

    아무튼 CNN 모델도 써보고, 처음으로 혼자 나가본 Dacon임에도 등수가 괜찮다는 점에서 만족해보려 한다. 다음엔 좀 더 제대로 해보자 👨‍💻

     


     

     

    2021.03.01 // 운이 정말 좋게도 최종 10등 안에 들었다. 운구기일이다.

     


     

    댓글

since 2021