TDC 除了数据集本身,还提供了一套任务与评测方法的导航。它的实用价值在于:当你有一个具体问题时,能快速找到「有没有现成的数据集、别人做到什么水平、该用什么指标」。
按需求查找的路径
# 【场景一】:我要做某个 ADMET 性质的预测
#
# 1) 查有没有对应的数据集
from tdc.utils import retrieve_dataset_names
print(retrieve_dataset_names("ADME"))
print(retrieve_dataset_names("Tox"))
# 2) 看该任务的排行榜,了解合理的性能范围
# → 【这是最有价值的信息】:
# 知道 SOTA 在哪,就知道自己的模型是否正常
# 3) 用 Benchmark Group 跑一遍标准评测
# → 确认自己的流程没问题
# 【场景二】:我要做 DTI 预测
#
# 1) 选数据集:BindingDB、DAVIS、KIBA
# 2) 【关键:用 cold_split】(见 133)
# 3) 【必做平凡基线对照】(见 157)
# 【场景三】:我要做分子生成
#
# 1) tdc.generation 模块
# 2) 但生成任务的评测建议用 GuacaMol/MOSES(见 135、136)
# 3) TDC 的 oracle 功能提供了打分函数
from tdc import Oracle
oracle = Oracle(name="QED")
print(oracle(["CCO", "c1ccccc1"]))
# 可用的 oracle 包括:
# QED、SA、LogP、DRD2、GSK3B、JNK3、
# 以及多个多目标组合
# → 【这些是分子优化任务的标准打分函数】
# 【场景四】:我想知道某类任务有哪些方法
# → 看该任务排行榜上的提交,
# 顺着找对应的论文与代码
TDC 的核心模块
| 模块 | 内容 | 典型用途 |
|---|---|---|
single_pred |
ADME、Tox、HTS、QM、Yields | 性质预测 |
multi_pred |
DTI、DDI、PPI、GDA、Catalyst | 关系预测 |
generation |
MolGen、RetroSyn、Reaction | 生成任务 |
Oracle |
标准打分函数 | 分子优化 |
benchmark_group |
标准化评测组 | 规范比较 |
chem_utils |
分子处理工具 | 数据清洗 |
evaluator |
各类评价指标 | 评测 |
数据处理工具
# TDC 内置了一些实用的数据处理功能
from tdc.single_pred import ADME
data = ADME(name="Caco2_Wang")
# 查看标签分布
data.label_distribution()
# 二值化(回归 → 分类)
data.binarize(threshold=-5.0, order="ascending")
# 转换标签尺度
data.convert_to_log()
# 获取数据统计
print(data.get_data().describe())
# ---- DTI 特有的处理 ----
from tdc.multi_pred import DTI
dti = DTI(name="BindingDB_Kd")
# 【处理重复测量】—— 同一药物-靶点对多次测定
dti.harmonize_affinities(mode="max_affinity") # 或 "mean"
# 【转对数尺度】—— 必做
dti.convert_to_log(form="binding")
# 【按阈值筛选靶点/药物】
dti.get_split(method="cold_split", column_name="Drug")
# ---- 分子处理工具 ----
from tdc.chem_utils import MolConvert
converter = MolConvert(src="SMILES", dst="Graph2D")
# 支持 SMILES → SELFIES、Graph、PyG、DGL 等
# 【这些工具的价值】:
# 省去自己写数据处理的时间,
# 且处理方式与公开基准一致 → 结果可比
排行榜的正确用法
- 作为性能范围的参考:这是排行榜最有价值的用法。知道某类任务的 SOTA 在什么水平,就能判断自己的结果是否合理;
- 用作自检:如果你在自家数据上的指标远好于 TDC 排行榜的最好成绩,先怀疑自己的评测有泄漏;
- 顺藤摸瓜找方法:排行榜上的提交通常有论文与代码链接;
- 不要用作方法优劣的判据:
- 排行榜有过拟合的动机(见 169《Benchmark 陷阱》);
- 名次差异可能在噪声范围内;
- 在 TDC 上好不代表在你的化学空间上好。
- 关注方差而非只看均值:TDC 的评测报告标准差——如果前几名的差距小于标准差,名次没有意义。
与其它资源的配合
| 需求 | 资源 |
|---|---|
| 标准任务与评测 | TDC |
| 原始活性数据 | ChEMBL(见 226《ChEMBL》)、PubChem |
| 结构数据 | PDB、AlphaFold DB |
| 靶点证据 | Open Targets(见 154《AI 靶点发现模型》) |
| 基因依赖性 | DepMap |
| 虚拟筛选基准 | DUD-E、LIT-PCBA(见 241《DUD-E》、242《LIT-PCBA》) |
| 生成模型评测 | GuacaMol、MOSES(见 135《GuacaMol 论文精读》、136《MOSES 论文精读》) |
| 数据质量导向的基准 | Polaris |
一个务实的使用建议
# 【把 TDC 当作「参照系」而非「目标」】
#
# 正确的用法:
# 1) 用 TDC 确认自己的流程正常
# 在标准任务上达到接近 SOTA 的水平
#
# 2) 用 TDC 了解某类任务的难度
# 如果 SOTA 的 AUC 只有 0.75,
# 说明这个任务本身就难
# → 不要期望在自家数据上做到 0.95
#
# 3) 用 TDC 的划分方式与评测规范
# 即使用自己的数据,也照这个规范做
#
# 【错误的用法】:
# 把提升 TDC 排行榜名次当作目标
# → 与实际项目价值脱节
#
# 【最重要的一步】:
# 最终必须在【自己的数据】上验证
# 用时间划分,模拟真实部署
# → TDC 上的表现与你的项目可能毫无关系
关键要点
- 排行榜最有价值的用法是了解某类任务的合理性能范围,而非追名次;
- 自家指标远好于 TDC 最好成绩 → 先怀疑评测有泄漏;
- Oracle 模块提供了分子优化任务的标准打分函数,可直接用;
- 把 TDC 当参照系而非目标——最终必须在自己的数据上用时间划分验证。
延伸资源
- TDC 教程:005《Therapeutics Data Commons 教程》;TDC 论文精读:133《TDC 论文精读》;实战:335《用 TDC Benchmark 评估模型》;
- Benchmark 陷阱:169《Benchmark 陷阱》;Papers with Code 导航:026《Papers with Code 分子性质预测导航》~028《Papers with Code 药物发现任务导航》。