6 Sun
현업 실무자에게 배우는 Kaggle 머신러닝 입문
결정 트리(Decision Tree) 소개
결정 트리
데이터 마이닝에서 일반적으로 사용되는 방법론
몇몇 입력 변수를 바탕으로 목표 변수의 값을 예측 하는 모델을 생성하는 것이 목표
장점
알고리즘의 동작과정이 직관적
학습 시간이 빠름
개별 특징들을 개별적으로 판단하므로 정규화가 필요하지 않다
단점
오버피팅에 빠지기 쉽다
특히 트리의 깊이가 깊어질 수록
구현
sklearn.tree.DecisionTreeClassifersklearn.tree.DecisionTreeRegressor
Titanic 사고 데이터 소개
1912년 타이타닉 사고 당시의 승객에 대한 데이터
Binary Classification
1 : 생존
0 : 사망
데이터 개수 : 891
특징

범주형 컬럼(Categorical Column) & 수치형 컬럼(Numerical Column)
범주형 컬럼
값이 [1, 2, 3], ["내부", "외부"] 와 같이 한정되는 데이터
[sex, embarked, class, who, adult_male, deck, embark-town, alive, alone]
수치형 컬럼
값이 1, 2, 3, 5, ... 또는 1.2, 4.51, 3.1415, .. 와 같이 숫자 축으로 무한히 위치할 수 잇는 데이터
[age, sibsp, parch, fare]
Categorical Column 다루기 - LabelEncoder
LabelEncoder
머신러닝 알고리즘은 string 형태의 값은 처리할 수 없다. 숫자형 값으로 변경해줘야만 하며 scikit-learn에서 제공하는
preprocessing.LabelEncoder클래스를 이용해서 string 형태의 값을 숫자형 값으로 변경할 수 있다.
결정 트리(Decision Tree)를 이용해서 타이타닉 생존자 예측해보기
사용 알고리즘
DecisionTreeClassifier
추가적인 적용기법
EDA, Exploratory Data Analysis
Data Cleansing, 결측치 처리
df.info()
데이터 컬럼별 타입과 값이 있는 행의 갯수 등을 알 수 있다
데이터 불러오기
seaborn 라이브러리 안에 타이타닉 데이터셋이 저장되어 있다.
titanic_df = sns.load_dataset('titanic')
PART 1. EDA
범주형 컬럼과, 수치형 컬럼으로 나누어서 리스트를 만듭니다. (추후 분석 시 반복되는 코드를 줄일 수 있어요)
범주형(categorical) 데이터는 값이 [1, 2, 3], ["내부", "외부"]와 같이 몇 가지 분류로 한정되는 데이터 입니다.
수치형(numerical) 데이터는 값이 1,2,3,5,..., 1.2, 4.51, 3.1415와 같이 숫자 축으로 무한히 위치할 수 있는 데이터 입니다.
데이터의 통계량 살펴보기
.describe() 함수로 각 열에 대한 대략적인 통계 값들을 볼 수 있습니다. (평균, 상위 25/50/75% 값, 최대/최소 값 등)
survived
pclass
age
sibsp
parch
fare
count
891.000000
891.000000
714.000000
891.000000
891.000000
891.000000
mean
0.383838
2.308642
29.699118
0.523008
0.381594
32.204208
std
0.486592
0.836071
14.526497
1.102743
0.806057
49.693429
min
0.000000
1.000000
0.420000
0.000000
0.000000
0.000000
25%
0.000000
2.000000
20.125000
0.000000
0.000000
7.910400
50%
0.000000
3.000000
28.000000
0.000000
0.000000
14.454200
75%
1.000000
3.000000
38.000000
1.000000
0.000000
31.000000
max
1.000000
3.000000
80.000000
8.000000
6.000000
512.329200
데이터의 분포 눈으로 살펴보기
수치형 컬럼들의 분포를 그려봅시다. 통계량은 boxplot으로 살펴보고, 분포는 histplot으로 그립니다.
본격적으로 반복문을 사용해 볼까요? 이 코드에서는 반복문을 이용하여 여러개의 차트를 그립니다.
plt.subplots를 통해 여러 개의 도화지를 생성합니다. (nrows × ncols)
for문 안에서는 각 도화지(ax)에 seaborn으로 차트를 그립니다. figure는 그림 전체를 의미합니다.


범주형 컬럼들의 분포를 그려봅니다. 범주형이므로 countplot을 통해 각 범주별로 개수를 셀 수 있습니다.
범주형 컬럼이 총 9개 이므로, 3x3 도화지 레이아웃으로 하나씩 그래프를 그려봅니다.
ax_list_list는 [[], []] 형태의 2차원 리스트 입니다. for 문으로 반복하기 위해 1차원 리스트로 풀어줍니다.
1차원 리스트 ax_list가 9개의 도화지 (ax)를 갖도록 풀어서 할당하는데,
.reshape()라는 numpy 함수를 사용합니다.

데이터로부터 유의미한 정보 발굴하기
사실, 여기서부터는 EDA의 범위를 넘어섭니다. 그래도 탑승객의 '생존'에 어떤 것들이 영향을 미치는지 궁금하시죠? 몇 가지 가설을 세우고 그래프를 그려 '생존'에 영향을 미치는 요인이 무엇인지 살펴봅시다
성별과 생존 여부

hue를 이용하여 그래프에서 특정 컬럼을 그룹 지어서 볼 수 있다
좌석 등급과 생존 여부

9개의 범주형 분류에 대해, 생존 여부로 그래프 그리기

남성보다 여성의 생존률이 더 높습니다 (남성 > 여성 > 아이)
탑승지(embarked)가 C인 경우 생존율이 높습니다
1등석 > 2등석 > 3등석 순으로 생존율이 높습니다
B,D,E 덱 위치의 승객들이 생존율이 높습니다
나홀로 승객은 생존율이 낮습니다
생존 여부별로 나이의 히스토그램 그려보기

성별과 좌석 등급에 따라, 나이의 boxplot 그려보기

Part2. Decision Tree로 타이타닉 생존자 예측하기
결측치 채우기
survived
pclass
sex
age
sibsp
parch
fare
embarked
class
who
adult_male
deck
embark_town
alive
alone
0
0
3
male
22.000000
1
0
7.2500
S
Third
man
True
C
Southampton
no
False
1
1
1
female
38.000000
1
0
71.2833
C
First
woman
False
C
Cherbourg
yes
False
2
1
3
female
26.000000
0
0
7.9250
S
Third
woman
False
C
Southampton
yes
True
3
1
1
female
35.000000
1
0
53.1000
S
First
woman
False
C
Southampton
yes
False
4
0
3
male
35.000000
0
0
8.0500
S
Third
man
True
C
Southampton
no
True
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
886
0
2
male
27.000000
0
0
13.0000
S
Second
man
True
C
Southampton
no
True
887
1
1
female
19.000000
0
0
30.0000
S
First
woman
False
B
Southampton
yes
True
888
0
3
female
29.699118
1
2
23.4500
S
Third
woman
False
C
Southampton
no
False
889
1
1
male
26.000000
0
0
30.0000
C
First
man
True
C
Cherbourg
yes
True
890
0
3
male
32.000000
0
0
7.7500
Q
Third
man
True
C
Queenstown
no
True
범주형 모델은 모델에서 작동할 수없으므로 sklearn의 preprocessing을 이용하여 범주형 데이터를 수치화한다
survived
pclass
sex
age
sibsp
parch
fare
embarked
class
who
adult_male
deck
embark_town
alive
alone
0
0
3
1
22.000000
1
0
7.2500
2
Third
1
1
2
Southampton
no
0
1
1
1
0
38.000000
1
0
71.2833
0
First
2
0
2
Cherbourg
yes
0
2
1
3
0
26.000000
0
0
7.9250
2
Third
2
0
2
Southampton
yes
1
3
1
1
0
35.000000
1
0
53.1000
2
First
2
0
2
Southampton
yes
0
4
0
3
1
35.000000
0
0
8.0500
2
Third
1
1
2
Southampton
no
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
886
0
2
1
27.000000
0
0
13.0000
2
Second
1
1
2
Southampton
no
1
887
1
1
0
19.000000
0
0
30.0000
2
First
2
0
1
Southampton
yes
1
888
0
3
0
29.699118
1
2
23.4500
2
Third
2
0
2
Southampton
no
0
889
1
1
1
26.000000
0
0
30.0000
0
First
1
1
2
Cherbourg
yes
1
890
0
3
1
32.000000
0
0
7.7500
1
Third
1
1
2
Queenstown
no
1
891 rows × 15 columns
survived
pclass
sex
age
sibsp
parch
fare
embarked
who
adult_male
deck
alone
0
0
3
1
22.000000
1
0
7.2500
2
1
1
2
0
1
1
1
0
38.000000
1
0
71.2833
0
2
0
2
0
2
1
3
0
26.000000
0
0
7.9250
2
2
0
2
1
3
1
1
0
35.000000
1
0
53.1000
2
2
0
2
0
4
0
3
1
35.000000
0
0
8.0500
2
1
1
2
1
...
...
...
...
...
...
...
...
...
...
...
...
...
886
0
2
1
27.000000
0
0
13.0000
2
1
1
2
1
887
1
1
0
19.000000
0
0
30.0000
2
2
0
1
1
888
0
3
0
29.699118
1
2
23.4500
2
2
0
2
0
889
1
1
1
26.000000
0
0
30.0000
0
1
1
2
1
890
0
3
1
32.000000
0
0
7.7500
1
1
1
2
1
트레이닝 데이터 준비하기
Last updated
Was this helpful?