본 게시물은 youhan lee 님의 유튜브 영상을 기반으로 클론코딩을 진행한 뒤 정리한 글입니다.
(유튜브 링크: https://youtu.be/_iqz7tFhox0)
제가 작성한 전체 코드는 깃허브에서 확인하실 수 있어요.
🙄 Titanic 탑승객의 생존 여부를 예측해봅시다
- 목적: titanic 탑승객의 정보를 바탕으로 생존 여부 예측하기
- 결과물: 랜덤포레스트로 예측 모델 구현 (정확도 87%), 가장 중요한 변수: Fare로 나타남
python 시각화 연습과 분석 프로세스를 익히기 위해 진행한 클론 프로젝트입니다.
titanic 데이터는 정말 유명하죠! 아마 데이터 시각화, 데이터 분석에 대한 강의나 이야기를 한 번이라도 들었다면 이 데이터는 아마 익숙할 것입니다.
저도 익숙하게 들어온 데이터셋이지만, 생각해보니 정작 A to Z까지 해봤던 적은 없더라고요. youhan lee 님의 강의 영상을 보고 따라한 뒤 내용을 정리해보았습니다.
데이터 정보 (전처리 전)
- 데이터 출처: 캐글의 titanic data에서 train.csv를 사용합니다 (test.csv는 Survived 컬럼이 존재하지 않음)
컬럼명 | 타입 | 설명 |
Survived (target label) | categorical | 생존 여부 (0= Not Survived, 1= Survived) |
- | - | - |
PassengerId | string(object) | 탑승객 고유 아이디 |
Pclass | categorical | 좌석 등급 (1, 2, 3) |
Name | string(object) | 탑승객 이름 |
Sex | categorical | 성별 (male, female) |
Age | int | 나이 |
SibSp | int | 형제자매 수 |
Parch | int | 같이 탑승한 부모님 혹은 자녀 수 |
Ticket | string(object) | 티켓 이름 (불분명) |
Fare | float | 탑승 요금 |
Cabin | categorical | 선실 |
Embarked | categorical | 탑승한 항구 이름 |
🧐 분석 프로세스
각 프로세스의 목적과 짚고 넘어간 내용
1) Data 확인
- 필요한 라이브러리, 데이터셋 임포트
- 요약 통계, 결측치 여부 체크 (info(), msno, isna.sum() 등 활용)
2) EDA
- 목적: target label이 독립 변수에 대하여 어떤 분포를 가지는지 중심으로 파악
- 필요 시 새로운 변수 생성 (Family = SibSp + Parch)
- crosstab 혹은 kdeplot, countplot 등 활용
- 추후 모델링 과정에서 어떤 변수를 유의해서 봐야할지 파악할 수 있음
** 다음의 과정은 ML 모델을 적용하기 위한 준비입니다. 어떤 방법론을 선택하느냐에 따라서 달라질 수 있음.
3) Feature Engineering
- 결측치 채우기 - age는 Name 기준 grouping 평균으로 채우기
- Name에서 성을 추출하여 그룹핑
- 성 추출하여 initial 컬럼 생성
- 적은 수의 결측치를 가진 경우는 최빈값으로 채우기 (Embarked)
- age 등은 categorizing (함수로 apply 적용)
- Fare은 skewness 확인하고 Scaling (skewness = 4.79 -> 0.44)
4) Pearson Correlation
- 목적: 랜덤포레스트모델 적용 전, 상관계수가 높은 변수들이 있는지 확인하기 위함 (보통 절댓값 >0.7이면 높은 것)
- 이 titanic의 경우 상관관계 강한 변수 없어서 모든 변수 갖고 모델링 진행하기로
5) One-hot Encoding
- 범주형(categorical) 컬럼을 dummy column 만들기 -> 모델의 예측력 높이기 위한 사전 작업
- 필요없는 변수는 drop하기 (dummy column 생성 시 기존 원래 컬럼은 필요없음, 결측치 많았던 컬럼 drop하기)
6) Modeling (RandomForestClassifier)
- 7:3으로 train set/test set split, 랜덤포레스트분류모델 활용 (정확도: 87.2%)
7) Feature Importance
- model 해석 위한 feature importance 추출해보기
- 결과: 해당 모델에서 Fare이 가장 중요도가 높은 변수로 나옴
8) (추가) Tree Visualization
- export_graphviz 활용해 트리 그려보기
- but 랜덤포레스트는 ensemble 모델이라서 하나의 트리만을 임의로 골라서 그려봐야 함. 즉, 크게 의미는 없을 듯 하다 (하나만 그려본다면)
'데이터 분석 > 프로젝트' 카테고리의 다른 글
[개인프로젝트] CLV(Customer Lifetime Value) 예측 - 최종 전처리 (0) | 2023.05.10 |
---|---|
[개인프로젝트] CLV(Customer Lifetime Value) 예측 - 데이터 전처리 (0) | 2023.04.22 |
[개인프로젝트] CLV(Customer Lifetime Value) 예측 - 목표 및 계획 (2) | 2023.04.19 |