어느새 부스트캠프의 RecSys 도메인에 참여한 지도 7주차가 되었다.
매일매일 코어타임마다 zoom에 접속해 팀원들과 공부도 하고 오피스아워나 마스터클래스를 통해 현업자 분들에게 다양한 인사이트를 공유받기도 했다. 살면서 이렇게 짧은 시간 내에 많은 것을 배우고, 다양한 사람들을 만날 수 있었던 환경도 없었다고 생각한다. 내일부터 Level 02가 시작되는데 가장 회고하기 좋은 시점인 지금 배운 것들과 느낀 것들을 이야기해보고자 한다.
학습 커리큘럼에 대해 이야기해보자면 5주 간 DL/ML의 이론과 코드에 대해 습득했고, 지난 6주차부터 팀원들과 함께 비트코인의 등락률을 예측하는 시계열 경진대회에 참가했다. 짧은 시간 내에 많은 것들을 얻었기 때문에 대회 과정에서 새로 습득한 지식들과 느낀 점 , 또 한계점 Problem과 다음 프로젝트에서 적용하고 싶은 Try들을 정리해볼 필요성을 느껴 두런두런 시간에 배운 KPT 회고를 작성해본다!
ML 경진대회
처음 다뤄보는 시계열 데이터와 처음 참가하는 경진대회였는데, 이번 프로젝트를 통해서 두 분야 모두에서 감을 잡은 것 같아서 좋았다.
rolling / shift 피처와 같이 시계열 도메인에 특화된 피처들을 생성하는 것도 재밌었고 그에 따라 상승/하락하는 성능을 비교 평가 하는 것도 성취감이 있었다.
KFold 교차검증, upsampling, Boosting 모델 등 이것저것 시도해보았지만 가장 기억에 남는 실험은 리더보드 마감 1일을 앞둔 시점에서 진행한 실제 target인 등락률이 아닌 close 가격, 종가 예측을 위한 모델링 실험이다. target값은 close값에 따라 결정되기 때문에, test data에는 제공되지 않는 close 가격을 예측해 결과를 반영하는 흐름이다.
시계열 도메인의 특성을 반영하기 위해 seq data를 입력으로 받는 LSTM 모델을 사용했다. 1주차에 배웠던 torch 라이브러리를 써먹어보고 싶어서 torch 라이브러리로 구현을 했는데 좋은 복습이었던 것 같다. (참고 레퍼런스 : https://pseudo-lab.github.io/Tutorial-Book/chapters/time-series/Ch4-LSTM.html)
위는 하이퍼파라미터들을 조절해가면서 validation loss 값이 가장 작은 파라미터로 선정한 close price inference 결과 그래프이다. 너무 변동성이 커서 멘토님께 여쭤본 결과,
1. outlier의 존재 -> 스케일러에 영향
2. 모델 학습 단계에서 regularization 레이어 추가
3. sequence length의 조절 (기존에는 12시간)
위와 같은 시도들을 추천해주셨다! 시간이 부족해서 해당 대회에 적용해보지는 못했지만 다음에 시계열 도메인을 다룰 일이 있으면 이런 인사이트들을 적용해볼 것이다. 또 경력자에게 자문하는 것이 얼마나 중요한 것인지 다시금 깨달았다. . . 😇
Keep
- 교보재를 적극적으로 활용했다. 내가 해보고 싶은 실험이 있을 때, 적절한 자료를 찾아서 적용하는 것 또한 실력이다. 대회 특성상 제한적인 시간을 효율적으로 운용하기 위해서는 적절한 레퍼런스를 탐색하고, 선정해 내 상황에 맞게 적용해야 한다.
- 궁금한 점이 있으면 팀원들이나 멘토님에게 적극적으로 도움을 요청했다. 초반에는 "팀원들도, 멘토님도 바쁠텐데..." 하는 생각도 있었고 부끄러운 마음도 있었기 때문에 혼자 GPT와 씨름한 시간이 많았는데, 중후반으로 갈수록 다양한 의견을 받아보는 것이 중요하다는 것을 깨닫고 주변인들에게 막히는 부분에 대해서 많이 물어보아서 더 다양한 시도들을 해볼 수 있었다.
Problem
- 협업의 효율성 면에서 아쉬웠다. 협업 tool을 거의 사용하지 못했고 Slack 채널이나 피어세션 시간을 이용해 소통했기 때문에 실험 관리가 원활하지 못했다. 팀원들과 아자아자 하는 분위기는 잘 조성되어 유지되었지만, 효율적으로 성능 상승을 위한 방법을 탐색하지는 못했다.
- 또한 최종적으로 사용한 피처가 500개 남짓했는데, 무분별하게 사용했던 것 같다.
Feature Selection 과정이 중요한지 아닌지에 대해서도 모두가 확신이 없었고, 대부분의 팀원들이 baseline 코드에서 사용된 피처들을 기반으로 shift/rolling 엔지니어링을 했다. 그러나 다른 팀들의 결과를 보니 회귀분석의 변수 importance로 파악한 팀도 있었어서 아예 무시할 만한 정보는 아니었던 것으로 판단!
Try
다음 프로젝트에서는 본격적으로 EDA를 진행하기 이전에 툴과 환경을 세팅해두기로 팀원들과 이야기를 나눴다.
1. 모듈화
- 단일한 python 파일에 자주 사용되는 기능들(train/val seperate, scalizer, 이상치/결측치 처리, csv 파일 변환)을 모듈화해서 모두가 통일된 환경에서 모델링을 진행하기로 했다.
2. GitHub 버전관리
- 팀 단위의 경진대회인만큼, 다양한 시도들을 적용한 실험을 하게 될 것이다. 이번 프로젝트에서는 개인 작업 결과별로 branch를 나누었지만, 다음 프로젝트에서는 모델 별로 branch를 나누어 서로의 작업현황과 결과를 더 효율적으로 확인할 수 있을 것이다.
3. 실험 결과 정리
- WandB - 모델별로 지표, 성능 비교
팀원들과 내가 노력한 바에 비해서는 조금 아쉬운 성적이었지만, 다음번엔 public score에만 집착하지 않고 일반화된 모델 성능에 더 집중해서 좋은 성적을 내기로 팀원끼리 약속했다.
⭐️ Level 02 목표 ⭐️
엉덩이를 더 오래 붙이고 나 자신을 탐구하는 것이 목표!
'AI' 카테고리의 다른 글
[Python] 자연어처리 - TfidfVectorizer (0) | 2024.07.30 |
---|---|
[RecSys] Latent Factor 알아보기 (0) | 2024.03.26 |
[NLP] 언어모델의 평가 지표 - PPL, BLEU score (2) | 2023.11.21 |
[PyTorch] Transformers 라이브러리 #2 (2) | 2023.11.01 |
[PyTorch] Transformer 라이브러리 #1 (0) | 2023.10.30 |