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

이번 프로젝트에서 내 학습 목표는 실험 내용과 결과를 명확하게 기록하여 관리하고, 재현성을 확보하는 것이었다. 또한 data leakage에 유의함과 동시에 valid score에 대한 신뢰성을 확보하고자 했다.
- 모델 실험 시마다, 사용한 피처와 모델, 하이퍼파라미터와 사용한 코드들을 포함해 해당 실험의 결과인 valid score와 public score를 모두 기록했다.
- 실험 재현성을 확보하기 위해 모두 동일한 랜덤 시드를 사용하고, 사용한 시드 번호를 저장해두었다.
- valid, test dataset의 내용이 학습 과정에 포함되지 않도록 clustering 과정과 같은 leakage가 발생할 수 있는 부분에서 train, valid, test dataset을 철저하게 분리하여 사용했다.
feature engineering 부분에서는 두 가지 관점에서 새로운 피처를 추가하여 모델을 개선했다.
modeling 부분에서는, 내가 개선을 시도할 때는 XGBoost에 중요도가 높은 상위 20개의 피처를 사용했을 때 성능이 괜찮다는 것이 확인된 상태였다. 그래서 해당 모델을 그대로 사용하되, 성능을 좀 더 끌어올리기 위해 데이터 샘플에 공간적 자기 상관이 존재할 것이라는 가설을 바탕으로 이를 반영해보고자 했다.
공간적 가중치 행렬을 생성하는 과정에서 있었던 고민과 구현 과정은 따로 링크로 첨부하겠다.
기존의 모델에 공간적 가중치를 부여했을 때 성능이 좋아지는 부분에서 데이터에 종속변수에 대한 공간적 자기 상관이 존재할 가능성이 높다는 가설을 뒷받침할 수 있었다.
이번 프로젝트에서는 저번 프로젝트에서 아쉬웠던 부분인 실험 결과 기록 및 관리에 대한 부분을 개선해보기 위해 다양한 시도를 해보았다. 노션에 우리 팀의 컨벤션을 명확히 지정하고, 실험 내용과 결과에 대해 기록하여 팀원들과 공유했다. 그리고 깃허브 브랜치를 컨벤션에 따라 나누고, 코드를 모듈화하여 나중에 정리하기 쉽도록 했다. 그 결과 실험한 모델과 그 내용에 따라 결과를 바로 확인할 수 있어서 실험 결과들을 분석하고 최종적으로 좋은 성능을 내는 모델을 결정하기 용이했고, 서로 진행하고 있는 내용을 노션에 기록해두어서 비효율적으로 동일한 작업을 겹쳐서 진행하는 일이 없도록 할 수 있었다.
공간적 행렬을 생성하는 과정에서 공간적 가중치 행렬이라고 해서 위도, 경도에 따른 거리만 고려하기보다는 built year 등과 같은 피처를 포함해서 계산했다면 좀 더 정확한 가중치 행렬이 만들어지지 않을까하는 아이디어를 떠올렸었다. 하지만 가중치 행렬을 생성하는 과정이 너무 오래걸렸기 때문에 시간적인 문제로 아이디어를 테스트해보거나 반영해보지 못했다.
데이터셋의 크기나 그에 따른 소요시간 등을 고려하지 못해서 모델이 돌아가는 동안 비는 시간을 잘 활용하지 못한 것이 아쉽다.
데이터셋의 크기가 클 때는, 새로운 아이디어나 개선점을 적용할 때 처음부터 전체 데이터에 적용하기 보다는 적당한 크기의 샘플을 뽑아 테스트해본 뒤 전체 데이터에 적용해야 할 것 같다.