[부스트캠프 AI Tech 7기] Week 7

jinnk0·2024년 9월 27일

7주차 회고🫥

이번주는 프로젝트에 몰입했던 주간이었다.🫠
부스트캠프를 시작하고 처음으로 진행하는 프로젝트여서, 끝나고나니 여러모로 미흡한 점이 많았던 것 같아 아쉬움이 많이 남는다.
가장 아쉬운 부분은 너무 성과에만 집중하느라 본질적인 부분을 많이 간과한 부분이다.
당장의 검증 스코어, 테스트 스코어를 높이는 데에만 집중하다보니, 폭넓게 EDA를 해보며 데이터를 파악하고, feature engineering을 시도해보지는 못한 것 같다.
특히 여러 관점에서 데이터를 살펴보고 다양한 방식으로 접근해봤다면 좋았을 것 같은데, 너무 한 가지 관점, 한 가지 방향으로만 프로젝트를 진행한 것 같다.
그래도 첫번째 프로젝트를 진행하며 많은 교훈을 얻었으니, 다음 프로젝트 때는 개선해서 더 좋은 결과를 만들고 싶다.😢

비트코인 상승/하락 시계열 분류 예측

처음 데이터와 baseline 코드를 받았을 때 가장 먼저 했던 것은, 데이터와 도메인에 대한 파악이었다. 비트코인이라는 도메인에 관한 지식이 전무했기 때문에 데이터를 하나하나 뜯어보면서 데이터의 컬럼명과 해당 컬럼이 의미하는 바가 무엇인지를 도메인 지식과 관련지어 파악하려고 노력했다.

baseline 코드를 살펴보니, 예측해야 하는 target 클래스와 연관성이 높은 피처를 feature engineering을 통해 파생 지표를 만들고, 최소 1시간 전부터 최대 24시간 전까지의 데이터를 shift해서 피처로 사용하고, LightGBM 모델을 이용해 target 클래스를 예측하고 있었다.

이를 베이스로 하여 baseline의 코드를 개선해보는 쪽으로 방향을 잡고 데이터를 살펴보니 target 클래스를 예측하는데 가장 유효할 것 같은 중요한 피처는 종가였지만, 종가는 훈련 데이터셋에는 포함되어 있어도 테스트 데이터셋에는 포함되어 있지 않았다. 때문에 baseline의 코드에도 종가를 훈련 시 사용하지 않고 있었다. 하지만 다른 피처들과 유의미한 상관관계를 찾기 힘든 target 클래스와는 달리, 종가는 높은 상관관계를 가진 피처들이 있었고, 이를 이용해 종가를 예측하여 테스트 데이터셋에도 종가를 추가한다면, 종가를 target 클래스의 예측에 사용할 수 있기 때문에 정확도가 높아지지 않을까하는 가설을 세웠다.

종가를 예측하기 전에, 모델의 성능을 보다 명확하게 확인하기 위해 이동평균으로 결측치를 처리하고, 이동평균의 표준편차를 계산하여 표준편차보다 2배 이상 차이나는 데이터를 이상치로 보고 이동평균으로 대체하는 방식으로 이상치를 처리한 뒤 Standardization을 이용해 정규화했다.

그리고 종가를 예측하기 위해, 종가와 높은 양의 상관관계를 가진 피처가 존재하기 때문에 이를 이용해 회귀 모델로 종가를 예측하는 방법을 선택했다. 훈련 시 사용하는 피처들의 데이터 분포가 대체로 불규칙하고, 비선형적인 관계를 가진 값들이 많았기 때문에 비선형적인 관계도 잘 예측할 수 있는 RandomForestRegressor를 이용하여 종가를 예측하는 회귀 모델을 만들었다.

그 결과 검증 스코어가 이전보다 오른 것을 확인할 수 있었다. 그 이후 결과를 좀 더 개선해보기 위해 최종 모델을 LigthGBM이 아닌 XGBoost, Random Forest 등 다양한 모델로 변경해보기도 하고, 소프트 보팅과 스태킹 앙상블을 시도해보기도 했지만 이후로는 유의미한 성과를 얻지 못했다.

프로젝트를 진행하고 얻은 교훈

프로젝트를 진행하면서 중요성을 느꼈던 것, 앞으로 유의하여 개선하면 좋을 것 같은 부분이 몇 가지 있었다.

📍첫번째는 도메인에 대한 이해의 중요성이었다. 도메인에 대한 지식이 없으니 데이터를 어떤식으로 해석해야 할지, 컬럼 간에 어떤 관계가 있는지 등에 대해 명확히 파악하기 어려웠고, 그래서 feature engineering을 시도하고 다양한 파생 지표를 만들어보아도 해당 지표가 어떤 방식으로 결과값에 영향을 미치는지, 어떤 컬럼과 어떠한 관계가 있는지를 분석하기 어려웠다.

📍두번째는 적절한 검증 데이터셋의 선정이었다. 검증 데이터의 정확도를 보고 모델의 성능이 올랐다고 판단하여 테스트 데이터의 정확도를 측정해보면, 오히려 떨어지는 경우가 많았다. 프로젝트가 끝난 뒤 원인에 대해 생각해 보았을 때, target 클래스 자체가 네 클래스 중 두 클래스의 비중이 크고, 다른 두 클래스는 비중이 적은 불균형한 분포를 가진 데이터였고, 이를 검증 데이터셋에 반영하지 못해 검증 데이터의 정확도를 신뢰할 수 없게 된 것이 아닌가 하는 생각이 든다.

검증 데이터의 정확도를 신뢰할 수 없으니, 오르는 검증 데이터의 정확도를 보고도 정확히 모델의 성능이 좋아진 것인지 판단할 수가 없어 이후에 새로운 개선 방향을 잡기가 어려웠다.

프로젝트를 진행하며 아쉬웠던 점

프로젝트가 끝나고 가장 아쉬웠던 점은, 프로젝트가 시계열 분류 예측이었던 만큼 시계열의 특성을 좀 더 명확히 파악하고 이용해보았으면 좋았을텐데 그러지 못했다는 것이다. 그리고 한 가지 가설을 세우고 결과를 명확히 분석하고 파악한 뒤 그 결과를 바탕으로 새로운 방향을 잡고 목표를 명확히 했어야 했는데, 어떤 식으로 방향을 잡아야할 지 어떤 목표를 세워야할 지 파악하지 못하고 갈팡질팡했던 것이 가장 큰 문제였던 것 같다.

다음 프로젝트에서 도전해보고 싶은 것

🚩도메인의 특성을 이해하고 데이터 EDA하기
🚩데이터의 특성을 잘 파악하여 방향성과 목표를 명확하게 정하기
🚩적절한 검증 데이터셋을 선정하기

0개의 댓글