Kaggle Competition · Regression · RMSE 0.064
칼로리 소모량 예측
생리학 공식 + ML 하이브리드
Keytel 생리학 공식의 역공학으로 도메인 지식을 추출하고,
4개 모델(ExtraTrees · XGBoost · LightGBM · CatBoost) 앙상블로
RMSE 0.0644 · R² 0.99999+ 달성
0.0644
Final RMSE
0.99999
R² Score
99.9%+
반올림 정확도
4.5×
RMSE 개선 배율
전략 요약 — 3단계 접근법
| 단계 | 방법 | RMSE | 소요 시간 | 개선 |
| STEP 1 |
생리학 공식 역공학 (Keytel · L-BFGS-B 최적화) |
0.2895 |
~20초 |
베이스라인 |
| STEP 2 |
ExtraTrees 잔차 보정 (fp_frac 핵심 피처) |
0.0644 |
~3분 |
4.5× 개선 |
| FINAL |
4모델 앙상블 + Optuna 튜닝 + Nelder-Mead 가중치 최적화 |
0.0644 |
~15분 |
🏆 최종 제출 |
📥
Raw Data
Gender, BPM
Weight, Age
Duration, Temp
Height, BMI
입력
→
🔬
Keytel 공식
역공학
scipy L-BFGS-B
성별별 5개
파라미터 최적화
RMSE 0.2895
→
✨
fp_frac
피처화
소수점 분해
sin/cos 인코딩
22개 피처 생성
핵심 아이디어
→
🎯
Optuna 튜닝
XGB/LGB/CAT
각 20 trial
3-Fold 내부 CV
자동 최적화
→
🌲
4모델
앙상블
ET+XGB+LGB+CAT
5-Fold OOF
잔차 보정
RMSE 0.0644
→
🏆
최종 예측
Nelder-Mead
가중치 최적화
정수 반올림
🥇 제출
fp_frac
fp_dist
fp_sin
fp_cos
fp (공식 예측값)
Exercise_Duration
Body_Temperature(F)
BPM
Age
Weight_kg
Height_in
BMI
Gender_enc
WeightStatus_enc
Dur_BPM
Dur_Temp
Dur_BPM_Temp
Dur_Weight
Dur_Age
Temp_diff
Dur_sq
BPM_sq
🔍 fp_frac — 반올림 방향 결정 메커니즘
공식 예측값의 소수점 위치에 따라 반올림 방향이 완벽하게 결정됩니다.
이 단순한 아이디어 하나가 RMSE를 4.5배 개선시킵니다.
내림 확실
불확실
올림 확실
0.0
0.25
0.5
0.75
1.0
내림 (floor)
경계
올림 (ceil)
fp = 5.12
frac = 0.12 → 내림
예측: 5
fp = 5.49
frac = 0.49 → 불확실
ML이 판단
fp = 5.87
frac = 0.87 → 올림
예측: 6
💡 sin/cos 인코딩의 이유
fp_frac = 0.0과 fp_frac = 1.0은 같은 "내림"이지만 수치상 거리가 1입니다.
sin(2π × frac)과 cos(2π × frac)으로 인코딩하면 주기적 연속성을 보장하여
모델이 소수점 패턴을 더 정확히 학습합니다.
🌲
ExtraTrees
ET
n_estimators: 500
min_samples_leaf: 1
random_state: 42
n_jobs: -1
★ 튜닝 없이 강력
⚡
XGBoost
XGB
n_estimators: ~1000
learning_rate: ~0.05
max_depth: ~7
subsample: ~0.8
Optuna 20 trials
💡
LightGBM
LGB
n_estimators: ~1200
num_leaves: ~100
learning_rate: ~0.03
early_stopping: 100
Optuna 20 trials
🐱
CatBoost
CAT
iterations: ~1500
depth: ~8
learning_rate: ~0.04
l2_leaf_reg: ~3.0
Optuna 20 trials
🎯 Optuna 튜닝 — Trial별 RMSE (시뮬레이션)
⚖️ 최종 앙상블 가중치 (Nelder-Mead 최적화)
📌 Nelder-Mead — 50회 랜덤 초기화, 최적 수렴
📌 OOF 기반 가중치 탐색 (Data Leakage 방지)
📌 ExtraTrees가 fp_frac 패턴에 가장 강력
🔄 5-Fold OOF (Out-of-Fold) 전략
Train
각 fold에서 80% 데이터로 학습 →
Validation
20%로 검증하여 OOF 예측 생성 → 모든 fold 결합으로 완전한 OOF 완성
0.0644
Final RMSE
4.5× improvement over formula-only
0.99999
R² Score
거의 완벽한 설명력
±0.55
최대 잔차 범위
공식 단계 잔차 한계
📍 실제값 vs 예측값 (Predicted vs Actual)
📊 잔차 분포 (Residual Distribution)
🔬 인사이트 1 — 도메인 지식의 위력
Keytel 생리학 공식을 역공학으로 복원한 것이 핵심. 순수 ML 접근만으로는 절대 달성할 수 없는 RMSE를 달성.
도메인 지식 + ML의 결합이 최고의 성능을 만든다.
💎 인사이트 2 — fp_frac의 마법
formula_frac = fp % 1 이 단 한 줄의 피처가 RMSE를 0.289 → 0.064로 줄였다.
데이터가 정수 반올림되었다는 사실을 발견하고, 소수점 정보를 피처로 만든 것이 핵심.
🎯 인사이트 3 — OOF의 중요성
5-Fold OOF 전략으로 Data Leakage를 완벽 차단. 훈련 데이터 전체에 대한 예측을 생성하여
앙상블 가중치를 최적화할 때 공정한 검증 환경 유지.
⚡ 인사이트 4 — Optuna 자동 튜닝
XGBoost, LightGBM, CatBoost 각각 20 trial의 Optuna 튜닝.
MedianPruner로 조기 중단하여 효율적 탐색.
3-Fold 내부 CV로 과적합 방지.
🧠 왜 이 접근법이 효과적인가?
🏗️
생리학 공식
대부분의 분산 설명
RMSE = 0.2895
±0.55 이내 잔차
+
🔍
fp_frac 피처
반올림 방향 신호
소수점 주기 패턴
sin/cos 인코딩
+
🌲
ML 앙상블
미세한 패턴 학습
4모델 다양성
OOF 검증
= RMSE 0.0644 · R² 0.99999 · 반올림 정확도 99.9%+
📤 최종 제출 — submission.csv
전처리
✅ 정수 반올림
✅ 클리핑: [1, 300]
✅ 음수값 제거
예측 범위
📊 1 ~ 300 칼로리
📊 평균: ~150 kcal
📊 정수값 제출
소요 시간
⏱ 공식 역공학: ~20s
⏱ Optuna 튜닝: ~8분
⏱ 앙상블 학습: ~7분