활동-혈당 추론 모델 TO-BE (정확도 우선)
목표
이 문서는 Apple Watch 활동/운동 데이터를 활용해 GlucoseResponse와 InsulinSensitivity 추론 정확도를 높이기 위한 TO-BE 설계를 정리한다. 우선순위는 정확성, 그다음 유연성/확장성이다.
정량 목표:
- 식후 구간(0-2h) 혈당 반응 예측 오차를 AS-IS 대비 유의하게 감소
- 식후 활동 실천(걷기/가벼운 운동)의 효과가 점수와 설명에 반영
- 데이터 결측 환경에서도 graceful fallback 유지
설계 원칙
- 정확도 우선: meal-linked activity 피처를 최우선 도입
- 설명가능성 유지: 초기 단계는 rule+ML hybrid, 디버그 라인 출력 유지
- 개인화 경로 확보: 사용자별 반응 편차를 캘리브레이션으로 흡수
- 규제 프레이밍 유지: 진단이 아닌 경향/인사이트로 제한
- demographic 최소 사용: age/sex/BMI는 baseline calibration 소가중치로만 사용
인구통계(age/sex/BMI) 반영 정책
정확도 개선을 위해 age/sex/BMI를 완전히 배제하지는 않되, 모델의 주효과를 결정하는 주요 축으로 쓰지 않는다. TO-BE 기준에서 demographic은 baseline shift 보정항으로 제한하고, 식후 활동 개입 효과의 방향성을 뒤집지 못하도록 가중치 상한을 둔다.
운영 원칙:
- demographic 항의 절대 기여도는 glucose/insulin 점수 각각 최대 ±10점 이내로 제한
- 데이터가 없는 경우 demographic default(중립값)로 fallback
- subgroup 테스트(연령/성별/BMI 조합)에서 활동 개입 방향성 유지가 release gate
TO-BE 데이터 레이어
현재 Activity 파이프라인은 daily aggregate 중심이다. TO-BE는 식사 시점 기준의 미세 활동 데이터를 추가한다.
P0 (필수):
- 식사 후 0-30/30-60/60-120분 걷기 시간(분)
- 식사 후 누적 active energy (kcal)
- 식사 후 평균/최대 심박과 pre-meal 대비 delta
- 식사 후 좌식 연속 시간(가능 시) 또는 활동 공백 시간
P1 (강화):
- Prior exercise / GLUT4 priming features (식사 2~24h 전 운동, GLUT4 decay 함수) ✅ 구현 완료
- Step count/cadence 구간 피처 ✅ 구현 완료 (80 steps/5min threshold for prior, 60 for post-meal)
- Exercise minutes, stand hours(HealthKit availability 기준)
- 운동 세션 타입(걷기/러닝/사이클)과 강도 zone
P2 (개인화/고급):
- 개인별 식후 반응 민감도 계수(운동 반응성)
- 시간대별 반응 보정(아침/점심/저녁)
TO-BE 피처 엔지니어링
1) Meal-linked activity features
각 식사 이벤트에 대해 아래 피처를 생성한다.
postMealWalkMinutes_0_30postMealWalkMinutes_30_60postMealWalkMinutes_60_120postMealActiveKcal_0_120postMealActivityGapMinutespostMealHRDelta_0_120
2) Sedentary-break features
sittingBreakCount_0_120maxSedentaryBoutMinutes_0_120
3) Interactions
carbLoad x postMealWalkMinutes_0_30carbLoad x postMealActiveKcal_0_120sleepQuality x postMealActivityGap
핵심은 "탄수화물 부하"와 "식후 활동"의 상호작용을 모델에 직접 넣는 것이다.
모델 전략
Phase 1: Rule-based 증강 (빠른 적용)
- 기존
GlucoseInferenceService에 activity penalty/buffer 축 추가 - 예시:
activityBuffer = f(postMealWalkMinutes_0_60, postMealActiveKcal_0_120)stressScore = stressScore - activityBuffer
- 장점: 배포 빠름, 디버그 용이, 리스크 낮음
Phase 2: Hybrid ML (정확도 강화)
- predictor 주입 포인트를 사용해 meal-level supervised 모델 병행
- 입력: 기존 피처 + meal-linked activity 피처
- 출력: 0-100 score + calibrated confidence
Phase 3: Personalized calibration
- 사용자별 편향 보정(rolling calibration)
- 옵션: CGM 또는 HealthKit blood glucose가 있을 때만 개인 캘리브레이터 업데이트
연구 근거와 피처 매핑
| 근거 | 핵심 메시지 | TO-BE 반영 |
|---|---|---|
| DiPietro 2013 (Diabetes Care) | 식후 짧은 걷기 분할이 혈당 억제에 유리 | 0-30/30-60/60-120분 window 피처 |
| Reynolds 2016 (Diabetologia) | 식후 10분 걷기가 비지정 걷기보다 우수 | meal-timing 가중치 강화 |
| Qian 2023 (Sports Med meta) | 식후 운동이 식전 운동보다 혈당 제어에 유리 | post-meal timing feature를 우선 사용 |
| Buffey 2022 randomised acute study | 좌식 중단(standing/walking break)이 식후 혈당 개선에 기여 | sedentary-break 피처 추가 |
| PREDICT 1 2020 (Nature Med) | 동일 식사라도 개인별 반응 편차 큼 | 개인화 캘리브레이션 도입 |
| Edinburgh 2023 (Diabetologia) | 공복 아침 운동이 인슐린 민감도 15-25% 개선, 12-24h 지속 | priorExerciseBuffer 피처 ✅ |
| Van Proeyen 2010 (J Physiol) | 공복 트레이닝이 GLUT4 발현 증가, 당내성 보존 | GLUT4 priming 메커니즘 근거 ✅ |
| Sylow 2017 (Physiol Rev) | GLUT4 반감기 ~4h, 24h까지 잔류 효과 | GLUT4 decay 함수 (exp(-0.173×t)) 설계 근거 ✅ |
추가로 활용 가능한 신호
활동/운동 외에도 정확도 개선에 실질적으로 도움이 될 수 있는 신호:
- 식사 타이밍(아침/저녁): 동일 식사라도 시간대에 따라 반응 차이
- 수면 질/수면 부족: 식후 혈당 반응 변동의 교란 요인
- 최근 스트레스 프록시(HRV/RHR): 같은 활동량에서도 반응 차이를 설명
- 최근 단식 이력: 식후 반응 baseline shift 요인
TO-BE에서는 activity-only 모델이 아니라, "activity + circadian + recovery" 결합 모델로 가야 정확도가 올라간다.
평가 설계
오프라인 지표:
- 식후 2시간 혈당 곡선 기반 MAE/RMSE (가능 시)
- 식후 피크 오차
- 식사 이벤트 단위 rank correlation
- calibration error (confidence vs actual error)
온라인 제품 지표:
- 사용자 체감 정확도(자기보고)
- 식후 걷기 실천율 변화
- "설명 납득도"(디버그/근거 노출 기반)
분할 원칙:
- 사용자 누수 방지 split (user-wise + time-wise)
- meal-level 시계열 분할(미래 데이터 누수 금지)
정확도 gate (Phase 1 rule-based 증강):
- 식후 활동 개입 시나리오에서
GlucoseResponse점수가 sedentary baseline 대비 최소 10% 개선 - subgroup 시나리오(연령/성별/BMI 조합)에서 활동 개입 효과 방향성(개선)이 100% 유지
- debug report에서 activity/demographic 항이 공식과 동일하게 노출
구현 로드맵
- Data 확장 PR
- HealthKit read scope 확장(steps/stand/exercise 가능 범위)
- meal-linked activity extractor 추가
- Feature PR
FeatureEngineering.makeGlucoseFeatures확장InferenceDebugService라인에 새 항목 노출
- Model PR
- rule-based 증강 + 가중치 초기 튜닝
- predictor 병행 경로 추가(실험 플래그)
- Validation PR
- 합성 테스트 + 리플레이 테스트 + A/B 비교 지표 추가
참고 문헌
- DiPietro et al. Diabetes Care, 2013.
https://diabetesjournals.org/care/article/36/10/3262/38015/Postprandial-Walking-is-Better-for-Lowering-the - Reynolds et al. Diabetologia, 2016.
https://pubmed.ncbi.nlm.nih.gov/27747394/ - Qian et al. Sports Medicine, 2023.
https://pubmed.ncbi.nlm.nih.gov/36453835/ - Buffey et al., 2022.
https://pubmed.ncbi.nlm.nih.gov/35147898/ - Berry et al. PREDICT 1, Nature Medicine, 2020. https://www.nature.com/articles/s41591-020-0934-0
- Edinburgh 대학. Fasted Morning Exercise and Insulin Sensitivity, Diabetologia, 2023.
- Van Proeyen et al. Training in the Fasted State Improves Glucose Tolerance, J Physiol, 2010. https://pubmed.ncbi.nlm.nih.gov/20837645/
- Sylow et al. Exercise-Stimulated Glucose Uptake: GLUT4 Translocation, Physiol Rev, 2017. https://pubmed.ncbi.nlm.nih.gov/28615461/
업데이트 이력
- 2026-02-09: 초안 작성
- 2026-02-09: age/sex/BMI 반영 정책 및 subgroup/10% gate 추가
- 2026-02-10: Prior exercise (GLUT4 priming) 연구 3편 추가, P1 구현 완료 표시