0%

회귀분석 프로젝트

Craiglist 데이터를 활용한 미국 중고차 가격 예측

  • Kaggle 데이터셋 중 "Craiglist(미국판 중고나라?)"에서 크롤링된 약 51만건의 중고차 가격 정보를 이용하여 중고차 가격 예측 프로젝트를 진행하였습니다.
Craiglist 데이터를 활용한 미국 중고차 가격 예측notebook 바로가기
  • 전반적인 회귀분석 과정은 위의 링크를 참조해 주시고, 이곳에선 진행과정에서 겪은 여러 시행착오들과 note에 담지 못한 후기등을 공유하고자 합니다.

REVIEW 내용

  • 데이터 전처리
  • 범주형 데이터(Categorical data) 처리

1. Workflow Chart

  • 크게 'EDA(데이터 탐색)', '데이터 전처리', '모델링', '모델검증'의 Step을 정하고 분석을 진행했습니다.

  • 좌측부터 총 4번의 싸이클이 진행되었습니다.

  • 시작부터 이런 구조를 만들어 낸것은 아니었고, 두번째 싸이클을 시작할때, 앞으로 생길 문제에 유연하게 대처하고, 다양한 방식을 시도해보기 용이한 방법을 고심하다 이와 같은 구조가 만들어 졌습니다.

  • 분석 과정 중 한가지 방식에 매몰되지 않고 다양한 가능성을 상정하여, 최대한 여러 방면으로 생각을 확장하려 노력했고, 이점이 만족할만한 결과를 만들어낸 원동력이었다고 생각합니다.

2. 데이터 전처리 - Vin(차대번호)를 활용하여..

  • 최초의 데이터는 결측치가 많았을뿐 아니라, 중고나라적 특성(?)을 가지고 있는 덕분에, 책정된 가격이 비정상적인 경우가 많았고(123456789, 99999.., 36억 달러 등), 주행거리 데이터도 상식적이지 않은 경우가 많았습니다.

  • 첫 싸이클에선 도메인 지식을 활용하여, 가격, 주행거리를 제거하였지만 모델성능이 높지 않았고, 이때 'vin'이라는 데이터에 주목했습니다.

2.1 Vin으로 허위매물 구별

  • 'vin'은 미국내에 운행되는 자동차들이 가지는 고유의 번호입니다. 이를 활용한다면 최소한 광고성 허위매물은 거를수 있을거라는 생각으로 Google을 검색합니다.

  • 'Vincheck'를 필두로하여 다양한 'vin'을 검색하는 사이트들을 발견하였고, '이런 사이트에 "vin"을 검색해서 나오는 정보를 이용해 허위매물을 거르자!'라는 결론에 다다릅니다.

2.2 api 제공 데이터

  • 미국내 'vin'을 체크하는 사이트들은 모두 'vinaudit.com'이라는 업체가 제공하는 api를 사용하고 있었고, 이 api가 제공하는 데이터의 출처는

    • 자동차 이력 제공시스템 : (NMVTIS/National Motor Vehicle Title Information System)
    • 미국 도로교통 안전국 : (NHTSA / National Highway Traffic Safety Administration)
    • 미국 교통부 연방차량안전국 : (Federal Motor Carrier Safety Administration, FMCSA)
    • 그외 미국 정부 기관과 관련된 업체 및 파트너사 라고 합니다.
  • 이 api에 'vin'을 던져주어 'error를 반환 받으면 == '허위매물' 이었기 때문에, 허위매물을 한번에 제거할수 있었습니다.

  • 'vin'과 '주행거리'를 api에 옵션으로 던져주면, 현재 차량의 중고차 시장에서의 판매 가격에 대한, 평균가격, 표준편차, 실제 주행거리 등을 반환해 주었습니다.

  • 이를 이용해 '주행거리'와 '가격'에 대한 아웃라이어를 제거할수 있었습니다.

  • 결정적으로 '실제 운행되고 존재하는 차량'에 관한 데이터라는걸 검증할수 있었습니다. 이후 분석은 데이터 전처리에 대한 고민없이 진행할수 있었습니다.

3.1 범주형 데이터 처리 - 변수 선택

  • 데이터셋에는 실린더 갯수, 변속기 자동 여부, 차량종류등과 같이 차량의 '모델명'하나만으로 설명이 되는 범주형 변수가 많았습니다. '여러 범주형 변수'와 '모델명'을 어떻게 처리할지 고심했습니다.

  • 결국 '여러 범주형 변수'를 선택하고 '모델명'변수는 삭제했습니다.

  • 현대의 '아반떼' 라는 변수 하나만 남기고 나머지 범주형 변수를 삭제한다면, '201x년에 사셔서 X만 마일 타신 아반떼는 예상금액이 Y불 입니다' 라는 결론밖에 내지 못하고, 중고차의 어떤 요소들이 가격 예측에 영향을 미쳤는지에 대한 파악을 하지 못하기 때문입니다.

  • 또한, 여러가지 범주형 변수들과 '연식',' 주행거리'등과 같은 연속형 변수간의 Interaction을 통해 모델을 추가적으로 발전시킬수 있는 가능성도 사라지게 됩니다.

3.2 범주형 데이터 처리 - 교차 검증

종속 변수 연속형 변수 범주형 변수

  • 범주형 데이터는 학습데이터와 검증데이터를 나누는 과정에서도 문제가 되었습니다.

  • 빈도수가 적은 (여기서는 페라리 같은 고급 차종들에 대한 데이터) 경우 Cross-validation(교차 검증)을 위해 데이터를 나누는 과정에서 한쪽으로 데이터가 쏠리는 경우가 발생하게 됩니다. 이렇게 되면 오류가 발생하게 됩니다.

  • 처음엔 임의로 10개 미만의 빈도수를 가지는 데이터를 삭제하고 진행하는 방법, Bootstraping등의 방법을 시도하였습니다.

  • 하지만 데이터를 최대한 살리는 방법을 선택해 결국, 빈도수 10개 미만의 데이터를 따로 분류하여, 데이터셋이 나누어 질때마다 각 데이터 셋에 고르게 분배될수 있도록 하였습니다.

4. 후기

  • 첫 회귀분석 프로젝트였던 만큼 시행착오가 많았지만, 그만큼 분석 주제와 목적에 대해 많이 고민할수 있었습니다.
  • 향후 머신러닝, 딥러닝등 다양한 기법과 방법론을 학습하고 응용하겠지만 데이터의 본질을 이해하기 위한 노력이 선행될때, 이런 방법론들이 최상의 결과로 이어질수 있다는 점도 알게되었습니다.