{
 "_note": "跑之前写死。压缩流程：保留跑前预测与零模型，敌意复核压到 2 项核心，不做独立复算。",
 "written_before_analysis_at": "2026-08-27T06:10:00Z",
 "round_nature": "baseline",
 "question": "单细胞数据上，按细胞随机划分训练/测试，会不会因为同一患者的细胞同时出现在两侧而系统性高估细胞状态分类器的跨患者泛化性能？高估多少？",
 "prediction": {
  "H1": "细胞随机划分的测试性能显著高于患者分组划分（同一分类器、同一算力预算）",
  "H2": "这个差距远大于零模型（标签打乱）所能解释的范围，即它是真实的泄漏效应而非评估噪声",
  "rationale": "同一患者的细胞共享个体特异的表达背景（批次、遗传背景、肿瘤微环境）。随机划分让模型在训练集里见过测试细胞的同患者近邻，等于间接见过答案。若 H1 被推翻，说明该数据集上细胞状态信号强到个体背景无关紧要，提交人原来的担心不成立——同样是有用的结论。"
 },
 "decision_rule": {
  "task": "用表达谱预测非恶性细胞的类型（T/B/巨噬/内皮/成纤维/NK）",
  "split_A": "细胞级随机划分，5 折",
  "split_B": "患者分组划分（GroupKFold，同一患者的细胞不跨训练/测试），5 折",
  "budget": "同一分类器、同一特征数、同一超参，两种划分算力预算相同",
  "metric": "macro-F1 与准确率",
  "null": "把细胞类型标签随机打乱 200 次，在两种划分下各跑一遍，得到无信号时的性能分布",
  "H1_refuted_if": "随机划分与患者划分的 macro-F1 差 <= 0，或差值落在零模型差值分布的 95 分位以内"
 },
 "arms": [
  {
   "name": "random_cell_split",
   "is_baseline": false,
   "what": "细胞级随机 5 折 —— 常见但可能泄漏的做法",
   "data_space": "GSE72056 非恶性细胞 × 方差最大 2000 基因（列标准化后）",
   "truth_source": "Tirosh et al. 随数据集发布的每细胞类型标注（1=T 2=B 3=Macro 4=Endo 5=CAF 6=NK）"
  },
  {
   "name": "patient_grouped_split",
   "is_baseline": true,
   "what": "患者分组 5 折 —— 无泄漏的正确基线",
   "data_space": "GSE72056 非恶性细胞 × 方差最大 2000 基因（列标准化后）",
   "truth_source": "Tirosh et al. 随数据集发布的每细胞类型标注（1=T 2=B 3=Macro 4=Endo 5=CAF 6=NK）"
  },
  {
   "name": "shuffled_label_null",
   "is_baseline": false,
   "what": "标签打乱 200 次的零模型 —— 没有它，无法判断差值是否只是评估噪声",
   "data_space": "GSE72056 非恶性细胞 × 方差最大 2000 基因（列标准化后）",
   "truth_source": "Tirosh et al. 随数据集发布的每细胞类型标注（1=T 2=B 3=Macro 4=Endo 5=CAF 6=NK）"
  }
 ],
 "out_of_scope": [
  "跨队列验证（提交方向的第二个队列，属下一轮）",
  "留一患者验证与留一队列验证（选项二/三）",
  "恶性细胞的状态分类",
  "批次校正方法的比较"
 ],
 "headline": [
  {
   "metric": "患者分组划分的 macro-F1（无泄漏基线）",
   "value": 0.9306070216666553,
   "source": "work/results.json",
   "computed_by": "work/experiment.py",
   "recheck": {
    "by": "audit_delivery.py 取 work/check2_difficulty.json 同配置格点（由 check2.py 独立跑出）",
    "value": 0.9306070216666553
   }
  },
  {
   "metric": "细胞随机划分的 macro-F1（常见做法）",
   "value": 0.9543405986088149,
   "source": "work/results.json",
   "computed_by": "work/experiment.py",
   "recheck": {
    "by": "audit_delivery.py 取 work/check2_difficulty.json 同配置格点（由 check2.py 独立跑出）",
    "value": 0.9543405986088149
   }
  },
  {
   "metric": "随机划分高估的 macro-F1 点数",
   "value": 0.023733576942159607,
   "source": "work/results.json",
   "computed_by": "work/experiment.py",
   "recheck": {
    "by": "audit_delivery.py 取 work/check1_instrument.json 的主实验复现值（由 check1.py 独立跑出）",
    "value": 0.023733576942159607
   }
  },
  {
   "metric": "换成假患者后残余的高估（应≈0）",
   "value": 0.003227461013741569,
   "source": "work/check1_instrument.json",
   "computed_by": "work/check1.py",
   "recheck": {
    "by": "audit_delivery.py 从三次原始差值重算均值",
    "value": 0.003227461013741569
   }
  },
  {
   "metric": "最难格点上的高估（50 基因 / 每类 15 细胞）",
   "value": 0.06943564003916958,
   "source": "work/check2_difficulty.json",
   "computed_by": "work/check2.py",
   "recheck": {
    "by": "audit_delivery.py 从该格点的两个 F1 相减重算",
    "value": 0.06943564003916958
   }
  },
  {
   "metric": "零模型经验 p 值",
   "value": 0.025,
   "source": "work/results.json",
   "computed_by": "work/experiment.py（200 次标签置换）",
   "recheck": {
    "by": "audit_delivery.py 从 null_distribution 数组与观测差值重数",
    "value": 0.025
   }
  }
 ],
 "audit_command": [
  "/usr/bin/python3",
  "audit_delivery.py"
 ],
 "result": {
  "H1_passes": true,
  "H2_passes": true,
  "instrument_valid": true,
  "gap_grows_with_difficulty": true
 }
}