캐글 대회 참가 기록. 실험 과정과 실패한 가설까지 함께 남깁니다.
| 대회 | 유형 | 규모 | 결과 |
|---|---|---|---|
| Playground S6E8 — 스마트폰 중독 예측 | 이진 분류 (ROC-AUC) | 3,532팀 · 69만 행 | 상위 27.8% (981위) |
| Kaggriculture — 농장 시뮬레이션 에이전트 | 시뮬레이션 / 에이전트 | 7,699팀 · 상금 $50,000 | 진행 중 (9/30 마감) |
스마트폰 사용 습관 데이터로 중독 여부를 예측하는 이진 분류 대회. train 691,369행 × 13피처, 평가 지표 ROC-AUC.
| 항목 | 값 |
|---|---|
| 베이스라인 CV AUC | 0.963574 |
| 최종 CV AUC | 0.968290 |
| 최종 Public LB | 0.96939 |
| 누적 개선 | +0.004716 |
| 최종 구성 | LightGBM 3개 + XGBoost 2개 단순 평균 (피처 80개, 10-Fold) |
검증 설계 — 실험 비교는 모두 SEED=42, StratifiedKFold(5, shuffle=True) 동일 분할로 했고,
최종 모델은 10-Fold로 학습했습니다. 리더보드가 아니라 CV로만 판단해, 제출 7회 동안
CV 순위와 LB 순위가 한 번도 어긋나지 않았습니다(순위 상관 1.0).
기록해 둔 것
- PROGRESS.md — 단계별 실험 전 과정
- TOP_SOLUTIONS.md — 상위권이 한 것과 내가 놓친 것. 타깃 인코딩을 '정확한 값'이 아니라 '반올림한 구간'으로 만들어 실패했고, 상위권은 같은 기법으로 +0.0046을 벌었습니다.
배운 것
- EDA는 가설을 만드는 단계지 결론을 내는 단계가 아니다 — 단변량 분석은 트리 모델이 찾아내는 변수 간 상호작용을 보지 못한다.
- 기여하지 않는 피처는 중립이 아니라 점수를 깎는다.
- 통념보다 자기 데이터의 숫자를 믿어라.
1:1 대전 후 은행 잔고를 비교해 Elo를 매기는 시뮬레이션 대회. 정형 ML이 아닙니다.
핵심 발견 — "무엇을 키우느냐"가 아니라 "마을이 사주는 만큼만 파느냐"의 게임
| 품목 | 타일 효율 | 마을 시즌 흡수량 |
|---|---|---|
| MELON | $109/타일·일 (1위) | 30개 (꼴찌) |
| STRAWBERRY | $44.7 | 426개 |
| MILK | — | 327개 |
멜론은 타일 효율 1위지만 사가는 상점이 없어 팔수록 가격이 무너집니다. 표면 지표(생산 효율)가 아니라 실제 제약(수요 흡수량)이 승패를 가릅니다.
성능 추이
| 버전 | 평균 잔고 | 방법 |
|---|---|---|
| v0 (튜토리얼) | 1,060 | 기준 |
| v1 | 1,913 | 수동 튜닝 한계 |
| v2 | 22,560 | Optuna 90회 탐색 |
| v3 | 48,966 | 이동 최소화 (작업 효율 2.2배 → 4.8배) |
| v3.1 | 45,665 | 시기별 고용 (현재 제출본) |
실전 검증의 교훈 — v2는 자체 대전 승률 100%였지만 실제 레이팅은 466이었습니다 (1위는 3,000대). 튜토리얼 봇 하나만 상대로 튜닝했기 때문입니다. 상위권 공개본을 스파링 상대로 확보한 뒤에야 진짜 격차가 보였습니다.
상위권 아이디어를 그대로 베끼지 않고 하나씩 실측
| 아이디어 | 결과 |
|---|---|
| 멜론 도입 | 기각 — 0그루 44,282 vs 20그루 34,097 |
| 비료 수집·판매 | 기각 — 44,282 vs 38,486 |
| 시기별 고용 | 채택 — 44,282 → 45,665 |
같은 재료도 구조가 다르면 결과가 반대입니다.
과적합 검증 — 튜닝에 쓴 시드(42~)보다 처음 보는 시드(900~, 5000~)에서 점수가 더 높아 과적합이 아님을 확인했습니다.
Python 3.11 · LightGBM · XGBoost · CatBoost · Optuna · pandas · scikit-learn
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt대회 원본 데이터는 저장소에 포함하지 않습니다. 각 폴더의 README에 내려받는 방법을 적어 두었습니다.