判定:正结果(两条预注册预测都成立)
数据源与对照规模:GEO GSE72056,2840 个非恶性细胞 / 19 位患者 / 6 类细胞状态;两种划分各 5 折,200 次标签置换零模型,纯 CPU 约 12 分钟
主要结论:细胞随机划分 macro-F1 0.9543,患者分组划分 0.9306,差 +0.0237(相对高估 2.6%);200 次标签置换里两种划分之差的均值 +0.0010、95 分位 +0.0204,观测值落在分布之外,经验 p = 0.025。更要紧的是第二件事:这个任务太容易(患者分组划分下准确率已经 98.8%),把任务逐级调难之后,同一份数据上的高估从 2.6% 涨到 9.6%。所以 2.6% 只能当成易任务上的下界。
这些结果不支持:只有一个队列,跨队列泄漏(批次、平台、建库协议)本轮一个字都没说。2.6% 不能外推到别的数据集。类别极不平衡(T 细胞 2040 个、NK 只有 51 个),macro-F1 等权会放大稀有类抖动。只跑了逻辑回归一个分类器。细胞类型标签用的是原作者注释,不是独立验证过的真值。19 位患者,GroupKFold 每折只留 3–4 位做测试,折间方差不小。难度扫描的 6 个格点里有一格不单调,只能说方向对、两端差 3 倍,不能说它单调。
代码 / 原始结果 / 日志:主实验、两项核心复核(假患者对照 / 注入患者特异偏移 / 折大小照搬的随机划分,以及难度扫描)、results.json 与三份运行日志全部随附。
提交方向:在两个独立公开单细胞队列上,检验按细胞随机划分是否因患者身份泄漏而系统性高估 跨患者与跨队列泛化性能(提交人选定选项一:先做单队列的划分方式对比) 交付时间:2026-08-27 这一轮真跑了:GEO GSE72056 黑色素瘤单细胞,2840 个非恶性细胞、19 位患者、6 类细胞状态; 细胞随机划分 vs 患者分组划分,同分类器、同超参、同算力;200 次标签置换零模型; 两项核心复核。纯 CPU,总墙钟约 12 分钟。
泄漏是真的,但在这个数据集上只值 2.4 个 macro-F1 点(相对高估 2.6%)。 而这个数字是下界,不是普适值 —— 任务越难,高估越大。
| 划分方式 | 准确率 | macro-F1 |
|---|---|---|
| A 细胞随机划分(常见做法) | 0.9912 | 0.9543 |
| B 患者分组划分(无泄漏基线) | 0.9884 | 0.9306 |
| 差 | +0.0028 | +0.0237 |
200 次标签置换的零模型里,两种划分之差的均值是 +0.0010、95 分位是 +0.0204。 观测到的 +0.0237 落在分布之外,经验 p = 0.025。 所以跑之前写下的两条预测都成立:随机划分确实高的(H1),而且高出的部分超出评估噪声(H2)。
但更值得你注意的是第二件事。 这个任务太容易了 —— 患者分组划分下准确率已经 98.8%, 离天花板只剩 1.2 个点,泄漏再大也没地方涨。我们把任务逐级调难之后:
| 基因数 | 每类训练细胞 | 患者划分 F1 | 随机划分 F1 | 绝对高估 | 相对高估 |
|---|---|---|---|---|---|
| 2000 | 全部 | 0.9306 | 0.9543 | +0.0237 | 2.6% |
| 2000 | 40 | 0.9103 | 0.9361 | +0.0258 | 2.8% |
| 2000 | 15 | 0.8559 | 0.8878 | +0.0319 | 3.7% |
| 200 | 15 | 0.8165 | 0.8364 | +0.0200 | 2.4% |
| 50 | 15 | 0.7265 | 0.7959 | +0.0694 | 9.6% |
任务从 F1 0.93 变难到 0.73,高估幅度涨了近 3 倍。 所以「2.6%」只能当成易任务上的下界,不能拿去当你自己数据上的预期值。 如果做的是细分亚群、稀有状态、或者跨条件迁移这类本来就不好分的任务, 泄漏能吃掉的比 2.6% 多得多。
这里有一条不单调:200 基因 / 每类 15 细胞那一格是 +0.0200,比它上面一格还低。 6 个格点不足以拟合"难度—高估"的函数形状,我们只能说方向是对的、两端差了 3 倍, 不能说它单调。
claims.json)两条都没被推翻。

只做了两项,都是能直接掀翻结论的那种。
复核一:这把尺子测的到底是不是"患者身份"。
| 对照 | 差 | 该出现什么 | 实际 |
|---|---|---|---|
| 主实验 | +0.0237 | —— | —— |
| a 假患者(把患者标签打乱重贴) | +0.0032 | 分组划分退化成随机划分,差应塌到 ≈0 | ✅ 塌了(三次 +0.0033 / −0.0031 / +0.0095,跨过 0) |
| b 注入患者特异偏移 | +0.0265 | 人为放大患者效应,差应变大 | ✅ 变大了 |
| c 折大小照搬患者折的随机划分 | +0.0282 | 排除"两种划分折几何不同"这个混杂 | ✅ 同号同量级 |
a 是最强的一条:同一批数据、同一套代码,只把患者身份换成随机的,2.4 个点的差就没了。 b 只涨了 0.003,方向对但幅度弱 —— 我们注入的偏移相对已标准化的特征来说不算强, 这条只能算旁证,不能单独当证据。
复核二:2.6% 是不是被天花板压住了。 就是第 0 节那张难度扫描表,结论已在上面。
按顺序,从最要紧的开始:
如果只带走一条:在单细胞上报跨患者泛化性能,必须用患者分组划分, 而且要把"这个任务有多容易"一起报出来 —— 因为同一份数据上,泄漏的代价从 2.6% 到 9.6% 不等, 差别就在任务难度。只报一个数字,读者没法判断它是天花板附近的假象还是真的稳。