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분 🏆 최종 제출
OVERVIEW

전체 파이프라인

데이터 입력부터 최종 제출까지 — 5단계 흐름
📥

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
가중치 최적화
정수 반올림

🥇 제출
RMSE 단계별 개선 시각화
STEP 01

생리학 공식 역공학

Keytel 운동 칼로리 공식 — scipy L-BFGS-B 최적화
🔬 발견된 공식 구조
남성 (Male) C = (a1×HR + a2×Wkg + a3×Age + a4) × Dur × (1 + tc × (Temp - 98.6))

여성 (Female) C = (b1×HR + b2×Wkg + b3×Age + b4) × Dur × (1 + tc × (Temp - 98.6))
⚙️ 최적화 설정
# scipy L-BFGS-B — 성별별 독립 최적화 minimize(obj_m, INIT_M, method='L-BFGS-B', options={ 'maxiter': 2_000_000, 'ftol': 1e-20, 'gtol': 1e-20 } ) # 잔차 모두 ±0.55 이내 → 반올림 보정 가능
📊 최적화된 파라미터 값
파라미터의미남성여성
a1 / b1 심박수(HR) 계수 0.15081 0.10687
a2 / b2 체중(kg) 계수 0.02161 -0.01379
a3 / b3 나이(Age) 계수 0.04821 0.01769
a4 / b4 절편 -13.170 -4.870
tc 온도 보정 계수 -6.08e-5 -1.13e-5
📈 공식 단독 성능

💡 핵심 발견: 잔차가 모두 ±0.55 이내

Keytel 공식이 데이터 생성에 사용되었으며, 결과값이 정수로 반올림된 것을 역으로 추론. 공식 예측값의 소수점(fp % 1)이 반올림 방향을 결정한다는 핵심 인사이트 도출 → RMSE 0.2895에서 0.0644로 4.5배 개선 가능.

STEP 02

피처 엔지니어링

22개 피처 — 핵심은 formula_frac (소수점 분해)
⭐ 핵심 피처 — 공식 소수점 분해 (fp_frac)
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
🎯 피처 중요도 (ExtraTrees 기준)
🔍 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.0fp_frac = 1.0은 같은 "내림"이지만 수치상 거리가 1입니다. sin(2π × frac)cos(2π × frac)으로 인코딩하면 주기적 연속성을 보장하여 모델이 소수점 패턴을 더 정확히 학습합니다.

STEP 03

4모델 앙상블 + Optuna 튜닝

5-Fold OOF · Optuna 20 trials · Nelder-Mead 가중치 최적화
🌲

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 최적화)
🌲 ExtraTrees 45.2%
⚡ XGBoost 22.8%
💡 LightGBM 20.3%
🐱 CatBoost 11.7%

📌 Nelder-Mead — 50회 랜덤 초기화, 최적 수렴
📌 OOF 기반 가중치 탐색 (Data Leakage 방지)
📌 ExtraTrees가 fp_frac 패턴에 가장 강력
🔄 5-Fold OOF (Out-of-Fold) 전략
Train 각 fold에서 80% 데이터로 학습 → Validation 20%로 검증하여 OOF 예측 생성 → 모든 fold 결합으로 완전한 OOF 완성
RESULTS

최종 결과 분석

실제 vs 예측 · 잔차 분포 · 단계별 RMSE 개선
0.0644
Final RMSE
4.5× improvement over formula-only
0.99999
R² Score
거의 완벽한 설명력
99.9%+
반올림 정확도
정수 예측 정확도
±0.55
최대 잔차 범위
공식 단계 잔차 한계
📍 실제값 vs 예측값 (Predicted vs Actual)
📊 잔차 분포 (Residual Distribution)
📉 RMSE 단계별 개선 비교
🎯 예측 정확도 — 반올림 후 분포
INSIGHTS

핵심 인사이트 & 학습 포인트

이 프로젝트에서 얻은 가장 중요한 교훈들

🔬 인사이트 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분