[데이콘] 타이타닉 생존자 예측 (캐글 Titanic Machine Learning) (② 전처리, 모델링 DecisionTreeClassifier)
이전글 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) 예측력이나 평가지표를 사전에 확인할 수 있도록
공부하고 디벨롭 시켜보자!