ML

DAY 5 ( 타이타닉 생존자 예측 모델 ML 실습 )

도키마 2024. 7. 5. 16:05



 

 

 

 

오늘의 노래 추천 🌙

 

 
꿈 (She's Dreaming)
아티스트
EXO
앨범
LOTTO - The 3rd Album Repackage
발매일
1970.01.01

 

할말이 없음 그저  "GOAT" 일뿐 . . . 다들 이 곡의 진가를 알아줬으면 조켓다



 


 

 

 

 

 

 

 

 

 

 

 

 

DAY 5

 

 

 

 

 

 

 

 

 

 

 

 

 

[  타이타닉 생존자 예측 모델 생성 실습 ]

 

train, test, gender_submission 데이터를 이용해서 생존자 예측 모델 생성하기

test 데이터에는 생존 여부가 없음

 

ㅡ> 데이터 전처리부터 ML (분류모델) 의 전체 과정을 진행

 

 

 

 

ML 의 과정

 

오늘은 데이터 전처리, EDA 에 집중

 

 

 

 

[ 1. 문제 정의 ]

[ 2. 데이터 수집 ]

 

 

문제 정의, 데이터 수집

 

 

 

 

 

[ 3. 데이터 전처리 ]

[ 4. EDA ]

 

 

 

 

ㅡ data 불러오기 ㅡ

pd.read_csv

 

pd.read_csv, index_col

 

index_col 을 이용해 PassengerId 컬럼을 인덱스(고유 식별자)로 지정

 

.shape

 

 

 

 

ㅡ data 정보 파악 ㅡ

info ()

 

train. info ()

 

Age, Cabin, Embarked 컬럼의 데이터에 결측,

dtype 을 확인하고 문자데이터를 숫자로 맵핑해줄지 등을 파악

 

test.info ()

 

마찬가지로 결측치, dtype 등 정보 확인

 

 

 

 

ㅡ 컬럼 상관관계를 파악해 결측치 채우기 ㅡ

corr (), select_dtypes ()

 

corr (), select_dtypes ()

 

단순 기술 통계치가 아닌 다른 컬럼과의 상관관계를 파악해 결측치 채우기

ㅡ> corr () 를 이용해 컬럼간의 상관관계 파악 (절댓값이 높을수록 상관관계 높음)

 

 

 

 

ㅡ corr_matric 를 이용해 히트맵 작성 ㅡ

sns.heatmap

 

heatmap

 

그래프 결과

 

관련성이 높을수록 선명한 색으로 표현

' Pclass ' 가 가장 높은 상관관계를 가짐

 

 

 

ㅡ 상관관계가 높은 column 에 따른 Age 평균 구하기

groupby (), mean ()

 

groupby (), mean ()

 

'Pclass', 'Sex' 를 기준으로 데이터를 그룹화 하고

각 그룹에 대해서 'Age' 의 평균을 계산

 

* 생존에 관련이 많은 것 같은 Sex 컬럼도 그룹핑에 활용

 

loc

 



 

ㅡ Age 가 결측치 (isnan) 일 경우 pt1 의 Age 값을 넣어주는 함수 생성 

def, isnan

 

def

 



 

ㅡ train, test 의 Age 데이터에 fill_age 함수를 적용 

apply, astype ()

 

apply
apply

 

Age 의 결측치가 채워진 것을 볼 수 있음




 

ㅡ Embarked 결측치 채우기 

value_counts (), fillna ()

 

value_counts ()

 

fillna ()

 

결측치의 데이터가 극소수이므로 가장 다수의 값을 넣어줌




 

ㅡ 상관관계가 높은 column 에 따른 Fare 평균 구하기 

groupby (), mean ()

 

groupby () mean ()

 

'Pclass', 'Sex' 를 기준으로 데이터를 그룹화 하고

각 그룹에 대해서 'Fare' 의 평균을 계산

 

* 생존에 관련이 많은 것 같은 Sex 컬럼도 그룹핑에 활용




 

ㅡ Fare 결측치 채우기  

isnull (), fillna ()

 

isnull ()

 

fillna ()

 

Fare 의 결측치가 1개이기 때문에

nan 인 행의 'Pclass', 'Sex' 정보를 확인하고 직접 값을 넣어줌




 

ㅡ Cabin 결측치를 채우기 위해 정보 확인 

info ()

 

info ()

 

unique () 값이 너무 다양하므로 그룹화를 진행




 

ㅡ Cabin 의 값을 그룹화 후 'Deck' 컬럼 생성 ㅡ

fillna (), str []

 

fillna (), str []


ㅡ> 결측치는 'M' 으로 기존 값은 첫 번째 문자만 반영해 새 column 인 'Deck'에 저장




 

ㅡ Cabin 컬럼 삭제 

drop ()

 

drop ()

 

column 을 삭제하기 때문에 axis 를 1로 지정해주고 inplace 값을 True 설정



 

ㅡ 결측치 값 제거 완료 

info ()

 

info ()

 



 

ㅡ 데이터 분석을 위한 "범주형 data" 시각화 진행 ㅡ

info ()

 

범주형 시각화



 

 

ㅡ 'Deck' 와 'Survived' 값의 관계를 범주화/시각화 

groupby (), mean ()

 

groupby () ,count ()
테이블 결과


컬럼 내 값이 숫자형이 아니기 때문에 count 함수 사용

sns.countplot
그래프 결과

 

'M' 그룹에서 사망자가 다수임 ㅡ> 생존 여부 예측에 유의미한 지표

 

 

 

 

ㅡ 'Pclass' 와 'Survived' 값의 관계를 시각화 

sns.countplot

 

sns.countplot
그래프 결과

 

3등급 사망자가 다수임 ㅡ> 유의미한 지표

 

 

 

 

ㅡ 'Deck' 와 'Pclass' 값의 관계를 시각화 

sns.countplot

 

sns.countplot ()
그래프 결과

 

 

 

ㅡ 'Deck' 와 'Pclass' 값의 관계를 시각화 

sns.countplot

 

sns.countplot
그래프 결과

 

 

 

ㅡ 'Deck' 와 'Pclass' 값의 관계를 시각화 

sns.countplot

 

sns.countplot
그래프 결과




 

ㅡ 데이터 분석을 위한 "수치형 data" 시각화 진행 ㅡ

info ()

 

수치형 시각화



 

 

ㅡ Age, Sex 를 기준으로 violinplot 그래프 작성ㅡ

sns.violinplot

 

sns.violinplot
그래프 결과

 

Age 값과 Sex 에 따른 생존 여부를 violinplot 그래프로 시각화

ㅡ> 20~40대 다수 사망, 어린이 중 남아가 비교적 다수 생존

 

 

 

 

ㅡ Fare, Sex 를 기준으로 violinplot 그래프 작성ㅡ

sns.violinplot

 

describe

 

Fare 컬럼 정보 describe

 

sns.violinplot
그래프 결과

 

ㅡ> 요금이 낮을수록 상대적으로 사망자 수 증가

 

 

 

 

ㅡ SibSp + Parch =>  Family_size 라는 새로운 컬럼 생성ㅡ

컬럼 생성

 

Family_size

 

+ 기호를 사용해 각 컬럼의 값을 더하고 'Family_size' 라는 새 컬럼에 저장



 

 

ㅡ Family_size 를 기준으로 countplot 그래프 작성 ㅡ

컬럼 생성

 

sns.countplot
sns.countplot

 

1이거나 5 이상일 때는 생존자 비율이 낮고, 2~4 일때 생존자 비율이 높음

ㅡ> 결과를 기준으로 Family_size 를 한번 더 그룹핑이 가능함 ( S, M, L )



 

 

ㅡ Family_size 를 카테고리화 하기 ㅡ

bins, pd.cut ()

 

pd.cut ( bins, labels )

 

Family_size 값에 따라 카테고리화 해주기 

 

train
Family_group 시각화

 

 

 

 

ㅡ 불필요한 column ( Name, Ticket )삭제 ㅡ

drop ()

 

drop ()

 

 

 

 

ㅡ 문제, 답지 data 분리 ㅡ

X_train, y_train, X_test

 

data 분리

 

 

 

 

ㅡ 범주형 데이터 One-hot Encoding ㅡ

pd.get_dummies, pd.concat, drop

 

범주형 컬럼 묶기

 

범주형 데이터 column 만 묶기


범주형 column 데이터를 One-hot Encoding을 통해

수치형 데이터로 변환하기 위함

 

pd.get_dummies, pd.concat, drop
pd.get_dummies, pd.concat, drop

prefix : cat_name ㅡ> 인코딩 진행 후 컬럼에 기존 컬럼명을 접두사로

 

X_train, X_test 의 컬럼 정보는 일치해야함

 

 

 

 

ㅡ X_train, X_test 에서 불일치하는 column 정보 찾기 ㅡ

set ()

 

set ()

 

 

 

 

ㅡ 컬럼 정보 일치시키기 ㅡ

Deck_T

 

columns

 

X_test 데이터에 Deck_T 컬럼 추가 후 컬럼 순서 일치

 

 

 

 

 

[ 5. 모델 선택 및 학습, 평가 ]

 

적절한 모델을 선택 생성하고 학습, 평가 진행

 

 

 

 

ㅡ 적절한 모델을  ㅡ

Deck_T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

수정중(미완성)

 




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 



 

 

 

 

 

BYE