Machine Learning/Preprocessing

타이타닉 생존자 예측

진성01 2022. 5. 9. 00:25

이번 글에서는 Kaggle의 유명한 competition중 하나인 타이타닉 생존자 예측 문제에 대한 [파이썬 머신러닝 완벽가이드]의 코드를 리뷰한다(import문은 생략한다).

 

타이타닉 생존자 예측 문제의 데이터셋 설명은 Kaggle 홈페이지에서 확인할 수 있다. 여기서는 전체 코드를 리뷰하는 것이 아닌 중요 코드만 발췌하여 리뷰한다.

 

전처리

 

타이타닉 데이터셋의 변수 정보이다. label은 'Survived'이며, feature는 'Survived'를 제외한 나머지이다. 전처리가 필요한 부분은 다음과 같다.

  • null값을 적절한 값으로 채우기
  • 학습에 필요하지 않은 feature 제거하기
  • object자료형을 가지는 변수 인코딩하여 int로 바꾸기

fillna()함수를 이용하면 null값을 원하는 값으로 메꿀 수 있다. 'Age'의 경우 평균값으로 채우고 'Cabin', 'Embarked'는 'N', 'Fare'는 0으로 채워 넣는 함수를 작성하였다.

 

inplace 파라미터는 바꾼 값을 실제로 적용시키는 것에 대한 여부이다. 즉 df['Age']의 값을 fillna()문을 실행한 결과로 바꿀 것인지의 여부를 결정한다. 

df['Age'].fillna(df['Age'].mean(), inplace= True)

df['Age'] = df['Age'].fillna(df['Age'].mean())

위의 두 코드는 의미상 동일하다.

 

승객 번호, 이름 ticket은 생존의 여부와 아무런 관련이 없다. 따라서 해당 feature들은 데이터프레임에서 제거한다.

 

object형식의 변수들을 LabelEncding하는 함수이다. 'Cabin'의 경우 선실 등급을 나타내는 가장 앞 글자만 나타내도록 변경하였다. 

 

label값인 y에 'Survived'를 할당하고 feature인 X에 전 체데이터 프레임에서 'Survived'만 제거한 데이터를 할당하였다. 그후 위에서 작성한 전처리 코드를 모두 적용시켰다.

 

train_test_split()을 통해 먼저 학습 데이터와 테스트 데이터를 나누었다.

 

 

모델 설계

 

결정 트리, 랜덤 포레스트, 로지스틱 회귀 총 3개의 알고리즘을 이용하여 학습을 진행하였다. 

다음과 같이 정확도가 계산되었지만 교차검증을 사용하지 않았기 때문에 정확한 결과가 아닐 수 있다.

 

교차 검증

cross_val_score()를 통해 Stratified K-Fold 교차검증을 실행하였다.

 

마지막으로 GridSearchCV를 이용하여 최적의 하이퍼 파라미터까지 세팅하였다. max_depth = 3, min_samples_leaf = 5, min_samples_split = 2 일 때 가장 높은 정확도를 나타냈다. 따라서 해당 파라미터들로 설정한 후 테스트셋을 이용하여 검증한 결과 0.8715의 매우 높은 정확도를 나타냈다. 

 

※여기서는 train데이터셋 만을 이용하여 GridSearchCV를 이용하였다. 최적의 하이퍼 파라미터를 이용하여 마지막 테스트 결과를 확인하기 위함인 것으로 추측된다.

 

 

 

#이 글은 권철민 작가님의 [파이썬 머신러닝 완벽가이드]를 통해 공부한 내용을 바탕으로 정리하였습니다.