[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 타이타닉 데이터(캐글 튜토리얼)

타이타닉 데이터

캐글 튜토리얼 문제로서, Titanic에 타고 있었던 사람들의 승선정보를 바탕으로 생존자사망자예측하는 문제이다.

먼저 데이터가 어떻게 구성되어 있는지 살펴보자.

https://www.kaggle.com/c/titanic

 

Titanic - Machine Learning from Disaster | Kaggle

 

www.kaggle.com

  • Survived : 0 = 사망, 1 = 생존
  • Pclass : 1 = 1등석, 2 = 2등석, 3 = 3등석
  • Sex : male = 남성, female = 여성
  • Age : 나이
  • SibSp : 타이타닉 호에 동승한 자매 / 배우자의 수
  • Parch : 타이타닉 호에 동승한 부모 / 자식의 수
  • Ticket : 티켓 번호
  • Fare : 승객 요금
  • Cabin : 방 호수
  • Embarked : 탑승지, C = 셰르부르, Q = 퀸즈타운, S = 사우샘프턴

unique() 메소드를 사용하여, 데이터프레임의 속성을 쉽게 알아볼 수도 있다.

결측치 처리

Null값에는 머신러닝이 작동하지 않는다. 그래서 머신러닝에서는 결측치 처리가 중요하다.

  1. Age(탑승자 나이) - 평균값으로 대체
  2. Cabin(선실 번호) -  N으로 대체
  3. Embarked(중간 정착 항구) - N으로 대체

fillna를 통하여, 널값을 채워 놓는다.

데이터 전처리

  • Sex, Cabin, Embarked 속성을 숫자형으로 변경해 준다.
  • Passengerid, Name, Ticket 등 불필요한 속성은 제거해준다.

모델링 및 평가

  • 원본 데이터를 그대로 재로딩해서 X, y로 분리하고 DTC, KNN으로 생존자를 예측해 보자.
  • GridSearchCV를 사용하면 최적의 파라미터와 최적의 스코어를 쉽게 구해볼 수 있다.

DecisionTreeClassifier

from sklearn.model_selection import train_test_split
import sklearn.metrics as mt
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV


X_train, X_test, y_train, y_test = train_test_split(X_titanic_df, y_titanic_df, test_size=0.2, random_state=24)
dt_clf = DecisionTreeClassifier()
parameters = {'max_depth':[2,3], 'min_samples_split':[2,3,4,5]}
grid_dtree = GridSearchCV(dt_clf, param_grid=parameters, cv=3)
grid_dtree.fit(X_train, y_train)
score = grid_dtree.score(X_test, y_test)


# score_df = pd.DataFrame(grid_dtree.cv_results_)
# score_df

print('best parameters : ', grid_dtree.best_params_)
print('best score : ', grid_dtree.best_score_)
score #81.0%

best parameters :  {'max_depth': 3, 'min_samples_split': 2}
best score :  0.7962923566050893
0.8100558659217877

DTC를 사용하여 81.0%의 확률로 생존자를 예측하였다. 

KNN

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
parameters = {'n_neighbors':[1,2,3, 4, 5 , 6, 7]}
grid_knn = GridSearchCV(knn, param_grid=parameters, cv=3)
grid_knn.fit(X_train, y_train)

score = grid_knn.score(X_test, y_test)

# score_df = pd.DataFrame(grid_dtree.cv_results_)
# score_df

print('best parameters : ', grid_knn.best_params_)
print('best score : ', grid_knn.best_score_)
score
73.7

KNN를 사용하여 73.7%의 확률로 생존자를 예측하였다. 

DecisionTree로 모델링 해 본 결과, 81.0%정확도KNN(73.7%) 모델링보다 좀 더 높은 정확도를 보였다.