대외활동/LG Aimers 5기

LG Aimers 5기 Phase2 해커톤 회의록 및 후기

ramin0119 2024. 9. 1. 23:24
728x90

1주차

회의(8/1, 목)

회의하기에 앞서 나는 팀장이지만, 한 명을 제외한 모든 팀원을 팀 모집 글을 올려서 지원을 받은 팀원이기에 자기소개를 각자 먼저 하였다.

그리고 회의에 앞서 처음에는 개인으로 시작하기에 앞서 팀장이 팀 편성 폼을 작성해야 한다.
그래서 팀원들에게 해커톤 규칙 동의 여부와 Phase 1 이수 여부를 확인하고, 회의 날짜/주기, 회의록 작성 방식을 정했다.

1. 회의 날짜, 주기
회의 주기는 주 2~3회를 생각했지만, 회의해 본 결과 화요일과 금요일 2회가 적절하다고 결정하였다.

2. 회의록 작성
이는 노션으로 내가 하자고 건의하였고, 내 아이디로 워크스테이션을 하나 만들어 회의록을 작성하는 곳을 만들어 팀원들을 초대하는 방식으로 진행하였다.

팀장이 팀원들을 등록하여 팀 빌딩 신청을 하려면 팀명이 필요하다.

그래서 다음 날에 인당 2개씩 후보를 내기로 하였고,

 

투표 결과는…. 팀명을 Aiming으로 결정해 팀 빌딩 폼을 제출하였다!

2주차

우리는 1주차에 선수지식이 있는지 이야기해본 결과, 팀원 모두 없다고 하여서 처음부터 공부를 해가는 것으로, 하기로 결정하였다.

그래서 회의 때는 팀원들에게 무엇을 하자고 하면 좋을까 생각해 보았었다.

제대로 모르는 입장에서는 할 수 있는 것이 2가지가 있다고 생각했다.

첫 번째는, 공부할 책이나 인터넷 pdf나 논문을 먼저 접해 공부를 해보고 코드를 작성하기

두 번째는, 자료를 참고하는 것과 코드를 작성하는 것을 병행하며 진행하기 (박치기..?)

 

나는 팀원들의 성향을 모르기에 팀 카톡방에는 "결과에 상관없이, 각자 회의까지 해봤던 것을 설명하고, 공유하기." 말하고 이를 바탕으로 회의 때 토의해 보기로 하였다.

 

이에 앞서 내가 각 회의에서 무엇을 말했는지 정리해 보고자 한다.

 

 8/6(화)

이 당시 10위 이내의 팀들이 점수가 너무 높아 보여 순위권을 힘들겠다고 생각을 했는데, 베이스라인 대비 성능이 너무 높은 코드 때문에 데이터셋을 재조정하겠다고 해커톤을 일시중지하였다. 아마 너무 높았던 점수들을 조정시키려는 것 같다.

 

그래서 공지가 올라오자, 톡방에 알리면서 해커톤 대회 중지 전까지 해왔던 것을 공유하자고 공지를 했다.

 

회의(8/6, 화)

나는 이전에 병행하고 있던 SKADA 중급 과정에서는 딥러닝을 중심으로 다루었고, 해당 해커톤에서 다룰 데이터랑은 달랐기 때문에 머신러닝을 공부해 보자는 방향으로 시작해 보았다.

 

1. 모델 바꿔보기

먼저 LogisticRegression 모델을 하이퍼 파라미터를 따로 사용하지 않고 사용해 봤는데, Baseline model보다 오히려 점수가 떨어져서, 그냥 그대로 사용하면 안 된다고 생각이 들었다. 그래서 모델의 성능을 올리는 방법 중 하나인 하이퍼 파라미터 최적화에 대해 알아보기 시작하였다.

 

2. 하이퍼 파라미터 튜닝

하이퍼 파라미터 튜닝 방법 중 하나인 그리드 서치 방법을 사용해 보았다.

그전에 사용하던 DecisionTree model을 그대로 사용하되, 그리드 서치로 최적화 모델을 찾아 학습시켜 predict를 시켰더니, 수료 기준의 점수를 넘겼다.

 

그리고 추가로 팀원들이 개인적으로 참고하거나 공부해 보면 좋을 링크들을 추가로 노션에 남겨놨다.

나머지 팀원들도 공부를 해보고 있거나, 아직 시작하지 못한 인원도 있어 간단한 토의 후 회의를 마쳤다.

 

회의(8/9, 금)

1. 이상치 처리

데이터에 이상치나 잘못된 값들을 처리하는 것을 공부해보고 있음.

먼저, 학습 data의 column으로 for문을 돌려서 각 열의 dtype과 맞지 않은 값은 NaN으로 대체하는 방식을 생각해 보았음.

 

2.StandardScaler 전처리 +  KNN 모델 + 그리드 서치

오히려 public score가 내려가는 상황이 발생해 사용하지 않을 것.

 

3. RobustScaler로 정규화 + RandomForestClassifier + 그리드 서치

그리드 서치를 하면서 ‘gridSearch.best_score_’로 정확도값을 체크하면 f1-score가 낮게 나올지 체크할 수 있다는 것을 알게 되었습니다.

3주차

회의(8/13, 금)

1. SMOTE 오버샘플링 방식 시도

SMOTE는 NaN값이 있거나, 문자열 값은 들어가면 안 된다는 오류 메시지가 떠서 당시에는 제대로 시도하지 못하였습니다.

→ 이후에 결측치를 처리하고 문자열 값은 원-핫코딩으로 처리해 주면서 SMOTE 방식 사용하였습니다.

 

2. VotingClassifier 앙상블 기법(RandomForest+XGBClassifier)

추가로 그리드 서치 파라미터에  'n_job=-1'을 사용해 CPU의 모든 코어를 사용해 fit(학습)시켰습니다.

4주차

회의(8/18, 일)

팀원들의 일정 문제로 인해 금요일에서 일요일로 조정하였음.

 

1. Feature Selection 기법 사용

corr()로 상관관계가 0.7이 넘는 feature들을 따로 리스트로 만들어 이를 학습시켜 보는 시도 해보았음.

→ ' model.feature_importances_'로 중요한 feature들을 뽑을 수 있음.

 

2. K-means clustering

시도는 해봤지만 사용 전에 표준화를 먼저 해야 하고, 비지도 학습 방법이라 성과가 좋게 나오지 않았던 것 같음.

회의(8/24, 토)

1. 범주형/수치형 전처리 + SMOTE 오버샘플링 + XGB

SMOTE 오버샘플링 이후, XGB 모델의 y값을 0 또는 1 값으로 바꿔야 하는 번거로움이 있고, 같이 사용했을 때의 성능이 좋게 나오지 않았음.

 

2. 제출하기 전에 학습시킨 모델의 성능 기준에 대해 의논해 보자.

정상보다는 이상 데이터를 찾아내는 것이 성능을 향상하는 것에 도움이 될 것이라고 강의에서 학습해 왔기에, 그리드 서치의 정확도 값과 같은 것으로 판단하는 것보다는 'classification_report'로 성능 평가 보고서의 이상 분류 수치를 보고 판단하는 것이 옳다고 생각이 들어 팀원과 의논해 보자고 건의해 보았음.

from sklearn.metrics import classification_report
print(classification_report(test_y, pred_y)

 

3. 범주형/수치형 전처리 + SMOTE 오버샘플링 + VotingClassifier

단일 모델로 했을 때보다 최종 아웃풋의 결과를 확률값을 기반으로 하는 모델인 VotingClassifier 모델을 사용하였던 것이 성능 향상에 큰 도움을 얻었음.

5주차

회의(8/27, 화)

그리드 서치를 사용하는 대신 직접 파라미터를 조정

1회 학습에 40분이 걸리다 보니, 학습률을 조정해 본 결과들을 팀원들에게 설명하면서 각 결과가 적힌 평가보고서를 노션에 기록한 것을 보여주였다.

마감이 8/30 18:00까지여서 27일 회의까지 각자 제출을 시도해 보고 회의 시각에 public score가 가장 높은 팀원의 코드를 남은 기간 동안 디벨롭 시켜보자고 결정했었음.

8/27 회의 20분 전, 내가 우리 팀의 최고 순위인 public 35위를 기록하였고 내 코드를 설명한 후, 다음 회의(8/29)까지 디벨롭을 시도해 보자고 하며 회의를 마쳤다.

 

 

회의(8/29, 목)

나의 파라미터 조정으로 public 점수를 0.01 넘게 올렸지만, 팀원의 추가적인 점수 변화는 X

5명인 팀에 팀당 최대 5회 제출 기회를 주기에, 30일까지 회의를 늘리기에는 일정 문제로 불가해 8/29 회의로 제출을 마무리하기로 하였고, 최종 제출은 내가 맡기로 하였다.

결국 등수는 계속 밀리고 있었고, public 50위까지 밀린 상황이었다.

 

8/30(마감)

내가 최종 제출을 맡았기에 미련이 많이 남아 모델의 파라미터와 코드를 약간씩 조정해 보면서 모델을 학습, 예측시켜 보았지만 점수 진전은 없었다.

결국 8/29와 동일한 점수로 최종 제출을 하게 된 셈이다.

그래서 아쉬운 대로 5시에 제출하고, 생각이 복잡해 운동을 갔는데....

5시 59분에 70위, 6시 00에 71위까지 떨어져서 아쉬움이 컸다.

 

그런데 최종 등수는 final이니 최종 순위를 봤는데..

무려 33위까지 올랐다!!!

솔직히 누를 때 기대를 하지 않고 눌렀는데, 등수가 많이 높아 부모님께도 전화해 자랑했던 것 같다.

이번이 해커톤 팀장으로서 첫 경험이고, 내가 노력해서 쭉쭉 올렸던 코드가 33위까지 올랐다는 것이 너무 뿌듯했고, 이전에 대외활동에 떨어지고, 원했던 중앙 동아리 면접에서 떨어지는 것을 보상해 주는 듯하여 너무 행복했다.

 

비록 100명에는 들지 못했으나, 이전 기수의 후기를 보니 앞에서 본선을 가지 않는 인원이 생기는 등등의 이유로 후순위까지 밀려 데이콘에서 전화가 왔다는 것을 보았다.

그래서 PPT 자료를 준비하며, 본선 선발에 대해 Aimers 담당자분께 문의를 남긴 상태이다.

 

포기하지 않고 꾸준히 한 것이 좋은 결과로 나타나 기분이 너무 좋다.

본선에도 이어져서 좋은 경험을 더 얻어가고 싶은 욕심이 활활 타오르는데..... 붙었으면 좋겠다.........

 

728x90