{
 "task_slug": "oa-kg-gene-ranking-robustness",
 "question": "在公开生物医学知识图谱上做骨关节炎候选基因排序时,候选名单对边权方案、打分函数、重启率、截断阈值和负样本采样这五个设定的敏感程度有多大;以及一个完全不使用疾病特异信息的纯节点度零模型能达到什么水平",
 "falsifiable_prediction": "预测(P1)全部36套设定两两之间Top-50名单的Jaccard中位数<0.5,(P2)纯度数零模型AUROC>=0.70且其Top-50与完整流程Top-50重合>=30%。若Jaccard中位数>=0.5则P1被推翻;若零模型AUROC落在0.5-0.6且重合<30%则P2被推翻。两条各自独立判定,负结果照报。",
 "dataset": "Hetionet v1.0(CC0)。边:https://github.com/hetio/hetionet/raw/main/hetnet/tsv/hetionet-v1.0-edges.sif.gz (12.4MB gzip, 2250197条边);节点:https://raw.githubusercontent.com/hetio/hetionet/main/hetnet/tsv/hetionet-v1.0-nodes.tsv (2.5MB, 47031节点)。目标疾病节点 Disease::DOID:8398 (osteoarthritis),共153条边,其中DaG(疾病-关联-基因)62条,作为62折留一的正样本;候选池为图中全部Gene类型节点。已实测:加载并建scipy稀疏矩阵2.1秒,单次30轮PPR 0.15秒(/usr/bin/python3.12,scipy 1.18.0)。注意:~/venv 与 ek-venv 均无scipy,必须用 /usr/bin/python3.12。",
 "arms": [
  {
   "name": "baseline-degree-null",
   "is_baseline": true,
   "what": "完全忽略OA节点,直接用每个Gene节点在全图中的度作为分数排序。走与实验臂完全相同的62折留一划分、相同负样本、相同评测代码。这是'不做任何知识图谱推理也能拿到的分数'的标尺。"
  },
  {
   "name": "baseline-random-permutation",
   "is_baseline": true,
   "what": "把基因分数随机置换后排序(每seed一次),给出评测流水线的下限刻度,确认评测代码本身不引入信号。"
  },
  {
   "name": "scorer-ppr",
   "is_baseline": false,
   "what": "以OA节点为唯一重启源的个性化PageRank,行归一化转移矩阵,固定30轮幂迭代,取Gene节点上的稳态概率排序。"
  },
  {
   "name": "scorer-dwpc",
   "is_baseline": false,
   "what": "Hetionet原生的度加权路径计数(degree-weighted path count),沿DaG/GiG/GpBP等元路径,度按w次幂惩罚。"
  },
  {
   "name": "scorer-adamic-adar",
   "is_baseline": false,
   "what": "OA节点与各Gene节点之间的Adamic-Adar共邻指标(在同质化后的无向图上计算)。"
  }
 ],
 "metrics": [
  {
   "name": "auroc",
   "higher_is_better": true,
   "what": "62折留一:每折移除1条OA-Gene边后重新打分,held-out基因在全部Gene候选中的排名换算成的ROC曲线下面积"
  },
  {
   "name": "auprc_degmatched",
   "higher_is_better": true,
   "what": "同auroc的折划分,但负样本按节点度分层匹配采样后计算的PR曲线下面积"
  },
  {
   "name": "recall_at_k",
   "higher_is_better": true,
   "what": "held-out基因落入Top-K的比例,K取20/50/100/200"
  },
  {
   "name": "mrr",
   "higher_is_better": true,
   "what": "62折中held-out基因排名倒数的均值"
  },
  {
   "name": "jaccard_top50",
   "higher_is_better": true,
   "what": "任意两套设定在全量数据上产出的Top-50基因名单的交并比;本轮核心产出,报全部设定对的中位数与整个分布(不是越高越好的优化目标,是稳健性的读数)"
  },
  {
   "name": "kendall_tau",
   "higher_is_better": true,
   "what": "任意两套设定在全部Gene候选上的完整排序的Kendall秩相关"
  },
  {
   "name": "overlap_with_degree_null_top50",
   "higher_is_better": false,
   "what": "每套设定的Top-50与degree-null臂Top-50的重合基因数,用于判定P2"
  }
 ],
 "sweep": {
  "scorer": [
   "ppr",
   "dwpc",
   "adamic_adar",
   "degree_null"
  ],
  "edge_weight": [
   "unweighted",
   "degree_normalized_w0.4",
   "inverse_degree"
  ],
  "restart_alpha": [
   "0.15",
   "0.30",
   "0.50"
  ],
  "top_k": [
   "20",
   "50",
   "100",
   "200"
  ],
  "negative_sampling": [
   "uniform",
   "degree_matched",
   "other_disease_genes"
  ]
 },
 "seeds": [
  0,
  1,
  2
 ],
 "budget_minutes": 45,
 "cpu_feasible": true,
 "out_of_scope": [
  "不给任何生物学解释,不判断哪个候选基因真的与骨关节炎相关",
  "不训练KG嵌入模型(TransE/RotatE/CausalPathKG):62条正样本训不出可信嵌入,且60分钟CPU不够",
  "不融合GWAS汇总统计,不做孟德尔随机化或共定位",
  "不与npj Digital Medicine那篇的OKG图谱做AUC直接对比(底座不同不公平),只报名单重合度",
  "不做通路富集与机制叙事",
  "只用Hetionet一个图谱,不换DRKG复现",
  "不跑第二个题目(痛风的心血管并发症候选基因)"
 ],
 "implementation_notes": [
  "稀疏邻接矩阵只建一次;62折留一时对被移除的那条边做原地置零+还原,不要每折重建矩阵(重建要2.1秒/次,62*36次会爆预算)",
  "PPR固定30轮幂迭代以对齐各臂算力预算,不用收敛判据",
  "seed只影响负样本采样、自助重采样和并列名次打散;PPR/DWPC/AA本身是确定性的,不要为它们重复跑3遍",
  "所有per-fold per-config的原始分数写入可回查日志(jsonl),不只存汇总"
 ]
}