-
아파트 실거래가 예측 경진대회 회고프로그래밍/Project 2024. 9. 23. 23:31
경진대회 개요
Upstage AI Lab 4기의 첫 경진대회인 House Price Prediction 경진대회는 주어진 데이터를 활용해 서울의 아파트 실거래가를 효과적으로 예측하는 모델을 개발하는 대회이다.
대회에서 제공된 데이터셋을 기반으로 모델을 학습하고, 서울시 각 지역의 아파트 매매 실거래가를 예측하는 데에 선형 회귀, 결정 트리, 랜덤 포레스트, 딥 러닝과 같은 다양한 Regression 알고리즘을 사용할 수 있다.
이 대회의 목표는 정확하고 일반화된 모델을 개발해 아파트 시장의 동향을 미리 예측하는 것이다.
모델의 성능을 평가하는 지표로는 예측된 값과 신제 값 간의 평균 편차를 측정하는 RMSE(Root Mean Squared Error)를 사용한다. 즉, 회귀 모델이 실제 거래 가격의 차이를 얼마나 잘 잡아내는지 측정하는 것이다.
우리 팀이 선택한 모델
우리 팀은 여러 모델들을 테스트해 본 결과 비선형성을 보이는 데이터와 이상치에 강한 모습을 보이는 XGBoost를 선택했다.
- LightGBM : 가장 처음 사용해봤지만 여러 데이터도 추가해 보고 파라미터를 조정해 봤음에도 성능에 있어서 큰 개선을 보이지 않았다.
- LightGBM + XGBoost + RandomForest 앙상블 : LightGBM을 적용했을 때 전용면적이 좁은 구간에서는 좋은 모습을 보였지만 전용면적이 넓은 구간에서는 예측을 잘하지 못하는 모습을 보여서 이상치에서 강점을 보이는 XGBoost와 RandomForest를 이용해서 보완을 하고자 했지만 오히려 훨씬 안 좋아진 성능을 보였다.
- XGBoost : LightGBM와 유사하게 전용면적이 좁은 구간의 예측에 강점을 보였고, LightGBM보다 전용면적이 넓은 구간의 예측에서도 미세하지만 조금 더 잘 예측하는 모습을 보여 최종 선택했다.
추가로 선택한 데이터
부동산에는 여러가지 영향을 미치는 요소들이 있고, 그만큼 추가할 수 있는 데이터의 종류가 많다고 생각했다.
그렇게 선택한 데이터는 초중고 학교 위치 데이터, 백화점 위치 데이터, 호텔 위치 데이터 등 주로 위치 데이터를 이용한 데이터들이었다.
그렇게 추가한 데이터들 중 위치데이터보다 좀 더 크게 영향을 미친 데이터는 서울시 각 구별 GDP 데이터였다.
물론 위 데이터는 최종 학습 후 학습 과정에서 결과값을 모델에서 예측할 때 사용된 데이터를 기준으로 산출된 중요도이기 때문에 좀 더 성능이 좋게 나온 모델의 경우 중요도가 다르게 나올 수 있다.
파라미터 조정
모델의 파라미터를 여러번 조정하는 과정에서 모델의 성능에 가장 크게 영향을 미친 건 학습률(learning_rate)이었다.
학습률을 너무 높게 잡거나 너무 낮게 잡으면 모델의 성능이 제대로 나오지 않을 수 있다는 점을 유의하고, 학습률을 낮게 잡을수록 학습 시간이 오래 걸리므로 학습 시간도 고려하면서 조정해야 했다.
최종 결과
우리 팀의 최종 순위는 6등이었다.
제출 마감 기준 중간 순위는 5등이었는데 최종 순위 산출에서 사용되는 데이터에서 중간 순위 6등이던 팀의 모델이 좀 더 잘 예측한 구간이 있었던 것 같다.
느낀 점
최종 순위 5등과의 점수 차이가 500 정도밖에 남지 않아서 정말 아쉬웠다.
또, 대회가 끝난 뒤에 기본으로 제공되었던 데이터와 추가로 수집했던 데이터를 좀 더 잘 활용할 수 있는 방법들이 떠올라서 더 아쉬웠던 것 같다.
처음에는 기본으로 제공되는 데이터만으로 모델의 성능을 최대한 끌어내보고자 했다.
그래서 train, test 데이터셋의 좌표값의 결측치를 모두 보완하고 진행했는데, 생각보다 지하철이나 버스정류장 데이터가 크게 영향을 미치는 것 같진 않았다.
거기에 우리가 생각하기에 머신러닝 모델이 데이터를 학습하는 데 있어서 필요가 없으면서 예측을 하는데 방해가 될 거라고 생각했던 데이터들을 모두 제외하고 학습시켰더니, 오히려 극단적으로 성능이 안 좋아지는 모습을 보여서 그저 상식적으로 의미가 없어 보인다고 모두 제외하면 안 되겠다는 걸 알게 됐다.
머신러닝을 제대로 활용한 프로젝트를 처음으로 해봐서 아쉬운 성적을 냈다고 하기에는 사실 크게 어렵지 않을 거라고 안일하게 생각한 게 문제였다고 생각한다.
처음 해보는 만큼 넉넉하게 시간을 가지고 진행했어야 했는데, 이미 꽤 진행된 팀들이 많은 시기에도 우리 팀은 강의를 듣는 것에만 급급해서 프로젝트에 손을 대기는커녕 train 데이터셋과 test 데이터셋의 데이터가 어떤 구조로 이루어져 있는지, 결측치는 어떤 부분에서 어떻게 들어가 있는지도 보지 않았던 것이 화근이었다.
그래서 대회가 끝나고 데이터들을 제대로 활용할 수 있는 방법이 생각났을 때 좀 더 아쉬움을 느꼈던 게 아닌가 싶다.
다음 프로젝트나 경진대회를 진행할 때는 시도해 볼 수 있는 방법들 중 최대한 많은 것들을 적용해 볼 수 있도록 시간 관리에 각별히 주의해야겠다.
'프로그래밍 > Project' 카테고리의 다른 글
[RecSys Project] 고객 맞춤 상품 추천 시스템 만들기 (0) 2025.01.11 [NLP Project] 일상 속 대화 적절하게 요약하기 (0) 2025.01.08 [CV Project] 육안으로 분간하기도 힘든 문서 딥러닝으로 분류하기 (0) 2024.11.12 ML Ops 음악 추천 시스템 프로젝트 회고 (4) 2024.10.16 LangChain을 활용한 LLM 애플리케이션 개발 프로젝트 회고 (1) 2024.09.01