kohyerim / ai-project

제주대학교 인공지능 수업 기말 프로젝트

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

제주대학교 인공지능 기말 프로젝트


mllib - prediction_util

https://github.com/yungbyun/mllib 의 prediction_util을 이용하여 중고차의 시세를 예측하였습니다.


데이터 셋

해당 캐글에 존재하는 데이터셋을 전처리 하여 이용하였습니다.

전처리는 https://www.kaggle.com/vnesh123/used-car-price-prediction 을 참고하여 진행하였습니다.


  1. 모듈 불러오기
from mllib.prediction_util import PredictUtil
import pandas as pd

예측 모델 객체를 생성하기 위해 mllib 의 PredictUtil 을 prediction_util 에서 import 합니다. 차후 get_dummies 함수를 사용하기 위해 pandas를 import 합니다.

  1. 객체 생성
util = PredictionUtil()

데이터 셋을 불러오고 예측 알고리즘을 실행하기 위해 객체를 생성합니다.

  1. 데이터 셋 전처리
util.read('dataset.csv')

read

데이터 셋을 read 해오면 다음과 같이 출력됩니다. 이 때, 필요하지 않은 칼럼들이 보이는데 이를 확인하기 위해 데이터셋 파일을 열어보면 아래와 같은 칼럼들을 확인할 수 있습니다.

dataset

  • Unnamed: 0 - 단순한 인덱스 칼럼
  • Location : 중고차가 등록된 주소
  • Kilometers_Driven : 자동차 주행거리
  • Transmission : 변속기 종류
  • Owner_Type : 자동차의 주인이 몇 번째 주인이었는지
  • Seats : 좌석 개수
  • New_Price : 해당 모델의 신차 가격
  • Price : 해당 중고차의 가격
  • Brand_name : 자동차의 제조사 명
  • Mileage_upd : 자동차 회사에서 제공하는 표준 주행 거리
  • Engine_upd : 엔진의 용량 (CC)
  • Power_upd : 엔진의 최대출력 (bhp)
  • Year_upd : 자동차의 제조연도

위의 칼럼들 중 중고차의 시세와 관계가 없다고 생각되는 칼럼들을 drop합니다.

util.drop(['Unnamed: 0', 'brand_name', 'Location', 'New_Price'])
  1. 가격과 그 외의 요소들 간의 상관관계 확인
  • Owner_Type과 가격의 관계 (boxplot)

    util.boxplot('Owner_Type', 'Price')

    boxplot

    outlier의 값이 많아 가격과의 관계가 크다고 생각되지 않습니다.

  • Power_upd와 가격의 관계 (lmplot)

    util.lmplot('Power_upd', 'Price', 'Owner_Type')

    lmplot

    완벽한 일차함수의 그래프 모양은 아니지만, 꽤 상관관계가 있어 보입니다.

  • 히트맵 그리기

    • One-Hot-Encoding

      히트맵을 그리기 전에, 숫자가 아닌 칼럼들을 수치화 해주어야 합니다.
      이 때 1, 2, 3 과 같은 대소관계가 있는 수치를 사용하면 안되고 0과 1로 이루어진 새로운 칼럼을 만들어서 수치화 해야 합니다.
      이렇게 수치화 하는 것을 원 핫 인코딩 이라고 합니다.

      util.df = pd.get_dummies(util.df)

      Pandas 모듈에서 원 핫 인코딩을 지원하고 있어 객체의 멤버변수인 df에 접근하여 원 핫 인코딩을 해주는 get_dummies 함수를 실행합니다.


      원 핫 인코딩 후의 칼럼은 다음과 같습니다.

      get_dummies

      숫자형이 아닌 칼럼이었던 Fuel_Type, Transmission, Owner_Type 칼럼이 숫자화 된 칼럼으로 변경된 것을 확인할 수 있습니다.

    • 히트맵 출력

      원 핫 인코딩 후, 칼럼들을 모두 이용해 히트맵을 그려보면 다음과 같습니다.

      util.heatmap(['Kilometers_Driven', 'Seats', 'Price','Mileage_upd','Engine_upd','Power_upd',
                          'Year_upd', 'Fuel_Type_CNG', 'Fuel_Type_Diesel','Fuel_Type_Electric',
                          'Fuel_Type_LPG','Fuel_Type_Petrol','Transmission_Automatic',
                          'Owner_Type_Fourth & Above','Owner_Type_Second','Owner_Type_Third'])

      heatmap

      가격(Price)칼럼과 연관성이 높은 칼럼은 'Power_upd', 'Engine_upd', 'Transmission' 정도로 생각이 되어 이를 사용하겠습니다.

      그 외에 'Year_upd', 'Mileage_upd'를 더 이용해 보겠습니다.

  1. 상관관계를 이용하여 중고차 시세 예측하기 - run_all()

PredictionUtil의 run_all 함수를 호출하면 선형회귀, K-Neighbor, 결정트리, 랜덤포레스트 예측 모델을 실행하여 원하는 값을 예측해 볼 수 있습니다.

  • 'Power_upd', 'Engine_upd', 'Transmission' 칼럼을 이용한 예측

    util.run_all(['Power_upd', 'Engine_upd', 'Transmission_Manual'], 'Price')

    'Power_upd', 'Engine_upd', 'Transmission' 칼럼을 이용해 가격을 예측하고, 그 정확도를 확인하면 다음과 같습니다.

    run_all

    • Linear Regression : 58%
    • K-Neighbor Regression : 74%
    • Decision Tree : 76%
    • Random Forest : 79.9%
  • 'Power_upd', 'Engine_upd', 'Transmission', 'Year_upd' 칼럼을 이용한 예측

    util.run_all(['Power_upd', 'Engine_upd', 'Transmission_Manual', 'Year_upd'], 'Price')

    'Power_upd', 'Engine_upd', 'Transmission', 'Year_upd' 칼럼을 이용해 가격을 예측하고, 그 정확도를 확인하면 다음과 같습니다.

    addYear

    • Linear Regression : 67%
    • K-Neighbor Regression : 82%
    • Decision Tree : 87%
    • Random Forest : 89%

    3개의 칼럼만 이용했을 때 보다 정확도가 더 좋아졌습니다.

  • 'Power_upd', 'Engine_upd', 'Transmission', 'Year_upd', 'Mileage_upd' 칼럼을 이용한 예측

    util.run_all(['Power_upd', 'Engine_upd', 'Transmission_Manual', 'Year_upd', 'Mileage_upd'], 'Price')

    'Power_upd', 'Engine_upd', 'Transmission', 'Year_upd', 'Mileage_upd' 칼럼을 이용해 가격을 예측하고, 그 정확도를 확인하면 다음과 같습니다.

    addMileage

    • Linear Regression : 67%
    • K-Neighbor Regression : 82%
    • Decision Tree : 86%
    • Random Forest : 90%

    4개의 칼럼을 이용했을 때와 비교하면 정확도가 비슷합니다.

About

제주대학교 인공지능 수업 기말 프로젝트


Languages

Language:Python 100.0%