1. 대회 설명
- 목표: 다양한 고객 정보를 바탕으로 특정 타깃 값을 예측하는 머신러닝 모델 개발
- 문제 유형: 회귀
- 데이터 배경
-> 고객의 신상 정보, 대출 관련 특성, 신용 관련 수치 등 다차원적인 피처로 구성
-> 일부 변수에 결측값 존재
-> 수치형, 범주형 변수 혼합
2. 성능 평가 방식 이해
- MSE(Mean Squared Error): 큰 오차에 민감함
- MAE(Mean Absolute Error): 직관적으로 해석되며 이상치에 강함
- MAE, MSE에 따른 성능 차이를 통해 평가 지표 선택의 중요성 체감
3. 데이터 전처리
3-1) EDA
- id 컬럼 제거
- train과 used_cars 데이터를 수직 병합하여 학습용 데이터 확장
- 문자형 숫자 처리: milage, price 컬럼에서 쉼표와 문제 제거 후 정수형으로 변환
3-2) Data Cleansing
범주형 컬럼 정제
- model, engine, transmission, ext_col, int_col 컬럼에서 등장 빈도가 기준(100) 미만인 값들은 "noise"로 치환
3-3) Feature Engineering
연식 기반 파생 변수
- Vehicle_Age: 현재 연도 - 모델 연도
- Mileage_per_Year: 주행거리 / 연식
- milage_with_age: 연식별 평균 주행거리
브랜드 기반 변수
- Is_Luxury_Brand: 고급 브랜드 여부 (예: Mercedes-Benz, BMW 등 15개 브랜드 지정)
모델 성능 비교 변수 추가
- LGBM 회귀 모델(MAE, MSE 기준)의 예측값을 각각 저장
-> LGBM_MAE: MAE 기준 모델의 OOF 예측값
-> LGBM_MSE_diff: MSE 기준 모델 - MAE 기준 모델의 예측 차이
- 해당 값들은 최종 학습에 추가 피처로 사용됨
4. 모델링
4-1) 모델
- LightGMBRegressor: OOF 예측 + 성능 비교
- AutoGluonTabularPredictor: 최종 앙상블 모델
4-2) 데이터 분할
- 검증 방식: KFold 교차검증 KFold(n_splits=5, shuffle=True, random_state=1)
- 타겟: price
- 분할 목적
-> 각 Fold의 검증 데이터에 대한 Out-Of-Fold(OOF) 예측값 생성
-> 테스트셋 예측 시 Fold 별 모델 평균을 사용하여 안정적인 추정
4-3) Tuning
LightGBM
lgb_params = {
'objective' : 'MAE' 또는 'MSE',
'n_estimators' : 1000,
'random_state' : 1,
}
- Loss function을 MAE/MSE로 각각 설정해 성능 차이 비교
- EarlyStopping과 log_evaluation 콜백 사용
→ 과적합 방지 + 학습 로그 모니터링
AutoGluon
predictor = TabularPredictor(
label='price',
eval_metric='rmse',
problem_type='regression'
).fit(
X,
presets='best_quality',
time_limit=3600,
verbosity=2,
num_gpus=0,
included_model_types=['GBM', 'CAT']
)
- eval_metric='rmse' 설정 → RMSE 기준 모델 앙상블 진행
- 'best_quality' 프리셋 사용 → 성능 우선 전략
- 학습 시간 제한 1시간
4-4) 최종 성능
- AutoGluon 예측 결과와 기존 앙상블을 0.55:0.45 비율로 블렌딩
- submission.csv 결과 파일 생성
5. 정리(Lesson & Learned)
- AutoGluon은 코드량을 최소화하면서도 고성능 모델을 쉽게 만들 수 있는 도구
- 평가지표의 설정에 따라 모델 성능과 성격이 크게 달라질 수 있음
- 도메인 지식을 바탕으로 한 피처 엔지니어링은 예측력 향상뿐 아니라 모델의 해석력도 높여줌
- 서로 다른 예측 결과를 블렌딩하면 단일 모델보다 더 안정적이고 향상된 결과를 낼 수 있음
Regression of Used Car Prices