随附材料 · 运行日志

logs/run.log

[data] 非恶性细胞 2840|患者 19 位|类型 {'T': 2040, 'B': 512, 'Macro': 119, 'Endo': 62, 'CAF': 56, 'NK': 51}
[data] 取方差最大的 2000 个基因|载入耗时 12s

[A] 细胞随机划分  准确率 0.9912  macro-F1 0.9543
[B] 患者分组划分  准确率 0.9884  macro-F1 0.9306
[差] 随机划分高估 准确率 +0.0028  macro-F1 +0.0237(相对高估 2.6%)|单次拟合 2.4s
[零模型] 预算 2400s × 3 并发 → 置换 200 次
[Parallel(n_jobs=3)]: Using backend LokyBackend with 3 concurrent workers.
[Parallel(n_jobs=3)]: Done  44 tasks      | elapsed:  1.1min
[Parallel(n_jobs=3)]: Done 194 tasks      | elapsed:  4.8min
[Parallel(n_jobs=3)]: Done 200 out of 200 | elapsed:  4.9min finished

[零模型] 标签打乱 200 次的 F1 差:均值 +0.0010|95分位 +0.0204|最大 +0.0384
[H1] 随机划分高于患者划分 → 成立
[H2] 差距超出零模型 95 分位 → 成立(经验 p=0.0250)
[done] 总耗时 332s

logs/check1.log

[主实验复现] 差 = +0.0237
[a 假患者] 差 = +0.0032(3 次 ['+0.0033', '-0.0031', '+0.0095']) → 应≈0,实际塌了 ✅
[b 注入患者偏移] 差 = +0.0265 → 应明显变大,实际变大 ✅
[c 折几何匹配] 差 = +0.0282 → 与主实验同号同量级即说明不是折几何造成的

[结论] 尺子有效 = True

logs/check2.log

[Parallel(n_jobs=3)]: Using backend LokyBackend with 3 concurrent workers.
[Parallel(n_jobs=3)]: Done   6 out of   6 | elapsed:  1.2min finished

   基因数       每类训练细胞      患者划分F1      随机划分F1      绝对高估      相对高估
   200           全部      0.9308      0.9546   +0.0238      2.6%
  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.931 变难到 0.726 时,高估幅度 +0.0238 → +0.0694(随难度放大 ✅ 2.6% 只是易任务下界)
← 回到案例正文