Assignment. 자동차 평가 데이터에 대한 EDA 및 Decision Tree를 활용한 예측

In [1]:
import urllib2
from scipy import stats
from pandas import Series, DataFrame
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

path = 'http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data'
raw_csv = urllib2.urlopen(path)
feature_names = ('buying', 'maint', 'doors', 'persons', "log_boot", "safety")
target_name = 'eval'
all_names = feature_names + (target_name,)
df = pd.read_csv(raw_csv, names=all_names)
In [2]:
dfb
Out[2]:
buying maint doors persons log_boot safety eval
0 vhigh vhigh 2 2 small low unacc
1 vhigh vhigh 2 2 small med unacc
2 vhigh vhigh 2 2 small high unacc
3 vhigh vhigh 2 2 med low unacc
4 vhigh vhigh 2 2 med med unacc
5 vhigh vhigh 2 2 med high unacc
6 vhigh vhigh 2 2 big low unacc
7 vhigh vhigh 2 2 big med unacc
8 vhigh vhigh 2 2 big high unacc
9 vhigh vhigh 2 4 small low unacc
10 vhigh vhigh 2 4 small med unacc
11 vhigh vhigh 2 4 small high unacc
12 vhigh vhigh 2 4 med low unacc
13 vhigh vhigh 2 4 med med unacc
14 vhigh vhigh 2 4 med high unacc
15 vhigh vhigh 2 4 big low unacc
16 vhigh vhigh 2 4 big med unacc
17 vhigh vhigh 2 4 big high unacc
18 vhigh vhigh 2 more small low unacc
19 vhigh vhigh 2 more small med unacc
20 vhigh vhigh 2 more small high unacc
21 vhigh vhigh 2 more med low unacc
22 vhigh vhigh 2 more med med unacc
23 vhigh vhigh 2 more med high unacc
24 vhigh vhigh 2 more big low unacc
25 vhigh vhigh 2 more big med unacc
26 vhigh vhigh 2 more big high unacc
27 vhigh vhigh 3 2 small low unacc
28 vhigh vhigh 3 2 small med unacc
29 vhigh vhigh 3 2 small high unacc
... ... ... ... ... ... ... ...
1698 low low 4 more big low unacc
1699 low low 4 more big med good
1700 low low 4 more big high vgood
1701 low low 5more 2 small low unacc
1702 low low 5more 2 small med unacc
1703 low low 5more 2 small high unacc
1704 low low 5more 2 med low unacc
1705 low low 5more 2 med med unacc
1706 low low 5more 2 med high unacc
1707 low low 5more 2 big low unacc
1708 low low 5more 2 big med unacc
1709 low low 5more 2 big high unacc
1710 low low 5more 4 small low unacc
1711 low low 5more 4 small med acc
1712 low low 5more 4 small high good
1713 low low 5more 4 med low unacc
1714 low low 5more 4 med med good
1715 low low 5more 4 med high vgood
1716 low low 5more 4 big low unacc
1717 low low 5more 4 big med good
1718 low low 5more 4 big high vgood
1719 low low 5more more small low unacc
1720 low low 5more more small med acc
1721 low low 5more more small high good
1722 low low 5more more med low unacc
1723 low low 5more more med med good
1724 low low 5more more med high vgood
1725 low low 5more more big low unacc
1726 low low 5more more big med good
1727 low low 5more more big high vgood

1728 rows × 7 columns

[Mission 1] 모든 속성들을 수치형 데이터로 변환

  • Mushroom 데이터 집합에 대한 "Categorical Attribute를 Numerical Attribute로 변환" 강의 내용 참조
  • 최종적으로 DataFrame.describe() 함수를 통하여 각 속성별로 기본 통계치를 산출

[Mission 2] Target 4개별로 그룹핑하여 각 속성별 기본 통계치 및 Box Plot 산출

  • Mushromm 데이터 집합에 대한 "Edible Mushrooms과 Poisonous Mushrooms 의 두 개의 그룹핑 작업 및 각 그룹별 Boxplot 그리기" 강의 내용 참조

[Mission 3] 각 속성들을 두 개씩 쌍을 지어서 각 쌍마다 Scatter Plot 그리기

  • Iris 데이터 집합에 대한 "탐색적 자료 분석 (Exploratory data analysis)" 강의 내용 참조
  • 총 6개의 Feature가 존재하므로 두 개씩 쌍을 만든다면 총 15개의 쌍이 나옴
    • 예. (buying, maint), (buying, doors), ...
  • Categorical Data를 Numerical Attribute로 변환한 DataFrame으로 작업해야 함
  • 그러므로, 총 15개의 Scatter Plot을 산출해야 함
  • 15개의 Scatter Plot을 눈으로 분석하여 Guess 할 수 있는 분석 내용을 작성

[Mission 4] 전체 데이터 집합에 대한 Entropy 산출

  • Binary Target 이 아닌 4개의 Target 이 존재함을 유의해야 함

[Mission 5] Decision Tree 모델 구축을 고려하여 루트노드에서 첫번째 Branch를 위한 IG가 가장 높은 속성 산출

  • 해당 속성을 잘 기억하고 Mission 6에서의 결과와 동일한지 확인해야 함

[Mission 6] sklearn 모듈을 활용하여 Decision Tree 모델을 구축하고 예측 시도

  • 루트노드에서 첫번째 Branch를 구성할 때 활용한 속성이 Mission 5에서 산출한 것과 동일한지 파악
    • 해당 속성에 대하여 sklearn 모듈 내에서 어떠한 방법으로 기준을 정했는지 판단 및 해석
  • 모델 구축 후 기존 Training Data중 일부에 대한 예측
  • 기존 Training Data에 존재하지 않는 새로운 데이터에 대한 예측