절차 : 탐색적 데이터 분석, 피쳐 엔지니어링, 데이터 정리 인코딩, 스케일링 및 사전 처리, 기계 학습 모델, 교차 검증 및 통합 예측
머신러닝의 목적 : 우주선 타이타닉이 시공간 이상과 충돌하는 동안 승객이 대체 차원으로 이송되었는지 예측
train.csv
PassengerId - A unique Id for each passenger.
HomePlanet - The planet the passenger departed from, typically their planet of permanent residence.
CryoSleep - Indicates whether the passenger elected to be put into suspended animation for the duration of the voyage.
Cabin - The cabin number where the passenger is staying.
Destination - The planet the passenger will be debarking to.
Age - The age of the passenger.
VIP - Whether the passenger has paid for special VIP service during the voyage.
Name - The first and last names of the passenger.
Transported - Whether the passenger was transported to another dimension.
test.csv
Personal records for the remaining one-third (~4300) of the passengers, to be used as test data. Your task is to predict the value of Transported for the passengers in this set.
sample_submission.csv
PassengerId - Id for each passenger in the test set.
Transported - The target. For each passenger, predict either True or False.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns # 데이터 분포 시각화
sns.set(style='darkgrid', font_scale=1.4)
from imblearn.over_sampling import SMOTE
import itertools
import warnings
warnings.filterwarnings('ignore')
import plotly.express as px
import time
from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV, StratifiedKFold
from sklearn.metrics import accuracy_score, confusion_matrix, recall_score, precision_score, f1_score
from sklearn.metrics import roc_auc_score, plot_confusion_matrix, plot_roc_curve, roc_curve
from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder, LabelEncoder
from sklearn.feature_selection import mutual_info_classif
from sklearn.decomposition import PCA
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
import eli5
from eli5.sklearn import PermutationImportance
from sklearn.utils import resample
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from catboost import CatBoostClassifier
from sklearn.naive_bayes import GaussianNB
pd.isna() : DataFrame 내의 결측값 확인 후 bool로 반환
DataFrame의 Missing Values를 확인하는 코드
DataFrame의 중복값을 출력, DataFrame의 duplicated된 값을 DataFrame의 사이즈로 1자리 수까지 반올림해 표시
pd.nunique() : DataFrame의 고유값의 수를 출력
pd.dtypes() : DataFrame의 각 열의 타입을 출력
DataFrame 내의 boolean 자료형의 'Transported' 비율은 표시, 거의 반 반의 비율로 이루어져 있으며, under 또는 over sampling을 고려하지 않아도 됨.
HistPlot을 이용하여, 'Age'와 'Transported'의 상관 관계를 출력.
0~17세 층에서는 도착 비율이 더 큼.
18~34세 층에서는 대체적으로 도착하지 못한 비율이 더 큼.
35세 이상에서는 비율이 비슷하다.
나이가 어릴 수록 도착한 비율이 높게 나오며, 18~25세의 집단과 31~50세의 집단은 도착하지 못한 비율이 더 높음.
시설 이용
* 1인 그룹은 상대적으로 도착하지 않은 비율이 높았지만 그 외의 그룹은 도착한 비율이 높음.
중복 등 불필요한 데이터를 제거
* log-transform을 이용하여 시각적으로 보기 편하게 정리
* 자료형에 따라 숫자형과 카데고리형으로 분리 후 인코딩 및 스케일링
* LogisticRegression : 최소 제곱을 사용하는 선형 회귀 분석과 달리 최대우도 추정을 사용하여 목표 변수 분포에 시그모이드 곡선을 사용. S자형/논리 곡선은 데이터가 이진 출력을 가질 때 일반적으로 사용.
* 각 모델 결과 CatBoost와 LGBM의 Validation accuracy가 높음을 확인.