관리 메뉴

DeseoDeSeo

[ Machine Learning ] ex05_titanic 분류실습 본문

Python

[ Machine Learning ] ex05_titanic 분류실습

deseodeseo 2023. 8. 31. 18:26
< 목표 >
* 타이타닉 데이터를 활용하여 생존자/사망자 예측해보자,
* kaggle 경진대회에 참가하여 우리 점수를 확인해보자.
* machine learning의 전체 과정을 ㅊㅔ험해보자.

 

< 머신러닝 과정 >

 

 - 1. 문제 정의 : 목표설정, 어떤 모델
 - 2. 데이터 수집: 분류를 할거라면 class로 담긴 레이블이 있는 데이터 수집 같은
 - 3. 데이터 전처리 :이상치/결측치 처리. 특성 처리(특성 공학)
 - 4. 데이터 탐색(탐색적 데이터 분석) : 기술통계, 특성 간의 관계
 - 5. 모델 선택 및 하이퍼 파라미터 설정 : 
 - 6. 모델 예측 및 평가
 - 7. 모델 서비스화 

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt # 시각화 라이브러리
import seaborn as sns  # 시각화 라이브러리
# train, test 분리하는 도구
from sklearn.model_selection import train_test_split
# 평가 도구
from sklearn.metrics import accuracy_score
#트리 모델 - 사망/생존 이진 분류
from sklearn.tree import DecisionTreeClassifier
train.info()

  • 0 Survived - 생존/ 사망 여부 (답 데이터, Class Label)
  • 1 Pclass - 승객의 등급(1- 귀족층,2- 중간층,3- 하위계층)
  • 2 Name - 이름
  • 3 Sex - 성별(male, female)
  • 4 Age - 나이(0~
  • 5 SibSp - 형제자매+배우자 수
  • 6 Parch - 부모 + 자식 수
  • 7 Ticket - 티겟 번호
  • 8 Fare - 요금
  • 9 Cabin - 객실번호
  • 10 Embarked - 승선항
각각 train. test 변수에 데이터 불러와서 담기
  단, index를 승객의 번호로 설정해서 담아줄 것.
train = pd.read_csv("./data/titanic/train.csv", index_col= "PassengerId" )
test=pd.read_csv("./data/titanic/test.csv" , index_col= "PassengerId")
train.head(3)

 

크기 확인
print('트레인 크기: ', train.shape)
print('테스트 크기: ', test.shape) # test 정답 데이터 x (1개가 없음.) => kaggle이 알고 있다.

컬럼명만 뽑아서 확인하기
print(train.columns)
print(test.columns)

데이터 전처리 및 데이터 탐색
 - 결측치 확인
 pandas함수 통해서 train결측치 확인
    데이터 자리에 결측치가 있는지?
train.isnull().sum()

info 함수 통해서 train 결측치 확인
train.info()

# 결측치 존재 컬럼 : age, cabin, embarked

info 함수 통해서 test 결측치 확인
test.info()

# 결측치 존재 컬럼 : age, cabin, fare

결측치(행)에 데이터를 채워넣기.
  ( 삭제도 가능하지만 여기서는 데이터를 채워넣음. )
  :  train 의 embarked 결측치 처리: 승객이 탑승한 항구 이름
train데이터 기준으로 embarked 컬럼 확인
train['Embarked']

train데이터 기준으로 embarked 컬럼 확인
train['Embarked'].unique()

빈도수가 높은 승선항 알파벳으로 결측치를 처리해보자.
train['Embarked'].value_counts()

 # S가 가장 많으니까 S로 채우자.

  • 탐색용 데이터는 train.
  • 모델 학습 : 모델이 학습을 잘할 수 있도록 데이터를 셋팅해야함.
  • test 데이터는 모델을 일반화시키는데 도움이 되지 않는다.
  • train 데이터가 학습할 때 사용되고 모델의 일반화에 도움을 줌.
train의 Embarked 결측치를 'S로 채우기
   # fillna('채울값')
train['Embarked']=train['Embarked'].fillna('S')
train['Embarked'].value_counts()

+ ) 
Embarked 컬럼에 결측치가 있던 행의 정보를 확인하고 비슷한 사람의 데이터가 있다면
   그 사람의 승선항 정보를 대체값으로 활용.
- test데이터의 Fare결측치 처리
-요금평균, 중앙값 계산 가능.
- 데이터 분석을 진행하면서 관련이 있을법 한 컬럼을 연관지어서 대체값을 확인해보자

 

 train 기준으로 데이터 탐색한다.
 Fare 컬럼 정보 확인 -> 기술 통계량.
train['Fare'].describe()

[ 변수(특성)간의 상관관계 확인 ]
    # 상관계수(숫자): -1 ~ 1
    # 각 컬럼의 상관 정도를 수치로 표현한 값 : 상관계수
    # -1과 1에 가까울 수록 변수간의 관계성이 있음.
   # 0에 가까울 수록 변수간의 관계성이 적음.
   # 생존 사망과 연관이 있는 컬럼 확인해보기.
train.corr()

절대값으로 출력 !
train.corr()['Survived'].abs()

#pclass가 생존/사망과 연관성이 있을 수 있겠음.
# 따라서 등급에 따른 요금의 중앙값으로 채워주는 것도 의미가 있을거라 생각됨.(강사님)

 

<  등급에 따른 요금의 중앙값  >
     # 1. Pclass, Fare 2개 컬럼만 인덱싱 해보기
     # 2. Pclass 1,2,3 등급끼리 묶기(그룹화하기)
     # 3. median() 집계함수 연결
train[['Pclass','Fare']].groupby('Pclass').median()