첫 지도학습, 분류
전처리와 EDA를 지나 드디어 모델. 두 개의 실전 데이터로 분류(classification) 를 익혔다.
의사결정나무 — 대출 승인 예측
loan.csv 로 승인/거절(loan_status)을 예측했다.
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder배운 흐름:
- 전처리: 범주형은 최빈값, 수치형은 중앙값으로 결측 처리 /
LabelEncoder로 문자열 → 숫자 - 학습/테스트 분리:
train_test_split - 학습·시각화: 트리를
plot_tree로 그려 판단 과정을 눈으로 확인 - 평가: 정확도,
confusion_matrix,classification_report - 해석: 특성 중요도(feature importance) — 어떤 변수가 결정에 기여했나 (신용점수
cibil_score등) - 과적합:
max_depth를 키우면 훈련 정확도는 오르지만 일반화가 떨어지는 걸 비교
트리는 "왜 이렇게 예측했는가"를 설명할 수 있다는 점이 매력이었다.
앙상블 — 텔코 고객이탈 예측
Telco-Customer-Churn 으로 한 단계 더 나아갔다.
TotalCharges를pd.to_numeric(errors='coerce')로 변환 후 결측 처리Churn을 Yes/No → 1/0- 원-핫 인코딩(
get_dummies,drop_first=True)과, train 기준으로 test 컬럼을reindex로 맞추기 (누수 방지의 기본) - 수치형만
StandardScaler로 스케일링 - 단일 트리를 넘어 배깅(Bagging)·부스팅(Boosting) 앙상블로 성능 비교
정리
"train 기준으로 test를 맞춘다"는 원칙이 가장 크게 남았다. 모델보다 데이터를 새는 것(leakage) 없이 준비하는 일이 성패를 가른다는 것. 그리고 단일 모델 → 앙상블로 가며 성능이 오르는 과정을 직접 봤다.