Upstage AI LAB 부트캠프 5기/패리포터활동

[AI 부트캠프] 처음 도전한 경진대회에서 얻은 것들

김 도경 2024. 11. 21. 15:08

AI Upstage 부트캠프에는 4번의 경진대회가 있습니다!

경진대회를 한다는 것은 알았으나, 어떤 식으로 평가가 되는 지도 몰랐고, 어떻게 진행이 되는 지도 전혀 몰랐습니다.

 

이번에 부트캠프에서 진행한 경진대회를 막을 내려서, 회고를 하면서

어떤식으로 진행이 되는지..!를 한번 정리를 해볼까 해요.

 

그리고 이 대회가 얼마나 장점이고, 도움이 되었는지에 대해서 말해볼까 해요.

 

경진대회 소개

첫번째 대회는 서울 아파트 실거래가 예측 경진대회는 주어진 데이터를 활용해 아파트 가격을 예측하는 모델을 개발하는 대회였어요.

아파트 위치, 크기, 건축 연도, 주변 교통 및 시설 정보 등 다양한 변수를 포함한 데이터를 바탕으로 모델을 학습하며, 선형 회귀, 랜덤 포레스트, 딥러닝 등 다양한 회귀 알고리즘을 활용할 수 있어요.

대회 데이터는 아파트 실거래가, 지하철, 버스 정류장 정보, 평가 데이터로 구성되며, 참가자들은 이를 통해 예측 성능을 최적화하고, 서울시 아파트 시장의 동향을 예측하는 데 중점을 두었고, 이를 RMSE로 평가를 하였습니다.

이 대회는 부동산 관련 의사결정 지원 및 거래 효율성을 높이는 데 기여하며, 참가자들에게 머신러닝 실전 경험을 제공한다는 게 대회의 설명이었어요.

 

팀 목표

우리팀은 1등이라는 목표를 가지고 생각했어요.

사람들이 너무 좋았고, 그만큼 잘 해낼거라는 자신이 다들 있었다고 생각이 됩니다.

그리고 다들 많은 것을 배워가는 것이 목표였어요.

 

팀 활동

 

10월 23일에 팀 구성을 하여, 12월 6일, 경진대회와 이후에 진행되는 ML 프로젝트까지 함께 하는 팀으로 진행이 되었어요.

 

팀은 5~4인 1팀으로 구성이 되었고, 이번 기수에서는 총 5개의 팀으로 나누어져서 활동을 하게 되었어요.

지금도 같은 팀으로 활동을 하고 있는데, 모든 팀원들이 너무 잘 해주시고, 다들 대단하신 분들이라 배우는 점도 많고 에너지들도 넘치는 분들을 운이 정말 좋게 만나서 행복하게 팀플을 하고 있답니다.

 

팀에서 소통은 Slack에서 간단한 이야기들을 하고, 노션에서 회의록 작성, 피어세션 등 여러 활동들을 진행을 하게 되었어요.

또한 깃허브를 통해서 코드 공유를 조금 하기도 했답니다.

이번에 깃허브랑 노션을 처음 사용하게 되었는데, 노션에 대해서 정말 많이 배웠다고 느껴요..!

 

AIstages와 제공 환경

Aistages라는 자체적인 사이트에서 대회를 진행했어요..! Upstage가 얼마나 대단한 회사인지 느끼게 해주는 부분이었답니다....

 

이 사이트 내부에서 Upstage GPU 서버 환경을 제공을 해주어요. VScode랑 SSH로 연결을 하여서 사용이 가능해서, 매우 큰 데이터셋을 다루는데 어려움 없이 모델링을 진행하고 그 외에 여러 진행을 할 수 있었답니다.

 

데이터와 베이스라인 코드도 tar파일으로 제공을 해주셔서 VScode 환경에서 쉽게 링크로 다운을 받아서 가져올 수 있었어요. 여러모로 신기한 방법이 많이 있다는 것을 알게 되었습니다.

 

또한 제출을 통해 리더보드에서 팀 순위를 볼 수 있고, 제출 목록을 통해서 각자 제출 파일에 대한 RMSE도 볼 수 있었어요.

 

데이터 EDA

 

데이터는 4개의 데이터셋이 제공되었습니다.

  • 아파트 실거래가 데이터 - 국토교통부 제공, 아파트의 위치, 크기, 건축 연도, 주변 시설 및 교통 편의성과 같은 다양한 특징들 포함
  • 지하철역 데이터 - xy좌표로 제공
  • 버스정류장 데이터 - xy좌표로 제공
  • 평가 데이터 - 제출 양식

처음에는 아파트 실거래가 데이터에 대해서 EDA를 각각  진행을 했어요.

Train 데이터와 Test 데이터를 따로 제공했기에 Is_test컬럼을 추가하여 데이터를 하나로 합친 뒤에 시작을 했습니다.

 

데이터 EDA를 잘하는 편이 아니었기에, 데이터에 대해서 살펴본다 정도로 진행을 하게 되었어요.

 

우선 타겟변수가 어떻게 분포가 되었는지 확인을 하고, 

 

각 feature에 대한 Dtype 확인을 했는데 Object 타입이 여럿 있었어서 이에 대한 처리가 필요한 것을 확인하고 넘어갔습니다.

 

숫자형에 대해서는 상관분석과 target과의 산점도를 그려서 확인도 해보았습니다.

 

결측치 채우기와 데이터 전처리

 

대학원에서 다뤘던 데이터는 제가 직접 얻은 데이터였고, 이 데이터가 어떤 식으로 얻어지고 전처리 되는지 모두 알았고, 생물데이터였기에 결측치 = 지워야하는 데이터...였습니다. 그래서 실험이 잘못되었다, 실험장비가 고장났다,하고 결측치가 많으면 삭제하는 게 일상적이었는데

 

이번엔 데이터 양도 너무너무 많았고, 또한 결측치가 말도 안 되게 많았다고 생각이 되어요...

이는 팀에서 가장 잘 하시는 분이 API를 통해서 결측치를 처리할 수 있을 것이라고 해주셔서 진행을 해주셨습니다..!

 

중간에 팀이 나눠서 진행을 했는데, 결측치 팀에 들었음에도 한 게 없어서 너무 아쉬웠지만, 다음엔 API를 다룰 수 있게끔 많이 배운 것 같아서 너무 좋았습니다.

 

그리고 RMSE를 계속 보면서 집값이 코로나 이후 많이 올랐기에 코로나 이후 데이터만 사용을 하기도 하였고, 인코딩을 다른 인코딩으로 바꾸어봣는데 의미가 없어서 제공해주는 레이블 인코딩을 그대로 상용르 했답니다. 그외에도 표준화진행도 해보았지만 제대로 나오지 않았고, 결측치 보간을 계속 진행했어요.

 

저같은 경우는 데이터 전처리에서는 표준화만 진행을 해보았는데 퍼블릭에서는 너무 아쉬운 결과라서 그냥 진행을 하게 되었답니다....하지만 나중에 최종 RMSE는 잘 나온 것을 보고 계속 진행할걸이라는 아쉬움이 있었어요.

 

모델 선택 및 적용

 

대회가 정말 짧은 기간이었기에ㅠㅠ모델을 제대로 볼 시간이 없었습니다...

저는 데이터위주로 보아서인가 시간이 부족해서, 모델을 실제로 본 시간은 이틀도 되지 않아요ㅠ 그래서 모델에 대해서 아쉬움이 남습니다...

 

팀내부평가에서는 XGboost가 잘 나오는데, 퍼블릭 리더보드에서는 LigthGBM 모델이 가장 잘 나오는 상황이었기에, 이게 왜 이러지?라는 생각이 계속 들었어요. 퍼블릭 리더보드에 잘 나오는 것을 따르는 게 맞는데, XGboost가 성능이 좋았다고 판단이 되었기에, 저는 마지막에 XGboost와 LightGBM을 앙상블 해보자..!라는 생각에 가장 마지막에 정말 끝나기 직전에 제출을 하게 되었어요.

그리고 결과는...퍼블릭 리더보드에서 좋은 성과를 내지 못해서 아쉬웠는데, 운이 좋게 프라이빗 리더보드에서 가장 좋은 평가가 되어, 정말 놀라운 결과였어요...

 

최종결과

퍼블릭 리더보드

 

프라이빗 리더보드

 

퍼블릭에서는 팀내에서 1등이 아니었는데, 프라이빗 리더보드에서는 팀 내에서 1등이었어요..! 1등을 한 팀!!

하지만 코드 자체를 제가 작성한 것도 아니었고, 베이스라인을 바탕으로 전처리와 다른 것들을 팀원들이 진행을 시켜주어서 RMSE를 이미 다 올려준 상태에서 정말 숟가락만 얹은 수준이었답니다...

 

자가 피드백

 

스스로에게 잘했다고 칭찬해주고 싶은 점

  • 모델에 대해서 내부평가가 잘 나와도 RMSE가 영 안나와서 버릴 수 있는데, 될거라고 믿었던 점이 좋았던 점 같아요. 아무래도 시간이 없어서 이거라도 해보자..!라는 생각에 계속 던진 것인데, 잘 나온 것은 역시 운이 따라줬어요.
  • 그리고 스스로에게 아쉬운 점이 많다는 것을 알고 새로운 공부를 시작하는 계기로 이를 삼게 된 점이 칭찬을 해주고 싶어요. 대회를 진행하면서 제가 컴공과를 나온 전공자 분들에 비해서 무엇이 더 부족한지 잘 인지를 하게 되었다고 생각이 되어요. 그래서 이에 대해서 더 공부를 하게 되었고, 이제 코딩테스트 공부도 시작하고 다른 면으로도 더 공부를 하게 되었습니다.

 

많이 아쉬웠던 점

  • 혼자 하면 아무것도 못하겠다는 생각이 되었어요. 제가 할 수 있는 부분이 너무 한정적이다는 것에 대해서 좀 많이 아쉬웠어요. 결측치를 API를 불러와서 채우는 것도, 전처리에서도 좋은 인사이트를 많이 발견하는 것도, 코드를 작성하는 것도 모두 제가 너무 미숙했다는 생각에 아쉬움만 남아요. 그렇기에 팀이 있다고 하지만, 팀내에서 큰 도움이 되지 못했을까라는 걱정이 너무 크게 되어요.

 

프로젝트를 통해 배운 점

  • 팀원이 정말 정말 중요하다. 대학 졸업이후 팀플을 한 적이 없는 사람이었습니다...대학원에서 팀플이라기엔 남자친구와 함께한 대회들....사실상 혼자하는데 도움 받은 정도가 다였고, 특히 코딩관련된 협업은 전혀 없었어서 팀원의 중요성이 사실 잘 몰랐어요. 하지만 이번에 너무나도 좋은 팀원들을 많아서, 좋은 에너지들을 얻었고 제가 더 열심히 할 수 있는 시너지가 되었다고 생각이 되어요. 
  • 코딩공부를 더 열심히 해야겠다. 코딩 기본기가 매우매우 부족하다고 생각이 됩니다...그래서 이제 백준을 통해서 코딩테스트를 하게 되었답니다. 정말 열심히 해야겠어요....
  • 깃허브, 노션은 유용한 도구이다. 특히 깃허브는 엄청나게 유용한 도구이며, 노션으로 이력서를 쓰는 것도 좋고, 개인 페이지를 만드는 것도 매우매우 좋다고 생각이 되었어요. 유용한 도구들을 다뤄볼 기회가 있었고, 이를 다른 분들이 쓰는 것을 보면서 배울 수 있었다는 게 정말 좋은 점 같아요.
  • 외부데이터의 활용법과 API 사용법, 그 외에도 다양한 코딩 방법을 공부할 수 있는 기회가 되었고, 이걸 현직자에게 배울 수 있었다는 게 정말 좋은 기회였습니다.