티스토리 뷰
오늘은 타이타닉 탑승자 데이터를 활용하여 생존 여부를 예측하는 분류 모델 실습을 진행했습니다.
데이터 전처리부터 시작해서 의사결정나무와 로지스틱 회귀 분석까지 다양한 머신러닝 모델을 적용해 보며,
모델링 과정에서 필요한 전처리 기법과 성능 평가 방법을 실습했습니다.
1. 데이터 전처리
1.1 주요 전처리 내용
- 컬럼명을 모두 소문자로 통일
- 성별을 sex → gender로 바꾸고, 여성은 0, 남성은 1로 변환
- 이름에서 **호칭(title)**만 추출해 특수 호칭(Master, Don, Rev)은 Special로 통합 후 0/1 값으로 변환
- 형제/배우자 수(sibsp)와 부모/자녀 수(parch)를 합산해 sibpar 컬럼 생성
- 가족 수(num_family)를 고려한 1인당 평균 요금(avgfare) 계산
- 최종 분석에 사용할 컬럼만 추출: ['survived', 'pclass', 'sex', 'age', 'title', 'fare', 'num_family']
2. 모델 학습 및 평가
2.1 의사결정나무 (Decision Tree)
- entropy 기준으로 트리 분할
- 최대 깊이(max_depth)는 3으로 설정
- 리프 노드 최소 샘플 수(min_samples_leaf)는 5로 설정해 과적합 방지
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion='entropy', max_depth=3, min_samples_leaf=5)
model.fit(X_train, y_train)
# 정확도 확인
model.score(X_train, y_train) # 84%
model.score(X_test, y_test) # 약 88.5%
2.2 혼동 행렬 시각화
예측 결과에 대한 혼동 행렬을 시각화하여, 실제 정답과 얼마나 잘 맞췄는지를 확인해봤습니다.
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
y_true = [0]*19 + [1]*7
y_pred = [0]*18 + [1]*1 + [0]*2 + [1]*5
cm = confusion_matrix(y_true, y_pred)
plt.figure(figsize=(6, 5))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
xticklabels=['Predicted 0', 'Predicted 1'],
yticklabels=['Actual 0', 'Actual 1'])
plt.title('Confusion Matrix')
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.tight_layout()
plt.show()
- (0,0): 실제 사망자 중 정확히 예측된 수 (18명)
- (1,1): 실제 생존자 중 정확히 예측된 수 (5명)
- (0,1), (1,0): 오답으로 분류된 케이스 (총 3명)

2.3 로지스틱 회귀 분석 (Logistic Regression)
표준화 없이 학습한 경우
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(C=10, solver='liblinear')
model.fit(X_train, y_train)
model.score(X_test, y_test) # 약 79%
StandardScaler, MinMaxScaler로 전처리한 경우
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 이후 train_test_split 후 다시 모델 학습
정규화 후에는 정확도가 100%로 증가하는 경우도 있었지만, 이는 데이터 수가 적어 과적합 가능성도 함께 고려해야 합니다.
3. 결론 및 정리
3.1 오늘 배운 내용
오늘은 타이타닉 데이터를 기반으로 사전 전처리 과정, 분류 모델 적용, 그리고 예측 성능 평가 방법을 실습했습니다.
의사결정나무를 통해 간단한 규칙 기반 분류를 해보았고, 로지스틱 회귀 모델에서는 데이터 표준화의 중요성을 확인할 수 있었습니다.
모델별로 다른 성능 결과를 비교하며, 데이터 스케일링과 파라미터 조정이 예측 성능에 큰 영향을 줄 수 있다는 점도 배웠습니다.
3.2 추가 분석 가능성
앞으로는 SVM, Random Forest, KNN과 같은 다양한 분류 알고리즘을 비교해보고,
GridSearchCV를 활용한 하이퍼파라미터 튜닝을 통해 모델의 성능을 더욱 향상시킬 수 있습니다.
또한, 결측치 처리, 이상치 탐지, 변수 중요도 시각화 등 추가적인 전처리 및 분석 기법도 적용해 보면 좋을 것 같습니다.
'LG U+ Why Not SW 부트캠프 5기' 카테고리의 다른 글
| Flask 웹 프로젝트 시작하기 - 가상환경 설정부터 로그인 기능 구현까지 (0) | 2025.03.31 |
|---|---|
| 상관분석과 회귀분석 실습 (Python 기초부터 통계 이론까지) (0) | 2025.03.27 |
| [Python] 문서 유사도 분석 (0) | 2025.03.12 |
| [Python] 한국어 전처리와 단어 표현 기법 (0) | 2025.03.11 |
| 파이썬을 이용한 미국 항공 운항 데이터 분석(실습) (1) | 2025.02.28 |
