노트1/과제

[데이콘] 타이타닉 생존자 예측 (캐글 Titanic Machine Learning) (② 전처리, 모델링 DecisionTreeClassifier)

Paige09 2022. 1. 20. 09:52

 

이전글  https://hjryu09.tistory.com/26

 

 

 

PassengerId  : 변수 제거
Survived 
Pclass 
Name  : object 타입, 변수 제거
Sex  : object 타입 > One-Hot Encoding > male 0, female 1
Age  : 평균으로 결측치 채워주기
SibSp
Parch 
Ticket : object 타입, 변수 제거 
Fare  : Pclass별 티켓요금의 평균으로 결측치 채워주기
Cabin  : 결측값이 너무 많아서 변수 제거
Embarked  : 전체 인원의 70% 이상이 해당하는 최빈값 S로 결측치 대체 or 행 제거

 

 


 

1. PassengerId , Name , Ticket , Cabin 변수 삭제

 

train_1 = train.drop(['PassengerId','Name','Ticket','Cabin'], axis=1)
test_1 = test.drop(['PassengerId','Name','Ticket','Cabin'], axis=1)

 

 

 

2. Age 결측치 177개 평균으로 대체

train_1['Age'].fillna(train_1['Age'].mean(), inplace=True)
test_1['Age'] = test['Age'].fillna(test['Age'].mean())

 

 

 

3. Embarked 결측치 2개 행 삭제

 

 

 

 

4. test 파일의 Fare 결측치 1개 평균으로 대체 (티켓요금이 등실의 등급과 관련있다고 판단하여 해당 평균 사용)

 

 

 

전처리 결과 확인

 

 

 

 

5. 문자 데이터를 숫자로 변환

 

 

 

train_1['Sex'] = train_1['Sex'].map({'male':0, 'female':1})
test_1['Sex'] = test_1['Sex'].map({'male':0, 'female':1})

 

pd.Series.map()

시리즈 내 값을 변환 할 때 사용하는 함수

 

train_1 = pd.get_dummies(train_1, columns=['Embarked'], prefix='Embarked')
test_1 = pd.get_dummies(test_1, columns=['Embarked'], prefix='Embarked')

 

원핫인코딩

pd.get_dummies( 데이터프레임['컬럼명'], prefix='컬럼앞에 고정할 이름' )

pd.get_dummies( 데이터프레임, columns=['컬럼명'], prefix='컬럼앞에 고정할 이름' )

 

 

 


 

 

6. 모델링 - 의사결정나무

 

from sklearn.tree import DecisionTreeClassifier

x_train = train_1.drop(['Survived'], axis=1)
y_train = train_1['Survived']

model = DecisionTreeClassifier()
model.fit(x_train, y_train)
pred = model.predict_proba(test_1) [:,1]
# 확률값 _proba 추가 사망확률과 생존확률 2개의 컬럼이 출력됨
# 행은 처음부터 끝까지, 열은 두번째 열(인덱스1)
submission['Survived'] = pred
submission.to_csv('DecisionTreeClassifier.csv', index=False)

 

 

 

 

가장 먼저 떠오르는 방법으로 전처리를 하고, 평가지표도 파일을 바로 제출하는 방식으로 알아봤다.

(점수 0.7136319377)

 

1) 전처리 방식을 바꾸고

2) 다른 모델링을 테스트하고 (+모델링에 최적인 파라미터를 찾고)

3) 예측력이나 평가지표를 사전에 확인할 수 있도록

공부하고 디벨롭 시켜보자!