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

jinnk0·2024년 10월 25일

10주차 회고

이번 프로젝트는 저번 프로젝트에서 아쉬웠던 점이 많았고, 아쉬웠던 부분을 개선하기 위해 많은 부분을 노력했던 프로젝트였다. 노력한만큼 결과도 만족할만한 성과가 나와서 뿌듯했지만, 다음 프로젝트에서 좀 더 개선해야 할 부분도 생각해봐야 할 것 같다.

이번 프로젝트에서의 목표와 달성하기 위한 변화

이번 프로젝트에서 내 학습 목표는 실험 내용과 결과를 명확하게 기록하여 관리하고, 재현성을 확보하는 것이었다. 또한 data leakage에 유의함과 동시에 valid score에 대한 신뢰성을 확보하고자 했다.

  • 모델 실험 시마다, 사용한 피처와 모델, 하이퍼파라미터와 사용한 코드들을 포함해 해당 실험의 결과인 valid score와 public score를 모두 기록했다.
  • 실험 재현성을 확보하기 위해 모두 동일한 랜덤 시드를 사용하고, 사용한 시드 번호를 저장해두었다.
  • valid, test dataset의 내용이 학습 과정에 포함되지 않도록 clustering 과정과 같은 leakage가 발생할 수 있는 부분에서 train, valid, test dataset을 철저하게 분리하여 사용했다.

내가 모델을 개선한 방식

Feature Engineering

feature engineering 부분에서는 두 가지 관점에서 새로운 피처를 추가하여 모델을 개선했다.

  • 첫번째는 타겟 자체의 위도, 경도에 대해 클러스터링을 하여 해당 군집에 대한 피처를 추가했다. 클러스터링 결과에 따른 군집과, 포함되는 군집의 중심(centroid)과 데이터 샘플 간의 거리를 최종 피처로 추가했다.
  • 두번째는 타겟의 주변 환경에 대한 피처를 추가했다. 타겟의 위치를 중심으로 반경 2km 이내의 공원 면적 총합, 학교 개수, 1km 반경 지하철역의 개수, 가장 가까운 지하철역까지의 거리 등을 추가했다.

Modeling

modeling 부분에서는, 내가 개선을 시도할 때는 XGBoost에 중요도가 높은 상위 20개의 피처를 사용했을 때 성능이 괜찮다는 것이 확인된 상태였다. 그래서 해당 모델을 그대로 사용하되, 성능을 좀 더 끌어올리기 위해 데이터 샘플에 공간적 자기 상관이 존재할 것이라는 가설을 바탕으로 이를 반영해보고자 했다.

  • 공간적 자기 상관을 반영하기 위해 공간적 가중치 행렬을 생성했다. 데이터셋의 크기가 너무 커서 이를 모두 메모리에 올릴 수 없기 때문에 데이터셋을 청크 단위로 분할하여 데이터 샘플과 나머지 데이터 샘플 간의 공간적 가중치를 계산하여 희소 행렬로 저장하는 방식으로 메모리를 관리하며 가중치 행렬을 생성했다. 가중치는 거리 기반으로 생성하되, 1/거리의 가중치를 모두 합했을 때 1이 되도록 설정했다.
  • 공간적 가중치를 위도, 경도를 기준으로 생성했기 때문에 면적에 따른 전세가 차이를 고려하지 못한다는 부분을 생각해서 면적 당 전세가를 구한 뒤, 이를 가중치 행렬과의 행렬곱을 통해 가중 평균을 구하여 피처로 추가했다.

공간적 가중치 행렬을 생성하는 과정에서 있었던 고민과 구현 과정은 따로 링크로 첨부하겠다.

공간적 가중치 행렬(Spatial Weight Matrix) 구현 과정

개선한 모델의 성능과 평가

기존의 모델에 공간적 가중치를 부여했을 때 성능이 좋아지는 부분에서 데이터에 종속변수에 대한 공간적 자기 상관이 존재할 가능성이 높다는 가설을 뒷받침할 수 있었다.

이전 프로젝트에서 아쉬웠던 점에 대해 이번 프로젝트에서 개선한 점

이번 프로젝트에서는 저번 프로젝트에서 아쉬웠던 부분인 실험 결과 기록 및 관리에 대한 부분을 개선해보기 위해 다양한 시도를 해보았다. 노션에 우리 팀의 컨벤션을 명확히 지정하고, 실험 내용과 결과에 대해 기록하여 팀원들과 공유했다. 그리고 깃허브 브랜치를 컨벤션에 따라 나누고, 코드를 모듈화하여 나중에 정리하기 쉽도록 했다. 그 결과 실험한 모델과 그 내용에 따라 결과를 바로 확인할 수 있어서 실험 결과들을 분석하고 최종적으로 좋은 성능을 내는 모델을 결정하기 용이했고, 서로 진행하고 있는 내용을 노션에 기록해두어서 비효율적으로 동일한 작업을 겹쳐서 진행하는 일이 없도록 할 수 있었다.

한계와 아쉬웠던 점

공간적 행렬을 생성하는 과정에서 공간적 가중치 행렬이라고 해서 위도, 경도에 따른 거리만 고려하기보다는 built year 등과 같은 피처를 포함해서 계산했다면 좀 더 정확한 가중치 행렬이 만들어지지 않을까하는 아이디어를 떠올렸었다. 하지만 가중치 행렬을 생성하는 과정이 너무 오래걸렸기 때문에 시간적인 문제로 아이디어를 테스트해보거나 반영해보지 못했다.
데이터셋의 크기나 그에 따른 소요시간 등을 고려하지 못해서 모델이 돌아가는 동안 비는 시간을 잘 활용하지 못한 것이 아쉽다.

다음 목표와 개선 사항

데이터셋의 크기가 클 때는, 새로운 아이디어나 개선점을 적용할 때 처음부터 전체 데이터에 적용하기 보다는 적당한 크기의 샘플을 뽑아 테스트해본 뒤 전체 데이터에 적용해야 할 것 같다.

0개의 댓글