카페인 × 수면 종합 리포트 — 콜라 drill-down
이 리포트의 포지션: "콜라/제로콜라 마신 날 수면 시작 시각이 얼마나 늦어지는지"라는 질문에서 출발해, HealthKit 카페인 샘플의
foodTypemetadata를 활용해 음료 종류별 (콜라 vs 커피) 수면 영향을 들여다본 drill-down 리포트입니다.같은 디렉토리의
report.md(전반적 sleep × caffeine, Pharmacokinetic/Granger/Baron-Kenny 포함)와caffeine-multidim.md(카페인 × HRV 다차원)이 기본 분석이고, 이 파일은 그 중 "콜라"에 특화된 하위 분석입니다. 방법론은 의도적으로 심플(Pearson r, Welch t, group comparison)하게 유지했고, dose-response / residual caffeine / mediation 같은 고급 기법은 기존report.md를 참고하세요.관찰 창: 2025-12-19 ~ 2026-04-10 (KST, 113일치)
데이터 소스: Apple HealthKit (Health Data Bridge iOS bridge →@tab0/healthbridge-cli)
카페인:dietaryCaffeinequantity samples (FastingWorks 로깅,metadata.foodType에 품명 보존)
수면:sleepAnalysiscategory samples (Apple Watch, Core/Deep/REM/Unspecified/Awake 스테이지)
재생산: 같은 폴더의cola-drill-down.mjs스크립트 + Health Data Bridge raw pull 2개 (스크립트 상단 주석 참고)
방법론 노트 — 이 리포트의 r=0.22 가
report.md의 "no effect" 와 모순되지 않는 이유이 리포트는 단변량 Pearson 상관 (
caffeine_mg × sleep_onset = +0.22, p≈0.02) 을 보고하고, 같은 디렉토리의report.md는 multivariate 회귀에서 카페인의 independent 기여를 ≈ 0 으로 보고합니다. 두 결과는 같은 데이터를 다른 방식으로 본 것이고 둘 다 사실입니다.
- r=0.22 에는 두 종류의 효과가 섞여 있습니다: (a) 카페인의 직접 자극 효과 (b) "바쁜 날 → 커피도 많이 + 늦게도 잠" 같은 lifestyle confound. 단변량 상관은 둘을 분리하지 못합니다.
report.md의 multivariate 회귀는 취침 시각을 함께 넣어서, 취침 시각이 sleep variance의 68.6% 를 흡수하면 카페인의 independent β 가 거의 0 이 된다는 것을 보였습니다 (β=-0.801 for bedtime, β≈0 for caffeine). 즉 r=0.22 의 대부분은 confound 였다는 뜻.- 같은 데이터의 더 결정적인 증거는 이 리포트의 §3 자체에 있습니다 — 저녁(≥17시) 카페인 코호트 (n=9) vs 안 마신 코호트 (n=104) 의 잠든 시각 차이는 +1분. 카페인이 진짜 직접 효과를 가졌다면 저녁 시간대에서 가장 큰 차이를 보여야 하는데 거의 0 입니다.
실용 결론: 행동 변경 우선순위는
report.md의 multivariate 권고를 따르세요 — "취침 시각 당기기" 가 "카페인 줄이기" 보다 압도적으로 효과적입니다. 이 리포트의 r=0.22 는 데이터에 실재하는 약한 신호이지만 인과 해석은 multivariate 결과에 양보해야 합니다.
요약 (Executive Summary)
- 관찰 기간 동안 113일의 수면 야간 데이터와 112일의 카페인 로깅 데이터가 수집됨. 평균 잠든 시각 23:39, 평균 총 수면 6h57m, 평균 수면 효율 94.1%.
- 🔑 주요 발견 — 총 카페인량 × 잠든 시각: Pearson r = 0.22, n=113, t≈2.33 (약한 상관이지만 통계적으로 유의, p≈0.02 수준). OLS 선형 회귀 기울기는 +31.5분/100mg — 일일 카페인 100mg 증가당 잠든 시각이 약 32분 늦어지는 경향.
- 커피 카페인 → 잠든 시각: r = 0.18, t≈1.97 (borderline). 커피가 주 카페인 소스(82%)이므로 총 카페인 효과의 대부분이 커피 기여.
- 총 카페인량 → 총 수면 시간: r = -0.13 (n=113). 약한 음의 상관 — 카페인 많은 날일수록 살짝 덜 자는 경향이지만 유의하지 않음 (t≈-1.35).
- 수면 효율은 카페인에 민감하지 않음: r=0.15. 일단 잠들면 카페인 용량에 상관없이 평균 94.1%의 효율로 자는 편. 즉 카페인의 영향은 "얼마나 자는가"가 아니라 "언제 잠드는가"에 더 실리는 것으로 관측됨.
- 마지막 카페인 섭취 시각 → 잠든 시각 (timing effect): r=0.12, n=112. 총량 효과보다 약함 — 사용자의 경우 카페인 시각은 대체로 일정하지만 총량이 날마다 달라서, 타이밍보다 용량이 잠든 시각과 더 강하게 연결됨.
- 저녁(17시 이후) 카페인이 있는 날 vs 없는 날: 평균 잠든 시각 차이 = +1분 (≥17시 n=9 vs 저녁없음 n=104). baseline SD 98분에 비해 매우 작아 사실상 null — "저녁 카페인이면 더 늦게 잠든다"는 이 데이터에서 근거 부족.
- 콜라는 n=7로 독립 결론 불가: 커피가 매일(전체의 82%) 소비되는 주 카페인 소스. 콜라는 드물지만 저녁/야간 비중이 높음. 콜라 단독 효과는 이 데이터로 분리 불가.
데이터 및 방법론
수집 방식
Health Data Bridge iOS bridge가 Apple HealthKit을 HTTP로 노출하고, @tab0/healthbridge-cli로 raw quantity/category 샘플을 JSON으로 pull. 카페인 데이터는 FastingWorks 앱이 영양 분석 결과를 HealthKit에 기록하면서 metadata.foodType 필드에 한글 품명을 보존하는 구조 — 이 덕분에 "커피 vs 콜라" 같은 분류가 가능함.
정의
- 잠든 시각 (sleep onset): 야간의 첫 실제 수면 샘플 (
asleepCore/asleepDeep/asleepREM/asleepUnspecified) 의startAt.inBed는 제외 — 실제로 잠든 시각을 측정. - 총 수면 (total asleep): 모든 asleep* 스테이지의 duration 합.
- 수면 효율 (efficiency): asleep / (asleep + awake). Apple Watch 내부 분류 기준.
- 야간 분할 (night bucketing): KST 정오 기준. 어떤 수면 샘플이 D일 12:00 ~ D+1일 12:00 사이에 시작했으면 "D일 밤"으로 간주.
- 카페인 일자 대응: "D일 밤"의 수면은 D일의 waking hours 카페인 섭취와 대응. 즉 14시에 마신 커피는 그날 밤 (14시 ~ 익일 아침까지 자는 시간) 과 짝지어짐.
- 카테고리화: foodType 문자열에 정규식 매칭 — cola/coke/coca-cola/pepsi/콜라/펩시 → "cola"; coffee/espresso/americano/latte/...+ 한글 동의어 → "coffee"; 기타 tea/chocolate/unknown.
- 수면 시간의 linear 표현: "minutes after noon KST". 정오 = 0, 22:00 = 600, 01:00 = 780. 자정을 넘는 수면 시각을 linear하게 비교하기 위함.
카페인 식별 결과
| 카테고리 | 레코드 수 | 비율 |
|---|---|---|
| coffee | 277 | 91.1% |
| other | 13 | 4.3% |
| cola | 8 | 2.6% |
| unknown | 2 | 0.7% |
| tea | 2 | 0.7% |
| chocolate | 2 | 0.7% |
1. 수면 기준선 (전체 113일)
| 지표 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 잠든 시각 | 113 | 23:39 | 23:35 | 97.8분 | 16:49 ~ 02:45 |
| 총 수면 시간 (분) | 113 | 416.8분 | 432.8분 | 77.1분 | 168.7분 ~ 608.1분 |
| 수면 효율 (%) | 113 | 94.1% | 94.8% | 3.6% | 78.2% ~ 99.5% |
| Deep 수면 비율 (%) | 113 | 10.9% | 10.5% | 4% | 0% ~ 23.5% |
| REM 수면 비율 (%) | 113 | 18.9% | 19.4% | 5.2% | 0% ~ 30.2% |
| 총 각성 시간 (분) | 113 | 27.5분 | 24분 | 19.3분 | 1.5분 ~ 109.8분 |
| 각성 이벤트 횟수 (>1분) | 113 | 5.2회 | 5회 | 2.6회 | 1회 ~ 13회 |
해석 힌트: 사용자의 베이스라인 잠든 시각 SD가 98분(≈1.6시간) 으로 매우 넓음. 이 말은 특정 요인이 잠든 시각을 98분 미만으로 변화시킨다면 자연 변동에 묻혀 관측 불가능하다는 뜻. 카페인의 인과 효과를 드러내려면 평균 이동이 SD의 절반 이상 (즉 약 49분+) 이거나 N이 커야 함.
2. 카페인 섭취 프로필
2.1 일일 총 카페인
| 지표 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 일일 총 카페인 (전체 113일) | 113 | 225.2 mg | 223 mg | 67 mg | 0 mg ~ 421 mg |
| 일일 총 카페인 (섭취일만) | 112 | 227.2 mg | 223 mg | 63.8 mg | 63 mg ~ 421 mg |
| 커피 mg (섭취일만) | 111 | 223.2 mg | 223 mg | 61.5 mg | 63 mg ~ 421 mg |
- 카페인 섭취한 날: 112/113일 (99%)
- 콜라 마신 날: 7/113일 (6%) — 커피 대비 드문 이벤트
2.2 카페인 양별 수면 지표
평균 잠든 시각
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 카페인 없음 (0 mg) | 1 | 22:18 | 22:18 | 0분 | 22:18 ~ 22:18 |
| 낮은 카페인 (1-75 mg) | 1 | 21:50 | 21:50 | 0분 | 21:50 ~ 21:50 |
| 중간 카페인 (76-150 mg) | 14 | 23:32 | 23:13 | 75.1분 | 21:51 ~ 02:06 |
| 높은 카페인 (>150 mg) | 97 | 23:42 | 23:49 | 100.9분 | 16:49 ~ 02:45 |
총 수면 시간 (분)
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 카페인 없음 (0 mg) | 1 | 464분 | 464분 | 0분 | 464분 ~ 464분 |
| 낮은 카페인 (1-75 mg) | 1 | 528.1분 | 528.1분 | 0분 | 528.1분 ~ 528.1분 |
| 중간 카페인 (76-150 mg) | 14 | 403.7분 | 397.4분 | 77.6분 | 303분 ~ 585.5분 |
| 높은 카페인 (>150 mg) | 97 | 417.1분 | 435.8분 | 77.1분 | 168.7분 ~ 608.1분 |
| 수면 효율 (%) | |||||
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
| --- | ---: | --- | --- | --- | --- |
| 카페인 없음 (0 mg) | 1 | 87.3% | 87.3% | 0% | 87.3% ~ 87.3% |
| 낮은 카페인 (1-75 mg) | 1 | 94.1% | 94.1% | 0% | 94.1% ~ 94.1% |
| 중간 카페인 (76-150 mg) | 14 | 93.9% | 95.1% | 5.9% | 78.2% ~ 99.4% |
| 높은 카페인 (>150 mg) | 97 | 94.2% | 94.8% | 3.2% | 83.2% ~ 99.5% |
3. 카페인 타이밍 분석
마지막 카페인 시각 × 잠든 시각: Pearson r = 0.12 (n=112, t≈1.3). 약한 양의 상관이지만 통계적으로 유의하지 않음. 이 사용자의 경우 카페인 섭취 시각 자체가 매일 대체로 일정해서(대부분 아침~이른 오후), "언제 마셨나"라는 변수 자체가 거의 변하지 않음. 그래서 타이밍이 잠든 시각의 변동을 설명하는 힘이 약함. 총량(용량) 쪽이 상대적으로 더 강한 예측 변수로 나오는 건 그 때문.
3.1 저녁/야간 카페인 섭취 여부별 수면 지표
잠든 시각
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 저녁 카페인 없음 (~16시까지) | 104 | 23:39 | 23:36 | 98.3분 | 16:49 ~ 02:45 |
| 저녁 카페인 (17시-18시) | 7 | 23:29 | 23:09 | 96.8분 | 21:12 ~ 01:57 |
| 야간 카페인 (≥19시) | 2 | 00:16 | 00:16 | 123.7분 | 22:48 ~ 01:43 |
총 수면 시간
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 저녁 카페인 없음 (~16시까지) | 104 | 416.2분 | 433.3분 | 78.1분 | 168.7분 ~ 608.1분 |
| 저녁 카페인 (17시-18시) | 7 | 423.9분 | 413.3분 | 75.7분 | 331.5분 ~ 560.6분 |
| 야간 카페인 (≥19시) | 2 | 423분 | 423분 | 55.4분 | 383.9분 ~ 462.2분 |
수면 효율
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 저녁 카페인 없음 (~16시까지) | 104 | 94.1% | 94.8% | 3.7% | 78.2% ~ 99.5% |
| 저녁 카페인 (17시-18시) | 7 | 94.1% | 93% | 3.9% | 87.9% ~ 99.4% |
| 야간 카페인 (≥19시) | 2 | 93.8% | 93.8% | 0.2% | 93.6% ~ 93.9% |
4. 음료별 비교 (커피 / 콜라 / 없음)
잠든 시각
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 커피만 | 104 | 23:38 | 23:36 | 98분 | 16:49 ~ 02:45 |
| 콜라 포함 | 7 | 23:51 | 22:57 | 104분 | 21:50 ~ 01:57 |
| 카페인 없음 | 1 | 22:18 | 22:18 | 0분 | 22:18 ~ 22:18 |
총 수면 시간
| 그룹 | n | 평균 | 중앙값 | SD | 범위 |
|---|---|---|---|---|---|
| 커피만 | 104 | 417분 | 431.3분 | 78.5분 | 168.7분 ~ 608.1분 |
| 콜라 포함 | 7 | 419분 | 441.3분 | 61.7분 | 331.5분 ~ 492.7분 |
| 카페인 없음 | 1 | 464분 | 464분 | 0분 | 464분 ~ 464분 |
콜라 마신 7일 상세
| 날짜 | 잠든 시각 | 총 수면 | 효율 | Deep/REM% | 카페인 총량 | 섭취 내역 |
|---|---|---|---|---|---|---|
| 2025-12-28 | 01:57 | 5h31m | 97.6% | 13.4%/20.2% | 321mg | 08:53 C 64mg espresso; 09:28 C 64mg Espresso; 11:42 C 95mg Coffee; 12:25 C 64mg Espresso; 17:08 C 34mg 코카콜라 제로 |
| 2026-02-21 | 22:48 | 7h42m | 93.6% | 8.7%/21.2% | 214mg | 07:32 C 128mg Espresso; 11:04 C 60mg Americano; 19:15 C 26mg Fried Chicken, Pickled Radish,… |
| 2026-02-25 | 22:26 | 7h46m | 92.6% | 8.6%/24.8% | 230mg | 08:25 C 128mg Espresso; 12:36 C 64mg 에스프레소; 17:13 C 38mg 족발, 막국수, 펩시, ... |
| 2026-02-26 | 22:57 | 8h13m | 93.6% | 10.1%/22.4% | 289mg | 07:37 C 150mg 에스프레소; 09:09 C 100mg 에티오피아 드립 커피; 12:30 C 5mg 디카페인 아메리카노; 13:58 C 34mg 소고기 우동볶음, 제로콜라 |
| 2026-04-02 | 01:19 | 5h56m | 85.1% | 8.1%/22.6% | 300mg | 09:20 C 120mg 에스프레소; 11:14 C 120mg 에스프레소 (종이 필터링); 13:00 C 60mg 제로콜라 |
| 2026-04-09 | 21:50 | 7h21m | 87.7% | 6.7%/26% | 271mg | 07:15 C 126mg 에스프레소; 07:28 C 63mg 에스프레소; 08:37 C 63mg 에스프레소; 14:32 C 19mg 후라이드 치킨, 치킨무, 펩시콜라, 훈제치즈 참크래커 |
| 2026-04-10 | 01:43 | 6h24m | 93.9% | 10.8%/18.5% | 303mg | 07:43 C 126mg 에스프레소; 11:16 C 90mg 에스프레소; 15:52 C 19mg 펩시콜라; 20:00 C 68mg 제로콜라 |
5. 상관관계 요약
| 변수쌍 | r | n | t-stat |
|---|---|---|---|
| total mg vs onset | 0.216 | 113 | 2.33 |
| total mg vs asleep | -0.127 | 113 | -1.35 |
| total mg vs efficiency | 0.147 | 113 | 1.56 |
| total mg vs deep pct | -0.08 | 113 | -0.84 |
| coffee mg vs onset | 0.184 | 113 | 1.97 |
| last caffeine hour vs onset | 0.123 | 112 | 1.3 |
참고:
|t|>2가 대략 p<0.05에 해당 (n=113, df≈111). 통계적 유의성이 있어도 관찰 데이터라 인과 해석은 주의.
6. 한계와 주의사항
- 관찰 연구 (observational). 콜라/커피 섭취는 무작위 배정이 아닌 사용자의 자발적 선택 → "콜라 마신 날 = 외식/사교 이벤트" 같은 생활 패턴 교란변수와 붙어 있음. 예: 레귤러 콜라 3일 전부가 치킨/족발 세트 식사일이었고, 이런 날은 오히려 일찍 잠.
- N 문제. 113일 중 카페인 로깅 있는 날 112일, 콜라 7일, 저녁(≥17시) 카페인 9일. Zero cola vs regular cola 비교는 사실상 불가능.
- 카페인 로깅 범위 편향. FastingWorks 영양 분석이 카페인 mg를 추정하는데, "커피" 나 "에스프레소"를 입력하면 표준 값으로 기록됨. 실제 섭취량과 다를 수 있음. 특히 4/9의 "펩시 19mg" 같은 낮은 수치는 실제 한 캔(~38mg)의 절반 수준 — 로깅 단위 문제인지 실제 한 모금인지 구분 불가.
- Apple Watch 수면 분류의 정확도 한계. Watch의 Deep/REM 구분은 가속도+HR 기반 추정이라 PSG 대비 오차 있음. 효율과 총 수면은 상대적으로 안정적이지만 Deep/REM 비율은 신뢰도 낮음.
- 잠든 시각의 자연 변동이 매우 큼 (SD 98분). 작은 효과는 평균 비교로 감지 불가.
- 시계열 효과 (누적/수면 부채)가 모델링되지 않음. 어제 잘 못 잔 날의 수면 부채가 오늘 잠드는 시각을 앞당길 수 있는데, 이 분석은 night-by-night independent로 봄.
7. 권장 사항
데이터 기반으로 할 수 있는 말
- "마지막 카페인 → 잠든 시각" 상관 r=0.12은 약한 양의 상관 이지만 관찰된 방향성은 일관적임. "늦게 마시면 늦게 잠든다" 라는 기본 직관과 부합.
- 저녁 카페인(17시 이후)이 있는 밤과 없는 밤의 평균 차이는 1분 (≥17시 n=9 vs 저녁없음 n=104) 정도로 사실상 baseline 변동(SD 98분)에 묻히는 수준. "저녁 카페인 = 늦게 잠"이라는 명확한 증거가 이 데이터에는 없음.
더 강한 증거를 얻으려면
- Self-experiment (A/B by week): 2주 베이스라인(저녁 카페인 완전 금지) + 2주 개입(18~20시 제로콜라 1캔 또는 에스프레소 1샷). 같은 기간의 생활 패턴이 통제되기 때문에 9개월짜리 관찰 데이터보다 더 깨끗한 효과 측정 가능.
- 용량 응답 곡선 (dose-response): 기존 데이터에서 "저녁 카페인 mg × 잠든 시각 지연" 선형 모델 피팅. 단, 저녁 카페인 있는 날 n이 적어 추정치 불안정.
- 카페인 반감기 모델: 각성도 계산에 "마지막 섭취 시각 & 용량 → 취침 시점의 잔류 카페인 mg"를 피처로 만들면 노이즈를 줄일 수 있음 (통상 반감기 5시간).
8. 전체 Per-Night 데이터
전체 113일 per-night 데이터는 /tmp/sleep_caffeine_nights.csv 로 export됨. 재분석 / 시각화 용도.