본문 바로가기
  • 나를 찾는 여행...
▷ AI 인공지능

아파트 실거래가 예측 프로젝트

by AmosK 2025. 9. 12.
728x90

1. AI 대회 소개

  • 주제 - 서울 아파트 매매 실거래가 예측 (Regression)
  • 평가지표 - RMSE (예측값과 실제값 간 평균 편차)
  • 기간 - 2025/9/1(월) ~ 9/11(목)
  • 규정 핵심
    • 외부 데이터 허용 (단, 평가 데이터 유추 금지)
    • 평가 데이터 학습 금지
    • 사전학습 가중치 금지 (토크나이저는 허용)
    • 팀당 일일 제출 12회

2. 목표

  • 대회 공식 목표 - RMSE 최소화 (리더보드 기준)
  • 우리 팀 목표 - 성능 경쟁보다 학습·지식 공유에 중점
    • 각자 전처리·모델링 실습 → 팀 내 설명/공유
    • 외부 데이터 탐색 & 아이디어 확장
    • 서로 다른 접근법 비교를 통한 학습 극대화

3. 환경 세팅

서버 환경 세팅

*1) 먼저 OpenVPN 설치
*
VPN 계정을 만들어서 유저네임과 비밀번호를 만들고 따로 저장.

OpenVPN을 실행시킨 다음에 config file을 업로드.

2) GPU 서버를 생성을 위해 SSH 키를 생성하고 생성과 보관.

( *****.pem 파일) SSH 키를 생성

3) 서버 생성 후 포트는 2개로 맞추고, ssh로 접속.

4) VPN을 먼저 연결한 후에 서버에 접속

( 터미널 또는 VS Code로 접속 )

5) 서버에 데이터셋과 베이스라인코드를 저장

6) 데이터셋 저장

# Python 3.10 권장
# 필요한 라이브러리 설치
pip install pandas numpy scikit-learn lightgbm eli5 haversine optuna xgboost joblib matplotlib seaborn tqdm

# NanumGothic 폰트 설치
sudo apt-get install -y fonts-nanum

4. 폴더 구조

├── baseline_code
│   ├── baseline_code.ipynb        # 베이스라인 코드
│   └── requirements.txt           
├── data                           # 대회 제공 원본 데이터 공간
│   ├── bus_feature.csv            
│   ├── subway_feature.csv
│   ├── train.parquet              # 용량 문제로 변환 후 업로드                
│   ├── test.csv
    └── sample_submission.csv      # 제출 양식 예시                
├── notebooks                      # 개별 작업 공간
├── src                            # 전처리/모델링 작업 공간                  
├── output                         # 산출물 저장 공간                
└── README.md                      

5. 데이터 개요

1) 대회 제공 파일

  • train.csv
  • test.csv
  • bus_feature.csv - 버스 정류장/노선 피처
  • subway_feature.csv - 지하철역/노선 피처
  • sample_submission.csv - 제출 양식

2)전처리 산출물

  • merge_subway_fixed.csv - 원본 데이터를 결합하고 결측/파생을 반영한 최종 학습 입력 데이터

3) 데이터 파이프라인

train.csv + test.csv
  + bus_feature.csv + subway_feature.csv
  └─▶ [좌표 보정, 결측 대체, 피처 결합/생성] ─▶ merge_subway_fixed.csv

6. EDA

  • 결측치 확인 - matplotlib을 활용해 변수별 결측치 비율 시각화
  • 변수 상관관계 분석 - 히트맵을 이용해 변수들 간 상관관계 파악
  • 정규화 적용 - 변수 중요도 비교 시 정규화로 상대적 영향력 확인

7. 데이터 전처리

  • 컬럼 정리
    • 불필요한 열 및 결측치가 10만 개 이상인 컬럼 삭제
    • 컬럼명 표준화 (전용면적(㎡) → 전용면적, X/Y좌표 → 좌표X/Y)
  • 위치 정보 정제
    • 카카오 API를 활용해 아파트명 + 주소 매칭해 좌표 결측치 보완
    • API DB 특성상 2015년 이후 주소 데이터만 안정적 제공
    • 매핑으로 채우지 못한 0.4%는 시군구 평균·중앙값으로 대체8-2. 외부 데이터 병합
  • 금융 데이터 (ecos, 한국은행 경제통계시스템)
    • 한국은행기준금리, 정부대출금리, 국고채(3년), 서울지가변동률 추가
    • 계약년월 기준으로 매핑
    • 단기 상관관계는 낮으나, 금리는 1~2년 후 영향
    • 변수들 간 상관관계가 높아 일부는 통합 처리 가능
  • 지하철 데이터 (subway_feature.csv)
    • 좌표 기반 매핑
    • 주요 변수: 1km내역개수, 가까운역이름, 실제 거리

8. 파생변수 생성

  • Haversine 공식 → 1km내 역 개수, 지하철/버스 정류장 거리 계산
  • 전용면적(㎡)전용면적 표준화
  • 계약년월계약년, 계약월 분리
  • 2020년 이후 건축 → 신축여부 플래그
  • 강남·서초·송파·용산 → 특이 지역 플래그
  • 전용면적 구간화 - 25%, 50%, 75% 분위수 기준으로 나눠 구간별 평균값 반영
  • 8-4. 중요 피처
  • 전용면적 - Target값과 대체로 비례
  • 아파트명 - 지역·브랜드 효과를 반영, 범주형 처리 시 모델 주요 분할 기준으로 작용
  • 가까운역 - 교통 접근성을 반영, 거리·역 이름 변수 모두 가격에 직접적 영향
  • 국고채 - 단기 상관관계는 낮지만, 중장기 가격 흐름에 변수로 작용
  • 일부 이상치(outlier) 존재 → log 변환으로 분산 축소
  • 구간화 - 25%, 50%, 75% 분위수 기준으로 나눠 구간별 평균값 학습에 반영
  • 8-5. 타깃 변환
  • target에 log1p 변환 적용 후 학습
  • 제출 단계에서 expm1 역변환 수행
  • 분포 안정화 및 RMSE 계산 안정성 강화

9. 모델링

  • 모델 선택
    • LightGBM Regressor 사용
    • XGBoost와 함께 대표적인 경량화 부스팅 모델
    • 빠른 학습 속도 + 우수한 예측 성능 → 대용량 데이터셋에도 효과적
  • 교차 검증
    • 시계열 데이터 특성을 반영 → TimeSeriesSplit(n_splits=5) 적용
    • 미래 시점 예측 목적에 부합하는 검증 방식
  • 카테고리 처리
    • object 타입 변수를 category로 변환
    • LightGBM이 범주형 변수를 효율적으로 처리할 수 있게 최적화
  • 하이퍼파라미터
    • n_estimators=1000, learning_rate=0.05, subsample=0.8, colsample_bytree=0.8
    • early_stopping_rounds=50 → 과적합 방지 목적
  • 타깃 변환
    • target → log1p 변환 후 학습 → 예측값은 expm1로 역변환
    • 왜곡된 분포 완화, 학습 안정성 및 RMSE 계산 안정화
  • 추론 및 앙상블
    • 각 fold별 모델을 timeseries_fold{k}_gbm.pkl로 저장
    • 최종 예측 시 fold별 결과를 평균 앙상블하여 일반화 성능 강화
  • Feature Importance 결과
    • 전용면적, 아파트명, 교통 변수, 금융 지표 등이 중요 요인으로 확인됨
    • 특히 금리 지표는 단기 영향은 낮으나 중장기 가격 흐름에 의미 있는 피처로 작용

10. 결과

Public Leaderboard RMSE - 15514.1856

11. 참고

728x90
728x90