量化自我 · 2016-2026
2016 年 2 月,我第一次打开一个叫 SleepCycle 的应用。此后每一个夜晚,手机都静静地躺在床头,记录着关于睡眠的一切。 十年过去,这些数字堆成了一份出奇丰富的生活档案。在 AI 的帮助下,我第一次将它们摊开来仔细玩味。
01 / 全量数据
先来看看这份原始数据集本身。 从 2016 年 2 月到 2026 年 3 月,App 里一共留下了 3,656 个有效夜晚
这张图的价值不在于立刻给出答案,而在于先建立整体直觉:高质量和低质量的夜晚并不是随机散落的, 但又没有整齐到像教科书,等待着我们深入分析。
把这十年的 SleepCycle 睡眠分画出来,能看到一条清晰的弧线—— 2016 年开始记录时还在 80% 上下徘徊,之后缓慢攀升,2020 年达到顶峰(年均 94.4%), 然后是明显的跌落。2022 年开始持续低迷,2023-2025 年在 79-83% 区间震荡。
02 / 时长与时间
首先是睡眠时长,它与睡眠质量并不总是同向移动。 2020 年的高质量伴随着最长的时长(年均 7.8h), 而 2024-2026 年时长降到了 6.5h 左右,接近这十年的最低点。 注:这里的睡眠时长是 SleepCycle 识别的实际睡眠时间(sleep_h),去除了夜间清醒时段。
入睡时间的数据则表明:「过了午夜才睡」这个 tag 出现了 2305 次,占有效记录的 63%—— 这十年里三分之二的夜晚我都是在严格意义上的"第二天"才上床睡觉。
把十年里所有夜晚按入睡时间段分组,然后看每组的平均质量,结果非常清晰: 每晚一小时,睡眠质量大约跌 4–6 个百分点。23 点前入睡比基线高 4%;凌晨 2 点以后入睡,则会低 11%。
SleepCycle 还会计算每晚睡眠的「规律性」(Regularity)——入睡/起床时间与自身历史节律的吻合程度。
睡眠时长是App推算出的,更客观的指标是:卧床总时长——从上床到起床的整段窗口。 这个窗口代表着一种睡眠质量的上限,如果在床上的时间本身就太短,身体不会有好好睡觉的机会。
关于睡眠,最常见的误解之一是:"今晚熬夜少睡两小时,明晚多睡两小时就能补回来"。 但当我们将十年的连续时间序列拆开,观察前一夜的睡眠剥夺如何影响第二天的行为时,我的身体给出的答案却不太一样。
我的身体不会通过"睡懒觉"来还债。 如果前一晚遭遇了严重的睡眠剥夺(少于 6 小时),第二天晚上的绝对在床时间(Time in Bed)依然会死死钉在 8 小时左右的基准线上。 并没有狂睡 10 个小时,只是比平时提前 2 个半小时(148分钟)上床睡觉。
而大幅度提前上床带来了一个意想不到的"入睡困难悖论"。 按照常理,极度疲惫应该让人倒头就睡。但实际上,在前一夜严重缺觉(<6h)的情况下,第二天的入睡时间反而从正常的 9.9 分钟拉长到了 14.5 分钟(增加了近 50%)。 这可能是因为极度缺觉,导致了神经系统的过度唤醒(皮质醇/肾上腺素代偿性升高),以及生物钟的影响。
此外,数据表明睡眠似乎具有极强的惯性(Momentum)。 如果我们考察连续两天的睡眠质量对第三天的影响,会发现"睡眠债"几乎不可能在一天内被完美偿还。 连续两天的糟糕睡眠,会让第三天的睡眠质量继续被死死压制在 76.7%;而连续两天的高质量睡眠,则意外也能让第三天冲上 90% 以上的巅峰。
这些发现或许揭示了一个有意思的生物学现实:睡眠系统是一个极度厌恶方差的稳态系统。 试图通过"周末狂睡 12 小时"来偿还工作日欠下的睡眠债,至少在我这里是有点行不通的。 唯一有效的还债方式,不是延长单次睡眠的长度,而是老老实实地回到基线,连续几天保持稳定的就寝时间,等待神经系统的过度唤醒缓慢平息。 或许规律性确实比时长更重要。
03 / 行为与睡眠质量
我在Sleep Cycle里加了一些自定义的标签,在睡前和醒后都可以修改。 十年下来,这些标签形成了一个行为数据库,为更有趣的分析提供了基础。
下图展示了 23 个行为标签相对于整体基线(全部夜晚均值 83.3%)的质量差值。 再次注意:这是相关性,不是因果关系。
04 / 事件分析
前一节是一个总体比较:哪些事件整体上更伤睡眠,哪些相对更友好。 这一节把几个值得展开的事件单独拎出来看—— 比如它们出现的频率如何变化,又在什么时间段里变得重要。
出行夜晚只占全部记录的 3.7%(135 晚),但影响极为稳定:平均质量 73.3%,比 baseline 低 10.4 分。 在所有高频行为标签里,它是最可预测的负面项——几乎每次出行都会带来质量下降,说明了稳定的睡眠环境对睡眠质量有多重要。 但数据也揭示了一件反直觉的事:真正的元凶不是出行本身,而是伴随出行的行为模式。
出行结束后并不是慢慢恢复——而是出现明显的回家反弹: 回家后第 2 晚质量达到 87.5,高于日常 baseline(83.7)。 旅行长度上,数据呈现线性关系:越长的旅行,每晚平均质量越低(1 晚 73.5 → 4-7 晚 70.4)——不存在"适应期"的甜蜜区间,每多一晚都是额外代价。 另一个发现:出发前夜没有焦虑信号,质量仅低于 baseline 1.7 分,说明旅行本身并不令人焦虑。
break 标签指的是脱离睡眠状态后又重新睡回去的情形。
它只占全部记录的少数,但一旦出现,通常意味着当晚睡眠出了问题。
数据支撑也很有力:平均质量更低,醒着时间更长,睡眠效率也更差。
上面这张图,是我决定把 break 单独拎出来讲的原因。 在探索性分析里,AI 帮我挑出了几个带有 break 标签的特殊夜晚,其中最有意思的是两次徒步归来后的夜晚—— 同样的疲惫,同样的"回到床上",身体却给出了完全不同的答案。
哈巴雪山归来的那一夜,身体回来了,精神却还留在山上。 情绪、写作、回看当天拍下的视频,把醒着的时间一点点拉长(详见《我的哈巴雪山之旅》)。 而雨崩归来的那一夜,同样是一次长线旅程之后的回响,睡眠却几乎没有受到波及。 同样是"归来后的回响夜",可以走向完全不同的结局—— 真正伤害睡眠的从来不是徒步本身,而是徒步之后,大脑是否愿意让这一天就此落幕。
05 / 疲劳与运动
几乎所有的睡眠卫生建议都会讲同一句话:"白天多运动,把自己累趴下,晚上就能睡个好觉。" 但把十年的步数、锻炼记录和睡眠指标放在一起看,结果却是反过来的——走得越多,睡得越差。
在没有任何锻炼标签的普通日子里,如果当天步数超过 12000,平均睡眠质量并没有上升,反而跌到了 81.4%(对比步数低于 4000 时的 84.6%)。更明显的变化出现在呼吸指标上:高步数日的平均打呼噜时间长达 35 分钟,呼吸中断指数(BD)升到 8.6 次/小时。
但硬币的另一面同样清晰。
把高步数(>10000 步)的日子拆开看,疲劳其实来自三种不同的来源:高强度徒步(Worked out)、旅行奔波(Travel),以及目的性不强的高步数——比如逛街和日常通勤。
三者对睡眠都是负面的,其中旅行奔波最重(质量降至 73.3%,BD 约 8.6)。
但如果换成极低步数(<5000)加上 Worked out 的"靶向运动"(例如游泳或纯力量训练),方向就完全反过来了。
为了排除这只是某种统计错觉,我做了一次更严格的对照:剔除所有带有生病、饮酒、咖啡因和晚睡标签的夜晚,再把不同运动类型的睡眠表现和它发生地的"本地基线"直接对比。 结论并没有被稀释——在这套更干净的基线下,靶向运动仍能让睡眠质量上浮 2.7%,而徒步和旅行奔波则分别带来 2.9% 和 11.2% 的扣分。 换句话说,无结构的体力透支确实在破坏睡眠结构;而真正能反向垫高睡眠底盘的,是那些主要让心肺和肌肉工作、而不让关节过度磨损的运动。
06 / 长期攻防战
健康问题是睡眠质量最大的杀手。
SleepCycle 会记录夜间声音与呼吸相关信号。把这几条线放在一起看,比只盯着睡眠质量分数更能说明问题。
2016-2019 年,打呼噜几乎不存在;2020年1月末春节期间那场严重乙流之后,情况改变了。 打呼噜开始出现,而且再也没有真正退回去:先是零星,再是多数夜晚,最后几乎夜夜都在发生。 到 2025 年,平均每晚已接近 70 分钟。
2022 年底之后,SleepCycle 又开始给出呼吸中断数据;2023 年以后,咳嗽这条线也逐渐变得可用。 这样看,后期的呼吸问题已经不是单一指标恶化,而是一整组负担在同步抬升。 尤其是 2024 年 8-10 月,咳嗽、`sick` 标记、打呼噜和呼吸中断一起形成了一个值得叙述的波段。
sick 标记高度重叠。
这说明后期的衰退已经不只是打呼噜或呼吸中断单一指标变差,而更像是一次更底层的、横跨整个呼吸系统的负担抬升。
一波乍平,一波又起。消化、呼吸两大系统接力成为了我身体中的主战场。
2016-2018 年,每四分之一的夜晚都有肠胃不适的标注; 2018 年底接受四联疗法(艾司拉唑 + 克拉霉素 + 阿莫西林 + 胶体果胶铋), 彻底根除了 HP 感染。经过一段恢复期,到 2019 年,肠胃问题基本平息。 与此同时,打呼噜的出现率从不到 1% 开始悄悄上升。
2020 年1月乙流之后,两条曲线的交叉完成:HP 几乎归零,打呼噜持续攀升。
2025 年 4 月 15 日,在打呼噜和呼吸中断持续恶化、峰值达到 108 分钟/晚、12.84 次/小时之后, 开始自行尝试鼻炎治疗:辅舒良(丙酸氟替卡松)鼻腔喷雾剂,后改为布地奈德,配合海盐水洗鼻。 2025 年 7 月 25 日,MRI 确诊了鼻窦炎和囊肿——这是数年呼吸恶化之后第一次有了明确的结构性诊断。 上气道被鼻腔炎症部分堵塞,呼吸本来就费力,睡眠中更甚。
一开始效果并不明显,但到 2025 年 12 月,通气感开始明显改善—— 不是仪器告诉我的,是身体自己说的。
数据确认了这个感知: 2025 年 4 月打呼噜均值达到顶峰 108 分钟/晚,呼吸中断 12.84 次/小时; 到治疗稳定后(2025 年 12 月—2026 年 3 月),打呼噜降至 约 55 分钟, 呼吸中断降至 约 6.9 次/小时(四个月均值)。 和 2025 年春季的峰值相比,这两个指标都接近减半。
SleepCycle 的质量分数——一如既往——几乎没有动。
07 / 环境与触发器
SleepCycle 偶尔会记录当晚的天气和室温。十年里共有 755 个夜晚留下了有效的室温记录,占全部数据的 20%。 把这些夜晚和呼吸负担放在一起对比,会看到一条很物理的规律: 冷空气是脆弱气道的直接放大器。
气温越低,打呼噜的时间越长,呼吸中断(BD)也越频繁。 室温在 10-18°C(偏冷)时,平均打呼噜时间 38.4 分钟,呼吸中断接近 7.7 次/小时; 室温回暖到 24°C 以上时,这两个数字分别回落到 21.8 分钟 和 5.4 次/小时。
如果说冷空气是惩罚,那么另一种天气似乎提供了某种庇护:雨天。
在记录为"雨天"或"阵雨"的 170 个夜晚里,打呼噜时间出现了断崖式下跌——从晴天/多云时的 32 分钟,骤降到了 19.4 分钟。 更直接的反馈是,第二天醒来感觉"Bad"的比例,也从 46% 显著降到了 38.2%。
如果把环境的定义从"天气"延伸到"居住地(Location Phase)",这十年的几次搬家就串成了一套关于香港居住空间的微观睡眠史:不同的物理空间,直接塑造了不同的睡眠基线。
从绵阳到香港不同片区,平均睡眠质量和有效睡眠时长都呈现出明显的结构性下行。 比较特别的是 Pok Fu Lam 时期——主观标注的噪音困扰(Noisy)比例接近 40%,是十年里的峰值。 到了 Wan Chai(湾仔) 和 Mid-Levels²,表面上的噪音困扰似乎回落了,但这是一个伪象:在这两个阶段,我大幅增加了耳塞的使用频率(图中虚线),用高频的物理抗噪把主观困扰压了下去。
那么,面对糟糕的声学环境,我是怎么应对的? SleepCycle 近三年引入了客观的"环境噪音(Ambient Noise)"分贝监测。 把仪器读出的物理分贝与"戴耳塞"这个行为放在一起看,能看到一条清晰的正相关曲线: 耳塞并不是一种随机的睡前仪式,而是对糟糕物理环境的真实抗争。
08 / 情绪记录
SleepCycle 在醒来时要求我报告状态:Good / OK / Bad / Not set。 这十年里,Bad 占所有有效记录的 38%—— 将近四成的早晨,醒来第一个感受是「不好」; 而 Good 只有 3%,极其稀有。 这不只是因为坏的早晨很多,也因为"好"在这里本来就是一个高阈值判断:在 2016–2025 的十个完整年份里,Good 从未超过 4.1%,而到 2026 目前只剩 1.3%。 如果说打呼噜和呼吸中断是夜里的身体信号,那么情绪标签就是醒来之后的直接口供。
但 SleepCycle 的情绪记录只发生在醒来之后——它更像是对这一夜睡眠质量的评价,而不是入睡前的真实情绪状态。 数据里另有两个 tag 填补了这个空白:睡前负面情绪(sad)和压力大(Stressful day)。 行为 tag 分析显示,「睡前负面情绪」对睡眠质量的拖累达到 −4.6%,是全部 tag 里最强的负面信号之一,比「生病」(−2.0%)和「压力大」(−1.8%)都要更深。 这两个维度——入睡前的情绪状态,与醒来后的主观评价——共同构成了一条算法完全看不见的情绪切面。
2016–2019 年,Bad 率还只是在 25–35% 之间波动。 2021 年突然跳到 48%,从此再没有回到 40% 以下—— 2024 年 48%,2026 年 54%,是十年最高。 这个跳变甚至比 COVID 还早一年,说明某些裂缝在身体指标彻底恶化之前,就已经先出现在主观感受里。
这也是为什么后面那条"修正分"要把 mood 放在核心位置: 它不是附注;它其实是对这一晚过得怎么样最直接的反馈。 传感器记录的是睡眠结构,而情绪标签记录的是活着的感受;后者更主观,却也往往更诚实。
如果睡眠质量分真的能预测你醒来的感受,那高质量的夜晚应该对应很少的 Bad 情绪。 数据的实际情况是:Q 90+ 的夜晚里,仍有 21% 的早晨是 Bad—— 而 Good 只有 6%。评分越高,Bad 比例越低,但从未降到 0。 这张图展示了质量分和主观感受之间始终存在的那道裂隙。
09 / 两种衡量
SleepCycle 的质量分数是一个不透明的黑盒——它基于手机麦克风和加速度计推算睡眠阶段,最终给出一个 0-100% 的数字。但这个数字到底在量化什么?
为了检验它,我又构建了两条校正曲线。 第一条是mood 修正分:仍以 SleepCycle 原始分为底盘,但把醒来情绪(Good / OK / Bad)直接纳入修正。 第二条是完整修正分:在 mood 修正的基础上,再用呼吸相关负担(打呼噜、呼吸中断)继续往下校正。
由于呼吸负担数据在后期版本中才逐步可用,完整修正分只从 2022 年 12 月 之后开始计算。 图里的三条线,分别对应三种不同层次的理解:算法本身、主观感受,以及把呼吸问题也算进去之后的现实状态。 更值得注意的是,这个裂口不是一次性张开的:它先以 mood 的形式出现,再被呼吸负担进一步拉大。 三条线真正想回答的不是"哪个分数更漂亮",而是:同一个夜晚,在不同的尺子下到底会呈现出怎样不同的样子。
10 / 机器学到了什么
前面的章节基本都是一次只看一个变量:晚睡怎样,旅行怎样,某些标签怎样。到这里我想把这些碎片放回一个统一的空间里。 我用近几年的夜晚训练了一个模型,然后换了一个更诚实的问题:当入睡时间、这些标签、近期状态和上下文一起竞争时,到底谁还站得住?1
答案既不神秘,也有点烦。晚睡依然是第一变量,夜间中断和茶 / 咖啡是实打实的代价。 而那些在前面图表里看起来很吓人的标签——尤其是 疲惫 和 过午夜——一旦把入睡时间单独放进模型里,力度就会明显缩水。 机器没有发现什么隐秘的睡眠法则,它做的是一件更有用的事:帮我把原因和它留下的痕迹拆开。
睡眠质量
起床情绪
技术脚注
1 这一节主要使用近几年数据,并且只放入睡前已经知道的变量。目的不是追求最强拟合,而是看哪些因素在真正可行动的前提下仍然保有解释力。
2 这里的相对权重不是单变量相关性,而是变量放在同一个模型里之后,仍然保留下来的解释力度。它更接近“控制了其他因素之后,这个变量还剩多少分量”。
3 这里的“反事实”不是因果证明,而是基于模型做的单变量改动模拟:尽量保持其他背景不变,只看某一个因素变化时,预测结果会往哪个方向移动、幅度大概多大。
11 / 后记
这是一篇极其个人的睡眠分析,但它底下的问题也许并不独特:睡眠是多维的,环境的影响比多数人以为的更大,而算法打出的分数和你真正走进去的那个早晨,并不总是同一回事。
上一节的模型没有揭示什么隐秘的睡眠法则。它做的事情更诚实:把所有因素放在一起竞争,看最后还能站住的到底是什么。排在第一的是入睡时间。不是运动,不是标签,也不是那些我们很喜欢讲述的睡前仪式。几点入睡依然压过几乎所有其他变量,而且它对第二天情绪的伤害,比对应用显示分数的影响更深。
有几件事,到了这里已经很难继续假装看不见。
运动确实有助于睡眠,但不是所有运动都一样。让关节和肌肉过度疲惫的那种,往往适得其反;真正能让数字动起来的,是那些让心肺有效工作、却不带来过度磨损的运动。
“明天多睡补回来”这种想法,在我身上并不成立。身体更倾向于通过提前入睡来还债,而不是把某一个夜晚拉长。恢复节律,比单次加量更重要。
如果有慢性呼吸道问题,冷空气和干燥就是真正的放大器。潮湿的夜晚不只是更舒服,它们对脆弱的气道往往也更友好。
如果经常觉得“评分挺高但感觉不对”,那就更相信自己的感觉。算法测量的是动作和声音,它不测量你必须度过的那个早晨。
数据真正的用处,从来不是替你确认一切都好。它更像是把一种模糊的不安,变成可以被指出来、被审视,也许还能被慢慢改变的东西。