Titanic 생존 예측 분석
Kaggle · Titanic — Machine Learning from Disaster

Titanic 생존 예측 분석

EDA, 모델 9개 비교, 리더보드 격차 진단을 거쳐 결론에 이르렀다. 가장 잘 일반화된 것은 학습한 모델이 아니라 가족 단위 생존 규칙이었다.

0.79904 최종 Public 점수. Woman-Child-Group 규칙으로 test 418명 중 334명을 맞혔다. 성별 기준선보다 14명 많다.
TRAIN / TEST
891 / 418
생존율
38.4%
비교한 모델
9 + 규칙
제출
3회
제출 이력

CV가 높다고 리더보드도 높지는 않았다

0.700.740.780.820.860.78670.76555gender 기준선0.83760.76315v1 Soft Voting0.83950.79904v2 WCG 규칙0.84850.77511v3 WCG + Voting
교차검증 (5-fold × 3 seed)Public LB최고 점수
제출방식CVPublic LB정답 / 418
gender 기준선여성 생존 · 남성 사망0.78670.76555320
v1 Soft VotingLR + RF + XGB0.83760.76315319
v2 WCG 규칙가족 집단 규칙0.83950.79904334
v3 WCG + Voting집단 정보 없으면 ML0.84850.77511324

Titanic은 test 전원을 public으로 채점한다. 0.0024는 1명이다. 그래서 차이는 정답 수로 함께 읽었다.

1 · 데이터와 EDA

성별, 등급, 호칭이 생존을 거의 설명한다

성별, 등급, 호칭별 생존율과 나이·요금·가족 수 분포
train 891명 기준 생존율과 분포
2 · 특징 공학과 모델 비교

상위 모델 간 차이는 fold 변동보다 작다

Title, FamilySize, Deck, Ticket 접두어 같은 행 단위 특징을 만들었다. Ticket 집단 크기, 나이 대치, 1인당 요금처럼 데이터 통계가 필요한 특징은 학습 fold로만 계산해서 검증 fold의 정보가 새지 않게 했다. 검증은 5-fold를 seed 3개로 반복했고, 같은 티켓끼리 묶는 Group CV도 같이 봤다.

모델CV 평균표준편차Ticket Group CV
soft_voting0.83760.02120.8272
lightgbm0.83430.02010.8182
extra_trees0.83120.01880.8215
random_forest0.83090.01980.8238
logistic0.83090.02170.8204
xgboost0.82940.02340.8159
decision_tree0.79980.02610.7925
mlp0.78530.02310.7980
dummy_majority0.61620.00230.6162
모델별 교차검증 정확도 막대그래프
파랑: 일반 CV, 노랑: Ticket Group CV. 오차 막대는 fold 간 표준편차

MLP(신경망)는 0.785로 트리·선형 모델보다 낮았다. 891행의 표 데이터에서는 예상된 결과다.

3 · 첫 제출과 격차 진단

CV 0.8376, 리더보드 0.76315

첫 제출은 성별만 쓰는 기준선보다도 1명 적게 맞혔다. 제출 횟수를 아끼기 위해, 원인을 찾는 실험은 모두 CV로만 했다.

특징 구성LGBMLRRFVoting
A_current0.83430.83090.82940.8372
B_no_group0.83540.83050.83050.8372
C_transductive_group0.84020.82900.83280.8361
D_simple0.84210.82410.83350.8365
E_no_overlap0.83350.82560.82900.8369
4 · Woman-Child-Group 규칙

가족이 함께 살고 함께 죽었다

기본은 "여성 생존, 남성 사망"이다. 성, 등급, 티켓(마지막 글자 제외), 요금, 승선항으로 가족 집단을 묶는다. train에서 같은 집단의 여성·아이가 모두 살았으면 그 집단의 남자아이도 살린다. 모두 죽었으면 그 집단의 여성도 사망으로 바꾼다. 학습하는 값이 없다.

변경test 승객등급티켓train의 같은 집단 여성·아이
남자아이 → 생존Ryerson, Master. John Borie1등석PC 17608Miss. Emily Borie (생존), Miss. Susan Parker "Suzette" (생존)
여성 → 사망Ilmakangas, Miss. Ida Livija3등석STON/O2. 3101270Miss. Pieta Sofia (사망)

CV는 0.8395로 최고 ML 모델과 같았지만 리더보드는 0.79904였다. 성별 기준선과 다르게 예측한 16명 중 15명이 맞았다.

5 · WCG와 ML 결합

CV에서 이긴 결합이 리더보드에서 졌다

WCG가 다루지 못하는 성인 남성과 3등석 여성에 ML을 붙였다. H1은 집단 정보가 없으면 ML, H2는 임계값 보정(중첩 CV), H3는 집단 생존율을 ML 특징으로 넣는 방식이다. "변경분 정확도"는 WCG와 다르게 예측한 사람 중 맞힌 비율이다.

방식CV 평균fold당 WCG 대비 변경변경분 정확도
H1_LGBM_D0.849615.30.559
H1_Voting_A0.84859.20.587
H3_LGBM_D0.847015.10.544
H3_Voting_A0.84439.30.547
H1_LR_A0.844010.80.537
H3_LR_A0.842110.10.523
ML_LGBM_D0.840617.50.506
WCG0.83950.0–
ML_Voting_A0.836912.10.481
H2_LGBM_D0.83614.70.437
H2_LR_A0.83572.30.353
ML_LR_A0.830913.90.445
H1_Voting 평가변경 수정답 / 오답변경분 정확도
Stratified CV4627 / 190.587
Ticket Group CV8560 / 250.706
실제 test (LB에서 역산)226 / 160.273

CV 기대치(0.587)대로라면 22명 중 정답이 6명 이하일 확률은 약 0.3%다. "CV에서 같은 티켓이 섞여 ML이 유리했다"는 가설은 Group CV에서 오히려 이득이 커져서 기각했다. 규칙 밖 집단에서 train과 test의 패턴이 다르다고 판단했지만, 구체적인 원인은 밝히지 못했다.

6 · 교훈

작은 데이터에서 무엇을 믿을 것인가

  1. CV는 비슷한 모델들을 가려내지 못한다. 891행에서는 fold 표준편차(약 0.02)가 모델 간 차이보다 크다.
  2. 도메인 구조가 가장 강한 신호였다. "여성과 아이 먼저", 그리고 가족 단위의 생존이다.
  3. 학습할 값이 적을수록 잘 일반화됐다. 규칙 0.799, ML 0.763~0.775.
  4. 제출은 진단 목적에 맞게 최소화했다. 리더보드를 보고 계속 고르면 그것도 과적합이다.
부록 · 재현

프로젝트 루트에서 실행

.venv/Scripts/python titanic/src/eda.py
.venv/Scripts/python titanic/src/train.py
.venv/Scripts/python titanic/src/experiments.py
.venv/Scripts/python titanic/src/wcg.py --submit-file
.venv/Scripts/python titanic/src/hybrid.py --submit-file

판단이 필요한 지점마다 외부 모델에 자문했다. 일반 판단은 Jev, 중요한 판단(검증 설계, 격차 진단, 결합 설계)은 gpt-6-astra, 리서치는 gpt-6-sol을 썼다. 최종 결정과 그 근거는 작업 기록에 남겼다. 노트북 titanic/notebooks/titanic_analysis.ipynb에 같은 내용이 코드와 함께 있다.