파일 목록으로

카페인 × 수면 종합 리포트 — 콜라 drill-down

이 리포트의 포지션: "콜라/제로콜라 마신 날 수면 시작 시각이 얼마나 늦어지는지"라는 질문에서 출발해, HealthKit 카페인 샘플의 foodType metadata를 활용해 음료 종류별 (콜라 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)
카페인: dietaryCaffeine quantity samples (FastingWorks 로깅, metadata.foodType에 품명 보존)
수면: sleepAnalysis category 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하게 비교하기 위함.

카페인 식별 결과

카테고리레코드 수비율
coffee27791.1%
other134.3%
cola82.6%
unknown20.7%
tea20.7%
chocolate20.7%

1. 수면 기준선 (전체 113일)

지표n평균중앙값SD범위
잠든 시각11323:3923:3597.8분16:49 ~ 02:45
총 수면 시간 (분)113416.8분432.8분77.1분168.7분 ~ 608.1분
수면 효율 (%)11394.1%94.8%3.6%78.2% ~ 99.5%
Deep 수면 비율 (%)11310.9%10.5%4%0% ~ 23.5%
REM 수면 비율 (%)11318.9%19.4%5.2%0% ~ 30.2%
총 각성 시간 (분)11327.5분24분19.3분1.5분 ~ 109.8분
각성 이벤트 횟수 (>1분)1135.2회5회2.6회1회 ~ 13회

해석 힌트: 사용자의 베이스라인 잠든 시각 SD가 98분(≈1.6시간) 으로 매우 넓음. 이 말은 특정 요인이 잠든 시각을 98분 미만으로 변화시킨다면 자연 변동에 묻혀 관측 불가능하다는 뜻. 카페인의 인과 효과를 드러내려면 평균 이동이 SD의 절반 이상 (즉 약 49분+) 이거나 N이 커야 함.

2. 카페인 섭취 프로필

2.1 일일 총 카페인

지표n평균중앙값SD범위
일일 총 카페인 (전체 113일)113225.2 mg223 mg67 mg0 mg ~ 421 mg
일일 총 카페인 (섭취일만)112227.2 mg223 mg63.8 mg63 mg ~ 421 mg
커피 mg (섭취일만)111223.2 mg223 mg61.5 mg63 mg ~ 421 mg
  • 카페인 섭취한 날: 112/113일 (99%)
  • 콜라 마신 날: 7/113일 (6%) — 커피 대비 드문 이벤트

2.2 카페인 양별 수면 지표

평균 잠든 시각

그룹n평균중앙값SD범위
카페인 없음 (0 mg)122:1822:180분22:18 ~ 22:18
낮은 카페인 (1-75 mg)121:5021:500분21:50 ~ 21:50
중간 카페인 (76-150 mg)1423:3223:1375.1분21:51 ~ 02:06
높은 카페인 (>150 mg)9723:4223:49100.9분16:49 ~ 02:45

총 수면 시간 (분)

그룹n평균중앙값SD범위
카페인 없음 (0 mg)1464분464분0분464분 ~ 464분
낮은 카페인 (1-75 mg)1528.1분528.1분0분528.1분 ~ 528.1분
중간 카페인 (76-150 mg)14403.7분397.4분77.6분303분 ~ 585.5분
높은 카페인 (>150 mg)97417.1분435.8분77.1분168.7분 ~ 608.1분
수면 효율 (%)
그룹n평균중앙값SD범위
------:------------
카페인 없음 (0 mg)187.3%87.3%0%87.3% ~ 87.3%
낮은 카페인 (1-75 mg)194.1%94.1%0%94.1% ~ 94.1%
중간 카페인 (76-150 mg)1493.9%95.1%5.9%78.2% ~ 99.4%
높은 카페인 (>150 mg)9794.2%94.8%3.2%83.2% ~ 99.5%

3. 카페인 타이밍 분석

마지막 카페인 시각 × 잠든 시각: Pearson r = 0.12 (n=112, t≈1.3). 약한 양의 상관이지만 통계적으로 유의하지 않음. 이 사용자의 경우 카페인 섭취 시각 자체가 매일 대체로 일정해서(대부분 아침~이른 오후), "언제 마셨나"라는 변수 자체가 거의 변하지 않음. 그래서 타이밍이 잠든 시각의 변동을 설명하는 힘이 약함. 총량(용량) 쪽이 상대적으로 더 강한 예측 변수로 나오는 건 그 때문.

3.1 저녁/야간 카페인 섭취 여부별 수면 지표

잠든 시각

그룹n평균중앙값SD범위
저녁 카페인 없음 (~16시까지)10423:3923:3698.3분16:49 ~ 02:45
저녁 카페인 (17시-18시)723:2923:0996.8분21:12 ~ 01:57
야간 카페인 (≥19시)200:1600:16123.7분22:48 ~ 01:43

총 수면 시간

그룹n평균중앙값SD범위
저녁 카페인 없음 (~16시까지)104416.2분433.3분78.1분168.7분 ~ 608.1분
저녁 카페인 (17시-18시)7423.9분413.3분75.7분331.5분 ~ 560.6분
야간 카페인 (≥19시)2423분423분55.4분383.9분 ~ 462.2분

수면 효율

그룹n평균중앙값SD범위
저녁 카페인 없음 (~16시까지)10494.1%94.8%3.7%78.2% ~ 99.5%
저녁 카페인 (17시-18시)794.1%93%3.9%87.9% ~ 99.4%
야간 카페인 (≥19시)293.8%93.8%0.2%93.6% ~ 93.9%

4. 음료별 비교 (커피 / 콜라 / 없음)

잠든 시각

그룹n평균중앙값SD범위
커피만10423:3823:3698분16:49 ~ 02:45
콜라 포함723:5122:57104분21:50 ~ 01:57
카페인 없음122:1822:180분22:18 ~ 22:18

총 수면 시간

그룹n평균중앙값SD범위
커피만104417분431.3분78.5분168.7분 ~ 608.1분
콜라 포함7419분441.3분61.7분331.5분 ~ 492.7분
카페인 없음1464분464분0분464분 ~ 464분

콜라 마신 7일 상세

날짜잠든 시각총 수면효율Deep/REM%카페인 총량섭취 내역
2025-12-2801:575h31m97.6%13.4%/20.2%321mg08: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-2122:487h42m93.6%8.7%/21.2%214mg07:32 C 128mg Espresso; 11:04 C 60mg Americano; 19:15 C 26mg Fried Chicken, Pickled Radish,…
2026-02-2522:267h46m92.6%8.6%/24.8%230mg08:25 C 128mg Espresso; 12:36 C 64mg 에스프레소; 17:13 C 38mg 족발, 막국수, 펩시, ...
2026-02-2622:578h13m93.6%10.1%/22.4%289mg07:37 C 150mg 에스프레소; 09:09 C 100mg 에티오피아 드립 커피; 12:30 C 5mg 디카페인 아메리카노; 13:58 C 34mg 소고기 우동볶음, 제로콜라
2026-04-0201:195h56m85.1%8.1%/22.6%300mg09:20 C 120mg 에스프레소; 11:14 C 120mg 에스프레소 (종이 필터링); 13:00 C 60mg 제로콜라
2026-04-0921:507h21m87.7%6.7%/26%271mg07:15 C 126mg 에스프레소; 07:28 C 63mg 에스프레소; 08:37 C 63mg 에스프레소; 14:32 C 19mg 후라이드 치킨, 치킨무, 펩시콜라, 훈제치즈 참크래커
2026-04-1001:436h24m93.9%10.8%/18.5%303mg07:43 C 126mg 에스프레소; 11:16 C 90mg 에스프레소; 15:52 C 19mg 펩시콜라; 20:00 C 68mg 제로콜라

5. 상관관계 요약

변수쌍rnt-stat
total mg vs onset0.2161132.33
total mg vs asleep-0.127113-1.35
total mg vs efficiency0.1471131.56
total mg vs deep pct-0.08113-0.84
coffee mg vs onset0.1841131.97
last caffeine hour vs onset0.1231121.3

참고: |t|>2 가 대략 p<0.05에 해당 (n=113, df≈111). 통계적 유의성이 있어도 관찰 데이터라 인과 해석은 주의.

6. 한계와 주의사항

  1. 관찰 연구 (observational). 콜라/커피 섭취는 무작위 배정이 아닌 사용자의 자발적 선택 → "콜라 마신 날 = 외식/사교 이벤트" 같은 생활 패턴 교란변수와 붙어 있음. 예: 레귤러 콜라 3일 전부가 치킨/족발 세트 식사일이었고, 이런 날은 오히려 일찍 잠.
  2. N 문제. 113일 중 카페인 로깅 있는 날 112일, 콜라 7일, 저녁(≥17시) 카페인 9일. Zero cola vs regular cola 비교는 사실상 불가능.
  3. 카페인 로깅 범위 편향. FastingWorks 영양 분석이 카페인 mg를 추정하는데, "커피" 나 "에스프레소"를 입력하면 표준 값으로 기록됨. 실제 섭취량과 다를 수 있음. 특히 4/9의 "펩시 19mg" 같은 낮은 수치는 실제 한 캔(~38mg)의 절반 수준 — 로깅 단위 문제인지 실제 한 모금인지 구분 불가.
  4. Apple Watch 수면 분류의 정확도 한계. Watch의 Deep/REM 구분은 가속도+HR 기반 추정이라 PSG 대비 오차 있음. 효율과 총 수면은 상대적으로 안정적이지만 Deep/REM 비율은 신뢰도 낮음.
  5. 잠든 시각의 자연 변동이 매우 큼 (SD 98분). 작은 효과는 평균 비교로 감지 불가.
  6. 시계열 효과 (누적/수면 부채)가 모델링되지 않음. 어제 잘 못 잔 날의 수면 부채가 오늘 잠드는 시각을 앞당길 수 있는데, 이 분석은 night-by-night independent로 봄.

7. 권장 사항

데이터 기반으로 할 수 있는 말

  • "마지막 카페인 → 잠든 시각" 상관 r=0.12은 약한 양의 상관 이지만 관찰된 방향성은 일관적임. "늦게 마시면 늦게 잠든다" 라는 기본 직관과 부합.
  • 저녁 카페인(17시 이후)이 있는 밤과 없는 밤의 평균 차이는 1분 (≥17시 n=9 vs 저녁없음 n=104) 정도로 사실상 baseline 변동(SD 98분)에 묻히는 수준. "저녁 카페인 = 늦게 잠"이라는 명확한 증거가 이 데이터에는 없음.

더 강한 증거를 얻으려면

  1. Self-experiment (A/B by week): 2주 베이스라인(저녁 카페인 완전 금지) + 2주 개입(18~20시 제로콜라 1캔 또는 에스프레소 1샷). 같은 기간의 생활 패턴이 통제되기 때문에 9개월짜리 관찰 데이터보다 더 깨끗한 효과 측정 가능.
  2. 용량 응답 곡선 (dose-response): 기존 데이터에서 "저녁 카페인 mg × 잠든 시각 지연" 선형 모델 피팅. 단, 저녁 카페인 있는 날 n이 적어 추정치 불안정.
  3. 카페인 반감기 모델: 각성도 계산에 "마지막 섭취 시각 & 용량 → 취침 시점의 잔류 카페인 mg"를 피처로 만들면 노이즈를 줄일 수 있음 (통상 반감기 5시간).

8. 전체 Per-Night 데이터

전체 113일 per-night 데이터는 /tmp/sleep_caffeine_nights.csv 로 export됨. 재분석 / 시각화 용도.

0 / 93