본문으로 건너뛰기

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')

일반적으로 중요한 특성:

  1. Sex: 여성이 생존율 높음
  2. Pclass: 1등급 생존율 높음
  3. Age: 어린이 생존율 높음
  4. 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