017 이진 분류 - 타이타닉 생존 예측
키워드: 이진 분류, 타이타닉
개요
타이타닉 생존 예측은 머신러닝 입문자에게 가장 유명한 프로젝트입니다. 승객 정보로 생존 여부를 예측하는 이진 분류 문제를 풀어봅니다.
실습 환경
- Python 버전: 3.11 권장
- 필요 패키지:
pycaret[full]>=3.0
데이터 이해
from pycaret.datasets import get_data
data = get_data('titanic')
print(data.info())
| 컬럼 | 설명 | 타입 |
|---|---|---|
| Survived | 생존 여부 (0/1) | 타겟 |
| Pclass | 객실 등급 (1/2/3) | 범주형 |
| Sex | 성별 | 범주형 |
| Age | 나이 | 수치형 |
| SibSp | 동반 형제/배우자 수 | 수치형 |
| Parch | 동반 부모/자녀 수 | 수치형 |
| Fare | 운임 | 수치형 |
| Embarked | 승선 항구 | 범주형 |
전체 워크플로우
from pycaret.classification import *
from pycaret.datasets import get_data
# 1. 데이터 로드
data = get_data('titanic')
# 2. 환경 설정
clf = setup(
data=data,
target='Survived',
ignore_features=['PassengerId', 'Name', 'Ticket', 'Cabin'],
categorical_features=['Pclass'],
numeric_imputation='median',
session_id=42
)
# 3. 모델 비교
best = compare_models(n_select=3)
# 4. 최고 모델 튜닝
tuned = tune_model(best[0])
# 5. 앙상블
blended = blend_models(best)
# 6. 평가
plot_model(blended, plot='auc')
plot_model(blended, plot='confusion_matrix')
plot_model(blended, plot='feature')
# 7. 최종화 및 저장
final = finalize_model(blended)
save_model(final, 'titanic_model')
결과 분석
특성 중요도
plot_model(tuned, plot='feature')
일반적으로 중요한 특성:
- Sex: 여성이 생존율 높음
- Pclass: 1등급 생존율 높음
- Age: 어린이 생존율 높음
- Fare: 높은 운임 = 높은 생존율
성능 지표
Accuracy: 0.82
AUC: 0.87
Recall: 0.75
Precision: 0.80
F1: 0.77
새 승객 예측
import pandas as pd
# 017 새 승객 데이터
new_passenger = pd.DataFrame({
'Pclass': [1],
'Sex': ['female'],
'Age': [25],
'SibSp': [0],
'Parch': [0],
'Fare': [100],
'Embarked': ['C']
})
# 017 예측
loaded_model = load_model('titanic_model')
prediction = predict_model(loaded_model, data=new_passenger)
print(f"생존 예측: {'생존' if prediction['prediction_label'][0] == 1 else '사망'}")
print(f"확률: {prediction['prediction_score'][0]:.2%}")
정리
- 타이타닉은 대표적인 이진 분류 문제
- 결측치가 있어 전처리 학습에 좋음
- 특성 중요도 분석으로 인사이트 도출
- 여성, 1등급, 어린이의 생존율이 높음
다음 글 예고
다음 글에서는 compare_models()로 최적 모델 찾기를 다룹니다.
PyCaret 머신러닝 마스터 시리즈 #017