Data Science Project
[Deep Learning 경진대회] 소득 예측 AI 해커톤
ParkS2
2024. 4. 9. 14:23
소득 예측 AI 해커톤 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io












0123456789101112
문제정의
- 문제 상황: 인구 통계 및 직업 특성에 기반한 개인 소득 예측 필요.
- 목표: 주어진 특성으로 각 개인의 연간 소득을 예측하는 모델 개발.
- 데이터셋: 나이, 성별, 교육 수준 등 총 23개의 인구 및 직업 특성 포함.
- 예측 대상: 개인의 연간 소득(Income) 예측.
- 평가지표: 예측 오차 측정을 위한 RMSE 사용.
문제해결기법
- 데이터 전처리
- 결측값 처리: 주요 변수에 결측값이 포함되어 있는지 확인 후 결측값이 있는 열에 대해 중위수(median) 대체나 'Unknown'으로 치환하는 방식 적용. 일부 특성(예: 'Race', 'Citizenship')은 빈도가 높은 값으로 대체하여 예측 성능 저하를 방지.
- 범주형 변수 인코딩: 범주형 변수들은 원-핫 인코딩을 사용하여 다수의 열로 분해하여 모델이 이해할 수 있도록 변환함. ‘Gender’, ‘Education_Status’, ‘Employment_Status’ 등은 데이터 특성상 라벨 인코딩 대신 원-핫 인코딩으로 모든 범주를 표현하도록 함.
- 이상치 탐지 및 처리: Income 변수에서 IQR 방법을 적용하여 1.5배 범위를 벗어나는 값들을 이상치로 간주하고 제거. 특정 변수의 상위 1% 또는 하위 1% 값에 대해 추가 검토하여 소득 예측에 부정적인 영향을 줄 수 있는 극단적인 값들은 제거.
- 특성 엔지니어링
- 새로운 변수 생성: 연령대(age group)를 기준으로 'Age_Group'이라는 새로운 변수 생성(예: 20대, 30대). Working_Week_Yearly와 Employment_Status 변수를 결합하여 근무 상태와 일 수의 관계를 더 명확히 함.
- 상호작용 변수 생성: Education_Status와 Income_Status 간의 상호작용을 고려한 새로운 변수 추가. 예를 들어, 고학력자와 고소득자에 대해 High_Education_High_Income 변수 생성.
- 로그 변환 및 정규화: Income, Gains, Losses 등 소득 관련 변수들이 긴 꼬리 분포를 가지므로, 로그 변환을 통해 정규화하여 모델이 더 잘 학습할 수 있도록 조정.
- 탐색적 데이터 분석 (EDA)
- 데이터 분포 분석: Age, Income 등의 분포를 확인하여 전반적인 데이터 패턴 파악. 연령과 소득이 특정 연령대에서 높은 상관관계를 보이는 것을 발견하여 모델 학습에 반영.
- 상관관계 분석: Working_Week_Yearly와 Income 간의 양의 상관관계(0.42)를 확인, 이 변수가 소득 예측에 중요한 역할을 할 것으로 예측.
- 시각화: 히스토그램, 상자 그림(box plot), 산점도 등을 사용하여 연속형 변수의 분포와 이상치, 범주형 변수 간의 소득 차이를 시각적으로 파악.
- 모델 학습 및 선택
- 기초 모델 적용 및 비교: 선형 회귀, 랜덤 포레스트, XGBoost 등 여러 회귀 모델을 적용하여 성능 비교. XGBoost가 가장 우수한 성능을 보여 추가 하이퍼파라미터 튜닝을 진행.
- 심층 신경망(DNN) 설계: 여러 개의 Dense 레이어로 구성된 DNN 모델을 설계하여, 복잡한 패턴 학습. 드롭아웃(Dropout)과 배치 정규화(Batch Normalization)를 추가하여 과적합을 방지하고 모델 안정성 강화.
- 하이퍼파라미터 튜닝
- XGBoost 하이퍼파라미터 최적화: Grid Search를 사용하여 learning_rate, n_estimators, max_depth, min_child_weight, subsample 등의 파라미터 최적 조합을 탐색. 최적의 조합은 learning_rate=0.05, n_estimators=200, max_depth=6, subsample=0.8으로 도출됨.
- DNN 하이퍼파라미터 최적화: 레이어 수, 각 레이어의 뉴런 수, 드롭아웃 비율을 튜닝하여 최적화. 최종적으로 learning_rate=0.001, dropout_rate=0.3, batch_size=64, epochs=100에서 가장 높은 검증 성능을 기록.
- 최적화 결과: XGBoost의 경우 RMSE가 약 620으로 도출되었고, DNN은 RMSE 540을 기록하며 소득 예측에 가장 적합한 모델로 확인.
- 모델 평가 및 교차 검증
- 교차 검증: k-폴드 교차 검증을 통해 모델의 일반화 성능 평가. XGBoost와 DNN 모두 안정적인 성능을 보이며 과적합 문제 방지.
- 평가지표 계산: 최종적으로 DNN 모델의 RMSE와 MAE를 기준으로 평가하며, 과적합이나 데이터 왜곡의 영향을 최소화하기 위해 성능을 여러 지표로 검토
결과
- 기초 모델 성능 비교
- 선형 회귀: 기초 선형 회귀 모델의 RMSE는 매우 높게 나타나 소득 예측에는 적합하지 않은 것으로 확인.
- 랜덤 포레스트: RMSE 626으로 기본 성능을 보였으나, 고소득 예측에서 불안정성을 보임.
- XGBoost: RMSE 620으로 랜덤 포레스트보다 약간 우수한 성능을 기록, 초기 실험 단계에서 가장 유망한 모델로 선정.
- DNN 모델 성능
- DNN 모델 초기 성능: 초기 5층 레이어와 기본 하이퍼파라미터 설정에서 RMSE 580을 기록하며, 복잡한 데이터 패턴 학습에서 우수한 성능을 보임.
- 하이퍼파라미터 튜닝 후 DNN 성능: 학습률(0.001), 드롭아웃(0.3), 배치 크기(64) 등 최적화 후 RMSE가 540으로 감소, 현재까지 최고의 성능을 기록. DNN 모델이 XGBoost 대비 15% 향상된 성능을 보이며 최종 후보로 선정.
- DNN 모델:
- RMSE: 540
- MAE: 325
- XGBoost 모델:
- RMSE: 620
- MAE: 340