[Upstage AI Lab] 8주차 - ML-경진대회
[Upstage AI Lab] ML-경진대회 회고
House Price Prediction
Upstage AI Lab 의 ML 경진대회에 대한 주요 내용과 회고록 내용
1. 개요
House Price Prediction 경진대회는 서울시 아파트 실거래가를 예측하는 모델을 개발하는 대회다.
Project Overview
- Project Duration: 2025.05.01 ~ 2025.05.15
- Team: 5명
- Submission: 9,272개의 input에 대한 예상 아파트 거래금액
- Evaluation Metric: RMSE(Root Mean Squared Error)
2. 주요 역할
본 대회는 팀 프로젝트로 진행되었으며, 이 글에서는 내가 맡았던 주요 작업과 전략적 접근에 대해 기술한다.
- Data PreProcessing
- 행정구역별 공공데이터 수집, 주소 기반 위경도 변환 (카카오 API 활용)
- 아파트 단지와 시설물 간의 거리 계산
- 결측치를 RandomForest 모델로 예측 보간
- 전처리 코드 및 데이터를 팀원들에게 공유
- EDA
- 수치형 변수들의 정규성 확인
- 주요 변수 분포 및 이상치 확인
- 범주형 변수별 평균 거래가 분석
- Feature Engineering
- 지하철, 버스, 마트 등 주변 인프라 밀집도 파생 변수 생성
건축년도 및 거래 시점을 기반으로 경과 연도, 분기 등 파생 날짜 변수 생성
변수 선택 단계에서, Spearman 상관계수와 Mutual Information Score를 활용하여
타겟과의 비선형 상관성 및 순위 기반 관계를 분석인코딩 전 단계에서 범주형 변수와 타겟 변수 간의 통계적 독립성을 검정하기 위해
Kruskal-Wallis H-test를 적용 타겟 분포에 유의미한 차이를 유발하는 변수만 선별하여 인코딩에 반영- 선별된 범주형 변수에 대해 Label Encoding 및 Frequency Encoding(출현 비율 기반)을 혼합 적용하여 트리 계열 모델에 적합하도록 수치형 변수로 변환
- Modeling
- Tree-based 모델 5종 성능 비교 (LightGBM, XGBoost, CatBoost 등)
- K-Fold 교차검증 및 베이지안 최적화 기반 하이퍼파라미터 튜닝
- 최종 제출 전략
- 성능이 우수한 TOP3 모델들에 대해 Soft Voting Ensemble을 적용하여 최종 결과 제출
3. Data Set
4개의 Data Set이 제공되며, 외부 데이터 수집도 가능하여 별도로 수집해서 진행했다.
제공 받은 데이터
Data Set | 설명 | Rows | Columns |
---|---|---|---|
Train.csv | - 아파트 거래 데이터 (Target Feature 포함) | 1,118,822 | 52 |
Test.csv | - 위와 동일 (Target Feature 제외) | 9,272 | 51 |
Subway_feature.csv | - 서울시 지하철 승강장의 주소, 위도, 경도 데이터 | 768 | 5 |
Bus_feature.csv | - 서울시 버스 승강장의 주소, 위도, 경도 데이터 | 12,584 | 6 |
외부 수집 데이터
- 아래 표에서 볼드 처리된 데이터들은 주소가 있지만 좌표값이 없기에 카카오 API를 사용해 위도, 경도 수집
Data set | 설명 | Rows | Columns |
---|---|---|---|
Address_xy.csv | - 번지 주소 기준 위도, 경도 데이터 (결측값 포함) | 44,118 | 23 |
예금취급기관_가계대출.csv | - 예금 데이터 | 218 | 9 |
지가지수.csv | - 지가지수 데이터 | 52,771 | 8 |
Crime_pop_money.csv | - 서울시 구별 5대 범죄율, 인구수, 평균 소득 데이터 | 25 | 22 |
Garden.csv | - 서울시 구별 공원명, 공원 주소 (한강 포함) | 141 | 4 |
School.csv | - 서울시 구별 초·중·고·대학교 위치 데이터 | 1,320 | 6 |
Hospital.csv | - 서울시 구별 병원 위치 데이터 | 21,485 | 6 |
Movie.csv | - 서울시 구별 영화관 위치 데이터 | 93 | 5 |
Mart.csv | - 서울시 대규모 점포(대형마트, 백화점 등) 데이터 | 1,012 | 6 |
Price.csv | - 서울시 구별 주택가격지수, 지가변동률, 금리, 기대인플레이션 등 | 5,025 | 10 |
GDP.csv | - 취득, 재산, 지방소득 데이터 | 1,187 | 6 |
4. 최종 결과
Public Score 에선 8위를 했지만 Private Score 에서는 4위로 마무리했다.
- Public Score: 16681.1584
- Private Score: 11593.6103
회고
이 섹션은 Upstage AI Lab ML 경진대회를 통해 경험한 문제와 해결과정에 대한 회고를 담았다.
문제 & 해결 과정
문제
대회 초반 Hold-Out 기준으로 모델을 검증했을 때 RMSE가 5,000 ~ 7,000 수준으로 나왔지만 실제 제출 결과는
약 3~4배 안 좋게 나왔다. 과적합인줄 알아서 K-Fold 교차검증을 통해 확인해 봐도 과적합 문제는 아니였다.
해결 과정
Train/Test를 살펴보니 아래와 같이 구성 돼 있었다.
- Train Data: 2007년 ~ 2023년 6월
- Test Data: 2023년 7월 ~ 9월
즉, 완전히 분리된 시계열 구조였으나 이를 고려하지 않고 임의의 Hold-Out만으로 모델을 검증한 것이 문제였다.
해서 Time-based split 기준으로 검증셋을 2023.05 ~ 2023.06 설정하고 학습 및 평가를 한 결과
성능 차이가 대폭 감소하였다.
인사이트
아쉬웠던 점
모델링 초기엔 당연하다는 듯이
train_test_split
함수를 사용하여 단순 Hold-Out 방식으로 검증을 시작했다.
이로 인해 랜덤 분할된 검증셋을 쓴 결과 점수는 좋았지만, 제출 점수는 훨씬 더 안 좋게 나오는 현상이 반복되었다.
처음에는 이를 과적합 문제로 오판하고 K-Fold 교차검증에 많은 시간을 쏟았지만, 뒤늦게 검증 방식이 시계열 단절을 고려하지 않은 것이 문제임을 깨닫고, 변수 선택, 파라미터 튜닝 등 다양한 실험을 시도하지 못한 점이 아쉬웠다.
알게 된 점
단순히 점수가 높은 검증 방식을 찾는 것이 중요한 것이 아니라, 데이터의 구조와 분포 특히 시계열 문제에서는 시간 흐름의 연속성을 이해하고 그에 맞는 검증 전략을 설계해야 신뢰할 만한 평가 지표를 얻을 수 있다는 것을 배웠다.
올바른 검증 방식 없이는 하이퍼파라미터 튜닝, 피처 선택 등 전체 모델링 과정이 왜곡될 수 있다는 점도 실감했다.