← Projects 十年睡眠数据:我们能挖掘到什么?

量化自我 · 2016-2026

十年睡眠数据
我们能挖掘到什么?

2016 年 2 月,我第一次打开一个叫 SleepCycle 的应用。此后每一个夜晚,手机都静静地躺在床头,记录着关于睡眠的一切。 十年过去,这些数字堆成了一份出奇丰富的生活档案。在 AI 的帮助下,我第一次将它们摊开来仔细玩味。

3,656 有效夜晚
10.1 年跨度
83.2% 平均睡眠质量
7.1h 平均实际睡眠时长

十年,摊开来看

先来看看这份原始数据集本身。 从 2016 年 2 月到 2026 年 3 月,App 里一共留下了 3,656 个有效夜晚

这张图的价值不在于立刻给出答案,而在于先建立整体直觉:高质量和低质量的夜晚并不是随机散落的, 但又没有整齐到像教科书,等待着我们深入分析。

入睡时间 × 实际睡眠时长 × 质量(颜色),按年份可筛选

一条有故事的折线

把这十年的 SleepCycle 睡眠分画出来,能看到一条清晰的弧线—— 2016 年开始记录时还在 80% 上下徘徊,之后缓慢攀升,2020 年达到顶峰(年均 94.4%), 然后是明显的跌落。2022 年开始持续低迷,2023-2025 年在 79-83% 区间震荡。

SleepCycle 睡眠分(月度均值,2016-2026)

睡了多久,几点上床

首先是睡眠时长,它与睡眠质量并不总是同向移动。 2020 年的高质量伴随着最长的时长(年均 7.8h, 而 2024-2026 年时长降到了 6.5h 左右,接近这十年的最低点。 注:这里的睡眠时长是 SleepCycle 识别的实际睡眠时间(sleep_h),去除了夜间清醒时段。

入睡时间的数据则表明:「过了午夜才睡」这个 tag 出现了 2305 次,占有效记录的 63%—— 这十年里三分之二的夜晚我都是在严格意义上的"第二天"才上床睡觉。

入睡时间热力图(每年 × 每小时段)

入睡时间 × 睡眠质量(每年 × 每小时段均值)

入睡时间分布:10 年来入睡时间的中位数在凌晨 0:00 前后至 0:40 之间波动。 2026 年推后最明显,中位数接近 0:40。这不是最极端的"猫头鹰"作息,但也不上太健康。
无闹钟之夜:十年里有 1,025 个夜晚打了「无闹钟」tag—— 这个标签指的不是公共假日,而是指第二天没有任何计划,是能自然醒的真正假日。 剔除旅行和休假等干扰后,这些夜晚的实际睡眠时长比普通夜晚多出约 14 分钟(7.20h vs 6.97h), 卧床总时长也多出约 15 分钟(8.14h vs 7.90h),质量高出 +0.6%。 另外,当身体被允许自己决定何时醒来,它会多索取大约 15 分钟(参考延伸幅度)。 这也许代表着睡眠债的一种自然偿还机制:当没有外部压力时,身体会自动多睡一点。虽然每晚只有十几分钟,但积少成多。

值得注意:时长下降与晚睡加剧

年度实际睡眠时长与凌晨 1 点后入睡比例

特别的 2020 年:这一年的最长连续好眠纪录是 76 晚(2020年2月1日-4月17日), 恰好是封控最严格的那段时间。整个十年里,最美的睡眠出现在最无法出门的日子里。

晚睡的代价

把十年里所有夜晚按入睡时间段分组,然后看每组的平均质量,结果非常清晰: 每晚一小时,睡眠质量大约跌 4–6 个百分点。23 点前入睡比基线高 4%;凌晨 2 点以后入睡,则会低 11%。

入睡时间与睡眠质量:每晚一小时的代价

作息规律性:另一条不好看的曲线

SleepCycle 还会计算每晚睡眠的「规律性」(Regularity)——入睡/起床时间与自身历史节律的吻合程度。

作息规律性 vs 睡眠质量(月度走势,2016–2026)

规律性与质量:鸡还是蛋? 这条曲线和睡眠质量分有 r=0.42 的相关性,是所有单一字段里信号最强的一个。 这只是相关性,不是因果。 或许是因为规律性本身就参与了算法的计算,也可能它确实是睡眠质量的一个重要影响因素。

睡眠时长是App推算出的,更客观的指标是:卧床总时长——从上床到起床的整段窗口。 这个窗口代表着一种睡眠质量的上限,如果在床上的时间本身就太短,身体不会有好好睡觉的机会。

卧床总时长分布与睡眠质量

每年短夜晚(<7h)比例

2024 之后短夜晚明显变多:按去重后的夜晚口径看,2020 年卧床少于 7 小时的夜晚只占 3.3%, 到 2024 年升到 26.9%,2025 年进一步升到 29.7%。这已经不是偶发熬夜,而是节律的系统性偏移。
规则其实是简单的:8-9 小时卧床的夜晚最多(42.4%),平均质量 88.5%; 9 小时以上质量更高(90.3%)。不把卧床窗口压到 7 小时以内,就可以避免睡眠质量的大幅下滑。

偿债机制:信用卡可以随便透支吗?

关于睡眠,最常见的误解之一是:"今晚熬夜少睡两小时,明晚多睡两小时就能补回来"。 但当我们将十年的连续时间序列拆开,观察前一夜的睡眠剥夺如何影响第二天的行为时,我的身体给出的答案却不太一样。

我的身体不会通过"睡懒觉"来还债。 如果前一晚遭遇了严重的睡眠剥夺(少于 6 小时),第二天晚上的绝对在床时间(Time in Bed)依然会死死钉在 8 小时左右的基准线上。 并没有狂睡 10 个小时,只是比平时提前 2 个半小时(148分钟)上床睡觉

入睡时间偏移与入睡困难悖论

而大幅度提前上床带来了一个意想不到的"入睡困难悖论"。 按照常理,极度疲惫应该让人倒头就睡。但实际上,在前一夜严重缺觉(<6h)的情况下,第二天的入睡时间反而从正常的 9.9 分钟拉长到了 14.5 分钟(增加了近 50%)。 这可能是因为极度缺觉,导致了神经系统的过度唤醒(皮质醇/肾上腺素代偿性升高),以及生物钟的影响。

此外,数据表明睡眠似乎具有极强的惯性(Momentum)。 如果我们考察连续两天的睡眠质量对第三天的影响,会发现"睡眠债"几乎不可能在一天内被完美偿还。 连续两天的糟糕睡眠,会让第三天的睡眠质量继续被死死压制在 76.7%;而连续两天的高质量睡眠,则意外也能让第三天冲上 90% 以上的巅峰。

连续两日状态对第三日睡眠质量的惯性压制

这些发现或许揭示了一个有意思的生物学现实:睡眠系统是一个极度厌恶方差的稳态系统。 试图通过"周末狂睡 12 小时"来偿还工作日欠下的睡眠债,至少在我这里是有点行不通的。 唯一有效的还债方式,不是延长单次睡眠的长度,而是老老实实地回到基线,连续几天保持稳定的就寝时间,等待神经系统的过度唤醒缓慢平息。 或许规律性确实比时长更重要。

是什么在影响睡眠?

我在Sleep Cycle里加了一些自定义的标签,在睡前和醒后都可以修改。 十年下来,这些标签形成了一个行为数据库,为更有趣的分析提供了基础。

下图展示了 23 个行为标签相对于整体基线(全部夜晚均值 83.3%)的质量差值。 再次注意:这是相关性,不是因果关系。

行为标签与睡眠质量的相关性(相对整体基线的质量差值)

按摩效果最显著 (+5.8%):264 次按摩记录,对应夜晚平均质量高达 89.1%, 是所有标签里提升最明显的。按摩不只是放松肌肉,它实质性地垫高了睡眠的底盘。
旅行 (-10.0%) 和咖啡因 (-9.7%):双重惩罚:在旅行途中,睡眠质量平均掉 10%; 摄入咖啡因的日子,平均掉 9.7%。 饮酒 (-6.5%)、睡前深入思考 (-6.1%) 紧随其后。
锻炼 (-0.2%) 几乎没有正向或负向效果:674 次锻炼记录,质量与整体基线几乎无差别。 问题在于这个标签太粗:游泳、徒步、室内全都混在一起。 在后面我会将它拆开来分析。

事件深入分析

前一节是一个总体比较:哪些事件整体上更伤睡眠,哪些相对更友好。 这一节把几个值得展开的事件单独拎出来看—— 比如它们出现的频率如何变化,又在什么时间段里变得重要。

选择事件:

年度出现频率(%)

有/无该事件夜晚的质量对比

出行:最稳定的睡眠破坏者

出行夜晚只占全部记录的 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 标签指的是脱离睡眠状态后又重新睡回去的情形。 它只占全部记录的少数,但一旦出现,通常意味着当晚睡眠出了问题。 数据支撑也很有力:平均质量更低,醒着时间更长,睡眠效率也更差。

break 的年度占比与质量差值

break 不是更短,而是更碎

不是短睡,而是连续性被破坏:break 夜晚平均质量比非 break 夜晚低 6.4 分, Bad 比例高 25.3 个百分点;但它们并不更短,反而平均卧床与实际睡眠时长都略长。 真正变化的是:醒着时间更长、效率更低、身体动作更多
三个角色:咖啡因更像 trigger,疲劳更像 vulnerability, 而 holiday night 更像一种 permissive context——它不一定显著增加 break 的发生率, 却更容易把一次中断拉长。

两次徒步归来夜:同一种回响,不同的结局

上面这张图,是我决定把 break 单独拎出来讲的原因。 在探索性分析里,AI 帮我挑出了几个带有 break 标签的特殊夜晚,其中最有意思的是两次徒步归来后的夜晚—— 同样的疲惫,同样的"回到床上",身体却给出了完全不同的答案。

哈巴雪山归来的那一夜,身体回来了,精神却还留在山上。 情绪、写作、回看当天拍下的视频,把醒着的时间一点点拉长(详见《我的哈巴雪山之旅》)。 而雨崩归来的那一夜,同样是一次长线旅程之后的回响,睡眠却几乎没有受到波及。 同样是"归来后的回响夜",可以走向完全不同的结局—— 真正伤害睡眠的从来不是徒步本身,而是徒步之后,大脑是否愿意让这一天就此落幕。

走路不管用,游泳有帮助

几乎所有的睡眠卫生建议都会讲同一句话:"白天多运动,把自己累趴下,晚上就能睡个好觉。" 但把十年的步数、锻炼记录和睡眠指标放在一起看,结果却是反过来的——走得越多,睡得越差

在没有任何锻炼标签的普通日子里,如果当天步数超过 12000,平均睡眠质量并没有上升,反而跌到了 81.4%(对比步数低于 4000 时的 84.6%)。更明显的变化出现在呼吸指标上:高步数日的平均打呼噜时间长达 35 分钟,呼吸中断指数(BD)升到 8.6 次/小时

步数疲劳与睡眠质量及呼吸中断的倒挂(2016-2026)

疲劳的代价(Tax of Fatigue:高强度、无结构的体力消耗并没有换来"更深的恢复"; 它更可能引起夜间上呼吸道肌肉的过度松弛或轻度炎症,让本就狭窄的气道更容易被部分堵塞,微觉醒随之增加,睡眠结构也随之被打碎。

但硬币的另一面同样清晰。 把高步数(>10000 步)的日子拆开看,疲劳其实来自三种不同的来源:高强度徒步(Worked out)、旅行奔波(Travel),以及目的性不强的高步数——比如逛街和日常通勤。 三者对睡眠都是负面的,其中旅行奔波最重(质量降至 73.3%,BD 约 8.6)。 但如果换成极低步数(<5000)加上 Worked out 的"靶向运动"(例如游泳或纯力量训练),方向就完全反过来了。

为了排除这只是某种统计错觉,我做了一次更严格的对照:剔除所有带有生病、饮酒、咖啡因和晚睡标签的夜晚,再把不同运动类型的睡眠表现和它发生地的"本地基线"直接对比。 结论并没有被稀释——在这套更干净的基线下,靶向运动仍能让睡眠质量上浮 2.7%,而徒步和旅行奔波则分别带来 2.9% 和 11.2% 的扣分。 换句话说,无结构的体力透支确实在破坏睡眠结构;而真正能反向垫高睡眠底盘的,是那些主要让心肺和肌肉工作、而不让关节过度磨损的运动。

纯净局部基线对比:不同疲劳源对指标的净差值

靶向运动的甜蜜区间:在低步数日(<5k)进行室内或靶向运动——游泳、室内无氧,甚至像《健身环大冒险》这种步数很低、心肺消耗却不小的活动——睡眠质量能稳定在 89.9%。 同一批夜晚里,打呼噜时间降到不足 7 分钟,呼吸中断指数只有 4.0。 不对关节和肌肉造成过度负担的有氧运动,似乎也是对我脆弱呼吸道最友好的一类。

与健康问题的抗争

健康问题是睡眠质量最大的杀手。

呼吸信号的上升

SleepCycle 会记录夜间声音与呼吸相关信号。把这几条线放在一起看,比只盯着睡眠质量分数更能说明问题。

2016-2019 年,打呼噜几乎不存在;2020年1月末春节期间那场严重乙流之后,情况改变了。 打呼噜开始出现,而且再也没有真正退回去:先是零星,再是多数夜晚,最后几乎夜夜都在发生。 到 2025 年,平均每晚已接近 70 分钟

2022 年底之后,SleepCycle 又开始给出呼吸中断数据;2023 年以后,咳嗽这条线也逐渐变得可用。 这样看,后期的呼吸问题已经不是单一指标恶化,而是一整组负担在同步抬升。 尤其是 2024 年 8-10 月,咳嗽、`sick` 标记、打呼噜和呼吸中断一起形成了一个值得叙述的波段。

睡眠质量 vs 呼吸负担(月度走势,2019 年起)

乙流留下的开关:2020 年 1 月末的那场严重乙流(当时曾一度被怀疑是 COVID, 后来检测条件改善才确认为乙流),是打呼噜出现的绝对分水岭。 上呼吸道感染引起鼻黏膜急剧炎症、咽部肌肉松弛;而在症状消退后, 气道的物理结构已经悄悄发生了改变。这个"开关"被按下后,就再也没有真正关上。 两年后(2022 年 12 月)COVID 首次感染,2023 年打呼噜均值从 13 分钟跳跃至 33 分钟, 呼吸中断数据也开始频繁被记录到。到 2024 年 8 月二次 COVID、9 月甲流连续打击后, 2025 年呼吸中断已经攀升至 8.5 次/小时。 同一时间线上,SleepCycle 质量分也留下了清晰的痕迹:2022 年从 87.9% 骤跌至 80.3%, 此后再未完全修复——2024、2025 年仍在 79-80% 徘徊。
Long COVID 与呼吸系统:2022 年底 Long COVID 开始, 不仅是呼吸负担的加重。到 2024 年 8-10 月,这个波段又多了一条新的刺眼证据: 咳嗽指标也在同一时间段内明显抬高,并且与 sick 标记高度重叠。 这说明后期的衰退已经不只是打呼噜或呼吸中断单一指标变差,而更像是一次更底层的、横跨整个呼吸系统的负担抬升。

问题系统的变换

一波乍平,一波又起。消化、呼吸两大系统接力成为了我身体中的主战场

2016-2018 年,每四分之一的夜晚都有肠胃不适的标注; 2018 年底接受四联疗法(艾司拉唑 + 克拉霉素 + 阿莫西林 + 胶体果胶铋), 彻底根除了 HP 感染。经过一段恢复期,到 2019 年,肠胃问题基本平息。 与此同时,打呼噜的出现率从不到 1% 开始悄悄上升。

2020 年1月乙流之后,两条曲线的交叉完成:HP 几乎归零,打呼噜持续攀升。

肠胃 vs 呼吸:两大系统年度占比

接力,而不是痊愈:2019 年睡眠质量升到十年最高(88.3%), 肠胃(HP)问题的消退带来了真实的改善。但就在同一年,打呼噜的出现率已经悄悄从谷底爬升到 20%。
饮食与肠道:叠加效应:单独的「吃得晚」或「肠道未排空」对睡眠质量的影响相对有限(分别为 −0.6% 和 −2.5%)。 但当它们与 HP 不适叠加时,情况急剧恶化:「HP + 吃得晚」的夜晚质量降至 77.8%(−5.5%), 「HP + 肠道未排空」降至 76.9%(−6.4%),而「吃得晚 + 肠道未排空」这个组合(无论是否有 HP 标注) 平均质量仅 74.0%(−9.3%)——是整份数据中负面叠加最强的一个组合。 这说明对肠胃敏感的夜晚,晚餐时间和消化节律的控制,远比表面数字显示的更加重要。

诊断、治疗,与尚未结束的恢复

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 的质量分数——一如既往——几乎没有动。

2024-2026:打呼噜与呼吸中断的近期走势

改善是真实的,但并非线性:2026 年 3 月,BD 指标又反弹回 8.18 次/小时。 身体的恢复不像软件更新那样永远向前,它更像是在某个新的基线附近反复震荡,而不是确定的版本号递增。 鼻窦炎和囊肿仍在,颈椎症状仍在,打呼噜仍在每晚发生。 只是整体烈度在下降,呼吸通道在慢慢、艰难地重新打开。
未完结的故事 (Ongoing story):截至 2026 年 3 月,这一切还没有最终结局。 从 2020 年乙流开始的呼吸系统连带问题已经跨越了六年。 目前 BD 6.9 次/小时相对于正常参考值(<5)依然偏高,距离医学意义上的「解决」还有距离。 鼻窦炎和囊肿仍在持续监控;颈椎症状是另一条并行的暗线,同样和这几年的上呼吸道感染脱不了干系,需要长期干预。 但至少,数据曲线证明了它在往正确的方向走。在这份长达十年的档案里,这已经是值得被特别标注的一笔。

冷空气伤睡,雨夜反而好

SleepCycle 偶尔会记录当晚的天气和室温。十年里共有 755 个夜晚留下了有效的室温记录,占全部数据的 20%。 把这些夜晚和呼吸负担放在一起对比,会看到一条很物理的规律: 冷空气是脆弱气道的直接放大器。

气温越低,打呼噜的时间越长,呼吸中断(BD)也越频繁。 室温在 10-18°C(偏冷)时,平均打呼噜时间 38.4 分钟,呼吸中断接近 7.7 次/小时; 室温回暖到 24°C 以上时,这两个数字分别回落到 21.8 分钟5.4 次/小时

气温对呼吸负担的放大效应(基于 755 个有效室温夜晚)

不是冷让人睡得差,是冷让气道变窄:对于健康人来说,偏凉的室温可能有助于睡眠。 但对于带有鼻窦炎/囊肿的受损气道来说,冷空气会刺激鼻黏膜血管充血肿胀,导致气道更加狭窄。 数据在这里展示的不是主观的"冷暖感知",而是纯粹的物理压迫。

如果说冷空气是惩罚,那么另一种天气似乎提供了某种庇护:雨天

在记录为"雨天"或"阵雨"的 170 个夜晚里,打呼噜时间出现了断崖式下跌——从晴天/多云时的 32 分钟,骤降到了 19.4 分钟。 更直接的反馈是,第二天醒来感觉"Bad"的比例,也从 46% 显著降到了 38.2%

雨天的双重庇护:打呼噜减轻,主观感受改善

湿度与白噪音的胜利:雨夜的改善很可能是双重的。 物理层面上,高湿度空气让呼吸道保持湿润,黏膜不易干燥,打呼噜的烈度随之减轻; 声学层面上,持续的雨声是天然的白噪音,覆盖掉了可能让人微觉醒的环境杂音。 雨夜,是我这套脆弱睡眠系统最喜欢的自然环境。

物理环境与行为的诚实

如果把环境的定义从"天气"延伸到"居住地(Location Phase)",这十年的几次搬家就串成了一套关于香港居住空间的微观睡眠史:不同的物理空间,直接塑造了不同的睡眠基线。

从绵阳到香港不同片区,平均睡眠质量和有效睡眠时长都呈现出明显的结构性下行。 比较特别的是 Pok Fu Lam 时期——主观标注的噪音困扰(Noisy)比例接近 40%,是十年里的峰值。 到了 Wan Chai(湾仔)Mid-Levels²,表面上的噪音困扰似乎回落了,但这是一个伪象:在这两个阶段,我大幅增加了耳塞的使用频率(图中虚线),用高频的物理抗噪把主观困扰压了下去。

居住地变迁:睡眠质量、噪音困扰与物理反制

那么,面对糟糕的声学环境,我是怎么应对的? SleepCycle 近三年引入了客观的"环境噪音(Ambient Noise)"分贝监测。 把仪器读出的物理分贝与"戴耳塞"这个行为放在一起看,能看到一条清晰的正相关曲线: 耳塞并不是一种随机的睡前仪式,而是对糟糕物理环境的真实抗争。

客观噪音 vs 行为反制:耳塞的使用率分布

外包与收回:Wan Chai 和 Mid-Levels² 是典型的"外包负担期"——用行为去填环境的坑。 而到了 Science Park,主观噪音消退,耳塞使用率也回落到接近 0%;取而代之的,是内部呼吸系统的杂音(见前文《06 / 身体的长期账》)开始彻底暴露。 外部环境越安静,内部的喧哗反而被照得越清楚。

算法看不见的那条线

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 放在核心位置: 它不是附注;它其实是对这一晚过得怎么样最直接的反馈。 传感器记录的是睡眠结构,而情绪标签记录的是活着的感受;后者更主观,却也往往更诚实。

每年情绪分布(Good / OK / Bad)

睡前情绪的重量:带着负面情绪入睡的夜晚(「睡前负面情绪」tag), 次日早晨报告 Bad 状态的比例高达 75%——是整体均值(38%)的近两倍。 质量差值 −4.6%,比「生病」(−2.0%)还重。 更值得注意的是滞后效应:带着负面情绪入睡的夜晚,次日质量反而微升至 85.2% ——但次日早晨报坏的比例仍有 45%,说明身体的睡眠结构已经修复,但情绪的余震还没散。

算法的质量分 vs 你的早晨感受

如果睡眠质量分真的能预测你醒来的感受,那高质量的夜晚应该对应很少的 Bad 情绪。 数据的实际情况是:Q 90+ 的夜晚里,仍有 21% 的早晨是 Bad—— 而 Good 只有 6%。评分越高,Bad 比例越低,但从未降到 0。 这张图展示了质量分和主观感受之间始终存在的那道裂隙。

质量分区间内的早晨情绪分布

2021 年的跳变:Bad 率从 35% 瞬间跳到了 48%,这发生在 COVID 开始的前一年。 诡异的是,那一年的 SleepCycle 睡眠质量分数反而是 87.9%,仅次于 2020 年的历史最高点。 正因为这种严重的不对等,这一主观上的跳变后来在"修正分"计算里变成了第一道真正的裂口。 机器觉得我睡得好,我觉得我过得糟——这个裂缝是真实存在的,而且至今从未弥合。

两种衡量,两种现实

SleepCycle 的质量分数是一个不透明的黑盒——它基于手机麦克风和加速度计推算睡眠阶段,最终给出一个 0-100% 的数字。但这个数字到底在量化什么?

为了检验它,我又构建了两条校正曲线。 第一条是mood 修正分:仍以 SleepCycle 原始分为底盘,但把醒来情绪(Good / OK / Bad)直接纳入修正。 第二条是完整修正分:在 mood 修正的基础上,再用呼吸相关负担(打呼噜、呼吸中断)继续往下校正。

由于呼吸负担数据在后期版本中才逐步可用,完整修正分只从 2022 年 12 月 之后开始计算。 图里的三条线,分别对应三种不同层次的理解:算法本身、主观感受,以及把呼吸问题也算进去之后的现实状态。 更值得注意的是,这个裂口不是一次性张开的:它先以 mood 的形式出现,再被呼吸负担进一步拉大。 三条线真正想回答的不是"哪个分数更漂亮",而是:同一个夜晚,在不同的尺子下到底会呈现出怎样不同的样子

SleepCycle 原始分 / mood 修正分 / 完整修正分(月度均值)

2020 年的第一处偏离:SleepCycle 原始分给出了 94.4% 的高分,但仅靠醒来情绪修正的 mood 修正分已经被拉低到了 90.1%。 这说明在呼吸负担全面恶化之前,仅靠早晨的第一直觉,2020 年也没有算法描绘的那么完美。 换句话说,睡眠系统的第一道裂口,先出现在人的主观感受里,然后才被硬件传感器捕捉到。
2022 年底之后的第二道裂口:先是 mood 修正分被拉低;当呼吸负担(打呼噜/呼吸中断)再作为惩罚项加入后,完整修正分继续向下塌陷。 到 2024-2026 年,这种偏离已经固化为一种新的结构:原始分仍在乐观的 79-80% 震荡,mood 修正分跌至 72-74,而完整修正分已经触底到 66-67。 后期的问题不再是短期异常,而是三把尺子彻底指向了三种平行的现实。 算法并没有撒谎,只是它从不去量那些它看不见的东西。
修正分的本质:它不是要把分数算得更复杂,而是想把被过度简化的"硬件原始分"重新放回那个粗糙、多维的人类经验里。 如果说原始分记录的是加速度计眼里的"平静",那么修正分记录的,就是我拖着这具身体醒来时,切切实实要面对的那个早晨。
睡眠阶段数据的局限:SleepCycle 还会输出浅睡、深睡、做梦(REM)三段时长,但这份数据的可信度有明显缺口。 深睡和 REM 数据仅在 2025 年之后才出现(覆盖率 11%),无法做长期趋势分析。 更值得注意的是,「浅睡」时长在 2025 年前后突然从 7h 左右骤降至 4h—— 并非生理上发生了什么,而几乎可以确定是 SleepCycle 在某个版本更新中改变了阶段分类算法, 导致历史数据与新数据不可直接对比。因此本文完全不使用睡眠阶段时长做结论,只使用质量分、时长、呼吸信号等更稳定的指标。 这本身就是量化自我的一个典型陷阱:数据的连续性≠方法的连续性

当变量开始彼此竞争

前面的章节基本都是一次只看一个变量:晚睡怎样,旅行怎样,某些标签怎样。到这里我想把这些碎片放回一个统一的空间里。 我用近几年的夜晚训练了一个模型,然后换了一个更诚实的问题:当入睡时间、这些标签、近期状态和上下文一起竞争时,到底谁还站得住?1

答案既不神秘,也有点烦。晚睡依然是第一变量,夜间中断和茶 / 咖啡是实打实的代价。 而那些在前面图表里看起来很吓人的标签——尤其是 疲惫过午夜——一旦把入睡时间单独放进模型里,力度就会明显缩水。 机器没有发现什么隐秘的睡眠法则,它做的是一件更有用的事:帮我把原因和它留下的痕迹拆开

把所有因素一起考虑时,最后留下来的重点2

最先跳出来的事实:晚睡依然是最强的那个变量,而且它对第二天情绪的影响,比对质量分的影响还更敏感。 这几乎直接解释了一种常见的挫败感:应用觉得"睡得还行",但第二天人还是明显不对劲。

反事实:如果我只改一件事,会怎样3

睡眠质量

起床情绪

这个不对称值得多想一会儿:把入睡时间推迟一小时,对第二天情绪的伤害比对质量分的伤害大得多。 换句话说,"身体睡过去了" 和 "第二天状态没问题" 根本不是同一句话。
也是在这里,前面的图表被纠正了一下:像 疲惫过午夜 这样的标签,单看时几乎像灾难本身。 但一旦把入睡时间单独建模,它们的大部分伤害就会明显消退。标签不是原因,它只是原因留下来的痕迹。
我最在意的错位:测试集里仍有 14% 的夜晚,质量分已经不低(≥80),但第二天情绪依然很差。 在这些夜晚里,100% 都带着 疲惫92% 依然过了午夜, 平均入睡时间偏移达到 4.8h。这就是分数不够的地方:身体可能睡着了,节律却仍然是坏的。

技术脚注

1 这一节主要使用近几年数据,并且只放入睡前已经知道的变量。目的不是追求最强拟合,而是看哪些因素在真正可行动的前提下仍然保有解释力。

2 这里的相对权重不是单变量相关性,而是变量放在同一个模型里之后,仍然保留下来的解释力度。它更接近“控制了其他因素之后,这个变量还剩多少分量”。

3 这里的“反事实”不是因果证明,而是基于模型做的单变量改动模拟:尽量保持其他背景不变,只看某一个因素变化时,预测结果会往哪个方向移动、幅度大概多大。

数字能告诉我什么

这是一篇极其个人的睡眠分析,但它底下的问题也许并不独特:睡眠是多维的,环境的影响比多数人以为的更大,而算法打出的分数和你真正走进去的那个早晨,并不总是同一回事。

上一节的模型没有揭示什么隐秘的睡眠法则。它做的事情更诚实:把所有因素放在一起竞争,看最后还能站住的到底是什么。排在第一的是入睡时间。不是运动,不是标签,也不是那些我们很喜欢讲述的睡前仪式。几点入睡依然压过几乎所有其他变量,而且它对第二天情绪的伤害,比对应用显示分数的影响更深。

有几件事,到了这里已经很难继续假装看不见。

运动确实有助于睡眠,但不是所有运动都一样。让关节和肌肉过度疲惫的那种,往往适得其反;真正能让数字动起来的,是那些让心肺有效工作、却不带来过度磨损的运动。

“明天多睡补回来”这种想法,在我身上并不成立。身体更倾向于通过提前入睡来还债,而不是把某一个夜晚拉长。恢复节律,比单次加量更重要。

如果有慢性呼吸道问题,冷空气和干燥就是真正的放大器。潮湿的夜晚不只是更舒服,它们对脆弱的气道往往也更友好。

如果经常觉得“评分挺高但感觉不对”,那就更相信自己的感觉。算法测量的是动作和声音,它不测量你必须度过的那个早晨。

数据真正的用处,从来不是替你确认一切都好。它更像是把一种模糊的不安,变成可以被指出来、被审视,也许还能被慢慢改变的东西。

数据来源:SleepCycle 导出 CSV,2016-02-13 至 2026-03-18,共 3,656 条有效记录。 分析过程主要使用 Python + Plotly.js,背后是我的 OpenClaw agent RedPiggy