# DeepGraph 第一轮交付 · 知识图谱预测骨关节炎候选基因

**提交方向**: 用知识图谱预测骨关节炎(OA)的候选基因
**目标档位**: 把实验真跑完,交数据、代码、日志 · **投稿目标**: 未填写(下文按"中文核心 / SCI 三四区"的审稿标准写;若你实际瞄准顶会,请告诉我们,第 2、3 节要换一套写法)
**交付时间**: 2026-08-11

---

## 0. 先说一个判断:这个方向 CPU 上完全做得动,但它现在最缺的不是新模型,是"结论稳不稳"的证据

命题和算力是匹配的——OA 候选基因排序本质是稀疏图上的传播/打分,45k 节点、225 万条边的公开图谱,在 2 核 CPU 上跑一次个性化 PageRank 只要 **0.15 秒**(我们已实测,见第 4 节)。不需要 GPU。

不匹配的是**另一件事**:这条线的论文已经很多,新做一个"我们的模型 AUC 比 TransE 高"很难过审。真正还开着的口子是稳健性——换个边权、换个负样本、换个截断,候选基因名单会不会换一半人。**本轮我们只做这件事,不替你判断哪个基因有生物学意义**,那是你的专业判断,不是我们的。

---

## 1. 领域现状:不是空白地带,是"方法多、可复现性少"

- **OA 专用的 KG 工作已经出现,且是最新的**。2026 年 npj Digital Medicine 发表的 *Knowledge-graph embeddings for osteoarthritis candidate prediction*(Wang 等)构建了 Osteoarthritis Knowledge-graph(OKG,由 DRKG 加近 200 万人 GWAS 的因果基因关联扩展而来),提出 CausalPathKG(RotatE 基础上加 GWAS 加权边、路径正则、多跳注意力、对抗负采样),并与 TransE / RotatE 比较。**这意味着"OA + KG 嵌入"这个题目已经被占了首发位**,你再投同类工作,审稿人会直接要求和它比。
- **通用底座已经标准化**。Hetionet(Himmelstein 等,eLife 2017,47,031 节点 / 2,250,197 条边 / 24 类关系)和它的 DWPC 度归一化路径打分,是这条线事实上的公开基线和数据源;DRKG 是另一个常用底座。审稿人默认你至少要跟"简单网络传播 / DWPC"这一档比,而不是只跟随机比。
- **当前公认的难点不在模型,在评测**。2025 年 PNAS 的 *Bias-aware training and evaluation of link prediction algorithms in network biology*(Yılmaz 等)直接指出:生物网络的链路预测基准被度偏置(preferential attachment)严重污染,**"只用节点度这一个特征的朴素模型就能打赢复杂模型"**;高度节点占 15% 却拿走约 70% 的评测影响力。arXiv 2409.04103(Cattaneo 等)则系统分析了生物医学 KG 的拓扑性质如何决定补全模型的实测精度。
- **具体到 OA 的数据量级要有心理准备**:我们已下载核查,Hetionet 里 `Disease::DOID:8398`(osteoarthritis)一共只有 **153 条边**,其中疾病–基因关联(DaG)**62 条**。这是你能拿到的全部"正样本"。**62 个正样本,决定了本方向的统计功率上限**——这一点第 3 节会展开。

---

## 2. 还开着的缺口(按可行性排序)

**缺口 A(推荐,本轮做):候选基因名单的设定敏感性,没人系统报过。**
现有 OA 相关工作都只报一套超参下的最终名单。但知识图谱打分里有至少四个自由度——边权方案、负样本采样方式、随机游走重启率、Top-K 截断——每一个都会改名单。**做成了就是一篇方法学/可重复性论文**:结论是"名单在 X 范围内稳定 / 在 Y 处崩掉",对中文核心和 SCI 三四区是扎实的正经工作,而且审稿人很难说"缺乏创新性"——因为它报的是别人没报的东西。还开着,是因为这活儿不出漂亮的 AUC 数字,没人愿意做。

**缺口 B:度偏置零模型对照,在 OA 上从没做过。**
PNAS 那篇的结论是通用生物网络层面的。**OA 这个具体疾病上,"只按基因在图里的连接数排序"能达到什么水平,没人报过**。如果零模型就能拿到接近的 AUROC,那此前所有 OA 候选基因排序结果的解释力都要打折。这个结论不中听,但可发、且有引用价值。工作量极小,本轮顺带做掉(它就是我们的对照臂)。

**缺口 C(不建议本轮碰):把 GWAS 效应量真正当边权融进去。**
npj 那篇已经做了,你再做是跟随。而且要拿 OA GWAS 汇总统计、做 MR/共定位,超出 60 分钟和本轮范围。

---

## 3. 评审会打你的三个点(提前堵)

1. **"62 个正样本,你的结论有统计意义吗?"**——这是最致命的一条,也是数据本身决定的。堵法:不用单次划分报点估计,一律用 62 折留一交叉验证 + 自助法置信区间,**把区间宽度老实报出来**。如果区间宽到跨越基线,就直说"当前样本量下区分不出",这比硬报一个 0.87 更过得去。
2. **"你怎么证明不是在预测'哪个基因被研究得多'?"**——PNAS 2025 之后,这个质疑会越来越常见。堵法:强制加一个只用节点度的零模型对照臂,并额外报**度匹配负样本**下的 AUPRC(即负样本和正样本的度分布对齐),把"popularity"这条捷径掐掉。
3. **"你的名单跟已有工作重合吗?为什么不比 CausalPathKG?"**——堵法:诚实说明你用的是 Hetionet(公开、可复现),对方用的是 DRKG+GWAS 的 OKG,两个图谱不同,直接比 AUC 不公平;改为报**名单重合度**这一可复现的比较口径。审稿人接受"不同底座不硬比",不接受"装作不知道有这篇"。

---

## 4. 我们这一轮真去跑的实验

**选的是缺口 A,并把缺口 B 当成对照臂。** 理由:它是唯一一个 60 分钟 CPU 内能得出可站住结论、且结论无论正负都有信息量的设计。

**可被推翻的预测**
我们预测两件事,任一被数据推翻都算这个预测挂了:
- (P1) 跨全部设定组合,Top-50 候选基因名单的**两两 Jaccard 相似度中位数 < 0.5**——即名单不稳,换一套合理超参就换掉一半基因。**若中位数 ≥ 0.5,P1 被推翻**(说明这条流程比我们以为的稳,这对你是好消息)。
- (P2) 纯度数零模型(完全不看 OA 的任何连接,只按基因在图里的度排序)的 **AUROC ≥ 0.70**,且其 Top-50 与完整流程 Top-50 的重合 ≥ 30%。**若零模型 AUROC 落在 0.5–0.6 且重合 < 30%,P2 被推翻**(说明 OA 特异信号确实主导)。

**主指标**

| 指标 | 口径 | 为什么要它 |
|---|---|---|
| `auroc` | 62 折留一,每折把 1 条已知 OA–基因边移出图,看它在全部约 2 万个基因中的排名 | 通用可比,审稿人一定要看 |
| `auprc_degmatched` | 同上,但负样本按节点度分层匹配采样 | 掐掉"预测热门基因"这条捷径,堵第 3 节第 2 点 |
| `recall_at_k` | k ∈ {20, 50, 100, 200} | 实际用名单的人只看前几十个 |
| `mrr` | 留一基因排名倒数的均值 | 对头部敏感,补 AUROC 的钝感 |
| `jaccard_top50` | 任意两套设定产出的 Top-50 名单的交并比,报中位数与分布 | **本轮的核心产出**,直接检验 P1 |
| `kendall_tau` | 两套设定全排序的秩相关 | 名单级之外再给一个连续版稳定性 |

**要扫的自变量(全组合,共 36 套设定 / 折)**
- 打分函数:`ppr`(个性化 PageRank)/ `dwpc`(度加权路径计数)/ `adamic_adar` / `degree_null`(**对照臂**)
- 边权方案:`unweighted` / `degree_normalized(w=0.4)` / `inverse_degree`
- 重启率 α:0.15 / 0.30 / 0.50
- 截断 K:20 / 50 / 100 / 200(排序后处理,不额外耗算力)
- 负样本采样:`uniform` / `degree_matched` / `other_disease_genes`(排序后处理)

**baseline 及其公平性**:`degree_null` 走**完全相同的折划分、相同的评测代码、相同的负样本**,唯一区别是它给基因的打分就是该基因在图中的度,不使用 OA 节点的任何信息。它拿到的任何分数,都是"不需要知识图谱推理也能拿到的分数"。这是本轮最重要的一根标尺。

**统计口径**:随机成分(负样本采样、自助重采样、并列名次打散)跑 seed ∈ {0,1,2},报均值 ± 标准差;所有臂在同一算力预算下对齐(每套设定的传播迭代次数固定 30 次)。**负结果照报**——若 P1/P2 被推翻,我们原样写进报告,不换指标凑结论。

**算力已实测,不是估算**:Hetionet 边表 12.4 MB(gzip),加载建稀疏矩阵 **2.1 秒**;单次 30 轮 PPR **0.15 秒**。62 折 × 36 设定 ≈ 2232 次传播 ≈ **6 分钟**,连同 I/O、DWPC 矩阵乘、三种子后处理与作图,总预算 45 分钟内有充分余量。

**这一轮做不到的部分,明确列出来**
- 不给生物学解释,不判断任何基因是否真的与 OA 相关,不做通路富集的机制叙事。
- 不融合 GWAS 汇总统计、不做孟德尔随机化/共定位。
- 不训练 KG 嵌入模型(TransE/RotatE/CausalPathKG)。62 条正样本训不出可信的嵌入,60 分钟 CPU 也不够;**硬跑出来的数字会误导你**,我们不做。
- 不与 npj 那篇的 OKG 做 AUC 对比(底座不同,不公平);只在报告里给名单重合度这一可复现口径。
- 只用 Hetionet 一个图谱;换 DRKG 复现属于下一轮。

---

## 5. 参考来源

- [Knowledge-graph embeddings for osteoarthritis candidate prediction — npj Digital Medicine (Wang Z, Lu Z, Li M, Zhao P, Zhang C)](https://www.nature.com/articles/s41746-025-02290-x) · [PubMed 41519968](https://pubmed.ncbi.nlm.nih.gov/41519968/)
- [Bias-aware training and evaluation of link prediction algorithms in network biology — PNAS 2025 (Yılmaz S, Yorgancioglu K, Koyutürk M), doi:10.1073/pnas.2416646122](https://pmc.ncbi.nlm.nih.gov/articles/PMC12184500/)
- [The Role of Graph Topology in the Performance of Biomedical Knowledge Graph Completion Models — arXiv:2409.04103 (Cattaneo A, Bonner S, Martynec T, et al.)](https://arxiv.org/abs/2409.04103)
- [Knowledge Graph Embeddings in the Biomedical Domain: Are They Useful? A Look at Link Prediction, Rule Learning, and Downstream Polypharmacy Tasks — arXiv:2305.19979](https://arxiv.org/abs/2305.19979)
- [Systematic integration of biomedical knowledge prioritizes drugs for repurposing — eLife 2017(Hetionet / DWPC 原始论文)](https://elifesciences.org/articles/26726)
- [Hetionet v1.0 数据仓库(CC0,节点 47,031 / 边 2,250,197)](https://github.com/hetio/hetionet)
- [PhenoLinker: Phenotype-Gene Link Prediction and Explanation using Heterogeneous GNNs — arXiv:2402.01809](https://arxiv.org/abs/2402.01809)

---

*本文档由 JouleBeat · DeepGraph 出具。文献结论来自公开检索,已标注出处;判断部分是我们的观点,可以被反驳。第 4 节的算力数字为本机实测,非估算。*

```json
{
  "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),不只存汇总"
  ]
}
```