스터디그룹 대회참여/모듈 스터디 2차(Upstage 대회 참여)
ML 경진대회 개인 보고서 (Feat.Upstage)
김뚱입니다
2024. 1. 31. 05:54
[Fast-Up Report Guide 1을 기반으로 작성]
1. Abstract
- Goal of the Competition
- House Price Prediction | 아파트 실거래가 예측
- 2007.01.01 ~ 2023.06.30 기간의 데이터를 학습데이터로 이용하여, 2023.07.01 ~ 2023.09.26 기간의 데이터를 평가데이터로 구성
- 평가지표는 RMSE를 사용. 회귀 모델이 실제 거래 가격의 차이를 얼마나 잘 잡아내는지 확인
- 따라서 Public 리더보드를 참고하여 private 리더보드(최종)에서 최대한 낮은 RMSE Score를 기록하는 것이 목표
- Timeline
- January 15, 2024 - Start Date
- January 25, 2024 - Final submission deadline
- Description of the work
- 팀원들과 데이터 EDA 진행
- 데이터셋의 컬럼별로 특징 분석 후 피처엔지니어링에 집중
- 학습에 사용할 컬럼들 분리
- 아파트 실거래가에 영향을 미칠 것이라 생각한 피처 추가
- kaggle, dacon에서 열렸던 유사한 대회 참고
- 각자 조사한 내용을 참고
- 간단한 Tree 모델을 사용하여 피처별로 RMSE 값 기록
- 동일한 데이터셋으로 팀원별 코드를 작성하여 RMSE 값 공유
- 팀원별로 하이퍼파라미터 최적화, 모델링을 진행하여 다양성을 높였음
- Public 리더보드 RMSE Score를 참고하여 최종 제출 파일 결정
2. Process : Competition Model
- Describe the structure of your System.
- 데이터 전처리
- 팀 회의에서 유의미한 컬럼들만 분리하여 최종 데이터 셋에 저장
- 결측치 처리에 공공데이터도 사용하였음
- 피처엔지니어링
- 이전가격
- 단기적으로는 직전 시세가 가장 중요함
- 최근 3년간 데이터만 학습하기로 했으므로 동일 아파트, 동일 면적에 대한 직전 거래 가격을 이전 가격 피처로 추가
- 한강과의 거리
- 한강 지나가는 곳의 사각형의 중앙을 기준으로 한강의 위도 계산
- 좌상단 위경도 : 난지한강공원 기준
- 우하단 위도 : 반포수난구조대 기준
- 우하단 경도 : 고덕수변생태공원 기준
- 구별 1인당 평균급여
- 국가통계포털 KOSIS의 시군구별 근로소득 연말정산 신고현황 데이터 활용
- 금액 / 인원 = 1인당 평균급여(구 별)
- 16~21년도의 서울시 구 별 1인당 평균급여 계산
- 가장 가까운 거리에 있는 학교와의 거리
- 아파트에 가까운 학교가 있다면 'target' 값에 영향을 줄 것이라 가정
- 따라서 초, 중, 고등학교에 구분 없이 가장 가까운 학교와의 거리 피처 추가
- 공공데이터의 학교 별 위도, 경도 데이터와 아파트 위도, 경도 데이터를 harversine distance로 계산하여 새로운 피처로 추가
- 버스 정류장과의 거리
- 주변의 교통시설 여부에 따라 집값에 영향이 있을 것이라 가정
- 공공데이터의 위도, 경도 데이터를 이용해서 각 데이터마다 일정 거리 이내에 버스 정류장 이 몇 개가 있는지를 기준으로 버스 정류장의 총합을 계산한 피처 추가
- harversine distance로 계산하였음
- 이전가격
- 최적화
- 팀원별로 코드를 따로 작성하였음
- 제가 사용한 방법
- GridSearchCV를 첫 번째로 사용하여 로컬에서 RMSE 값을 기록
- Optuna를 두 번째로 사용하여 로컬에서 RMSE 값을 기록
- 모델링
- 결과적으로 마지막에 사용한 코드
- 이상치 제거(IQR), Optuna, KFold 사용
- LGBM & Extra Trees Regressor(기본모델) + 선형회귀(메타모델) -> stacking ensemble
- 결과적으로 마지막에 사용한 코드
- 로컬에서의 RMSE 값 기록
- Train RMSE Score : 2052.4353
Train MSE Score : 4212490.7444 - Valid RMSE Score : 10480.6916
Valid MSE Score : 109844895.6052 - Test RMSE Score : 15982.0471
Test MSE Score : 255425828.1306
- Train RMSE Score : 2052.4353
- 결과 예측
- 제출 횟수가 얼마 남지 않은 상태에서 로컬 RMSE 값을 팀원들과 공유하여 제일 낮은 것을 선택하였음
- 제 로컬 RMSE 값이 다른 코드 RMSE 값보다 높았으므로 대회에 최종 제출하지 않았음
- 제출 횟수가 얼마 남지 않은 상태에서 로컬 RMSE 값을 팀원들과 공유하여 제일 낮은 것을 선택하였음
- 데이터 전처리
3. Process : Issues
- Describe the issue that your team faced during the project.
- 모델링보다 피처엔지니어링에 집중하는 것이 결과 향상에 직결될 것이라 생각하였음
- 따라서 사용할 피처를 분류하고 새로운 피처를 추가하였음
- 하지만 피처엔지니어링에 집중할수록 Public 리더보드에서 RMSE 값이 좋지 않았음
- RMSE 값이 베이스라인 코드에 비해 크게 달라지지 않음
- Public 리더보드의 RMSE 값을 기준으로 코드 작성 방향을 설정하였는데, 새로운 시도를 하더라도 RMSE 값이 향상되지 않아서 딜레마에 빠졌음
- Describe the reason for the issue.
- 팀 내부적으로 검토한 결과 Public 리더보드의 RMSE 값이 변하지 않는 이유가 대회 평가 데이터가 잘못되었다고 확신하였음
- 특히 엄효범 님이 공유해 주신 방법이 85K를 기록하였는데, 이 코드로 만들어진 csv 파일을 분석한 결과 고가의 아파트를 낮은 가격으로 예측했는데도 85k라는 점수를 기록했음
- 위 결과에서 높은 가격의 아파트들의 예측값을 따로 학습시킨 결과를 결합하여 제출하였는데, PB score가 더 좋지 않게 나오는 것을 보고 대회 평가가 정확하지 않다고 확신하였음
- 팀 내부적으로 검토한 결과 Public 리더보드의 RMSE 값이 변하지 않는 이유가 대회 평가 데이터가 잘못되었다고 확신하였음
- Describe the possible solution to imporve your project.
- 대회 평가데이터가 잘못되었다고 확신을 가진 뒤 멘토분께 실시간 멘토링을 통해 의문을 제기하였음
- 하지만 대회가 끝날 때 까지 유의미한 피드백을 받지 못함
- 대회 주최자 분과 연락이 닿지 않는다고 하셨음
- 따라서 발표에서 PPT를 통해 자체적으로 테스트한 결과를 공유하여 대회 테스트 데이터가 이상한 점을 공유하였음
- 하지만 대회가 끝날 때 까지 유의미한 피드백을 받지 못함
- 대회 평가데이터가 잘못되었다고 확신을 가진 뒤 멘토분께 실시간 멘토링을 통해 의문을 제기하였음
4. Role
- Describe your role with task in your team.
- [가장 가까운 거리에 있는 학교와의 거리] 피처를 공공데이터를 이용하여 계산하여 추가하였음
- 엄효범님이 공유하신 방법으로 최적화, 모델링 후 결과 기록하여 공유
-
더보기[모든 시도는 전 단계의 코드를 수정]
2020년 이후의 데이터 사용
X = df_train[['전용면적', 'x']]
y = df_train['price']
test = df_test[['전용면적', 'x']]
[Try-0]
SJY_LGBM.ipynb
*효범님 코드 그대로 따라한 코드*
RMSE: 67394.02934576674
MSE: 4541955191.45807
[PBL RMSE : 89689.2585]
[Try-1]
SJY_LGBM_upgrade.ipynb
위 코드에서 baseline의 이상치 제거(IQR)만 추가
이상치 제거(IQR), LGBM 사용
RMSE: 51888.533674683604 (향상)
MSE: 2692419926.9087744 (향상)
[Try-2]
SJY_LGBM_upgrade2.ipynb
이상치 제거(IQR), LGBM, KFold 사용
Average RMSE: 51882.63722090446 (향상-큰 차이 x)
Average MSE: 2692519797.9808455 (향상-큰 차이 x)
[Try-3]
SJY_LGBM_upgrade3.ipynb
이상치 제거(IQR), GridSearchCV, KFold, LGBM 사용
Average RMSE: 51120.51528032164 (향상)
Average MSE: 2614039934.829773 (향상)
[Try-4]
SJY_LGBM_upgrade4.ipynb
이상치 제거(IQR), Optuna, KFold, LGBM 사용
Average RMSE: 44969.722806500955 (향상)
Average MSE: 2024885585.2284265 (향상)
[Try-5] (X)
SJY_LGBM_upgrade5.ipynb
이상치 제거(IQR), Scaler, Optuna, KFold, LGBM 사용
Average RMSE: 45310.52190259858 (감퇴)
Average MSE: 2055687899.101036 (감퇴)
감퇴했으므로 Try-5는 이용하지 않고, Try-6은 Try-4를 기반으로 수정
[Try-6]
SJY_LGBM_upgrade6.ipynb
이상치 제거(IQR), Optuna, KFold
LGBM(기본모델) + 선형회귀(메타모델)-> stacking ensemble
Average RMSE: 32622.845142662834 (크게 향상)
Average MSE: 1064756063.3237922 (크게 향상)
[Try-7]
SJY_LGBM_upgrade7.ipynb
이상치 제거(IQR), Optuna, KFold
LGBM & Extra Trees Regressor(기본모델) + 선형회귀(메타모델)-> stacking ensemble
Average RMSE: 11416.153423597494 (크게 향상)
Average MSE: 130559586.11656937 (감퇴)
[PBL RMSE : 98223.8338]
-
- 팀원들과 공통된 데이터셋을 이용하여 모델링 후 결과 공유
- Describe papers or book chapeters you found relevant to the problem, references to see.
- Explain which are relevant for your Project.
- 케글 대회에서 높은 점수를 기록한 사람들이 공유한 코드들을 참고
- 사용한 모델, 앙상블 방법 참고
- 데이콘 대회에서 수상한 사람들이 사용한 피처들 참고
- 대장아파트 거리, 버스 정류장과의 거리, 한강거리, 학교와의 거리 피처 추가하는데 참고
- 케글 대회에서 높은 점수를 기록한 사람들이 공유한 코드들을 참고
5. Results
- Write the main result of Competition
- 저희 팀의 대회 주요 결과는 평가 데이터셋이 잘못되었다는 것을 증명하기 위해 모든 target 값에 2023.01 ~ 2023.06 기간 동안의 모든 실거래가의 평균을 넣었는데 최종 리더보드에 2등으로 마무리되었습니다.
- Final standings of the Leaderboard
- 최종 리더보드 순위 2위 (평가 데이터 수정 전)
- 최종 리더보드 순위 5위 (평가 데이터 수정 후)
- 최종 리더보드 순위 2위 (평가 데이터 수정 전)
6. Conclusion
- Describe your running code with its own advantages and disadvantages, in relation to other groups in the course.
- 사실 평가 데이터 셋이 변경되기 전 Public RMSE 값이 정확하지 않았으므로 제대로 된 방향을 잡지 못하고 방황
- 따라서 최종 제출한 csv 파일 선택에 문제가 있었고, 평가 데이터 셋이 변경된 이후에는 5위로 떨어짐
- 피처 추가는 대회에 참여한 팀 중에 제일 많이 하였는데, 제대로 활용하지 못하고 마무리된 것이 아쉬움
- Sum up your project and suggest future extensions and improvements.
- 만약 평가 데이터가 제대로 되어 있었다면, 추가한 피처들을 사용하여 여러 ML, DL 모델들을 사용하여 학습한 결과를 제출 후 점수를 기록하여 어떤 방향으로 나아가야 할지 정했을 것이고, 제대로 모델링에 집중할 수 있었을 것이라 생각함