Cerella 是 Optibrium 的 AI 决策辅助平台,针对药物项目数据的一个典型特征:极度稀疏。一个项目做了几百个分子,但每个分子只测了部分性质——有的测了活性没测溶解度,有的测了 ADMET 没测选择性。传统建模需要完整数据,而真实项目数据表上到处是空格。
核心思路:把稀疏矩阵补全
Cerella 的做法借鉴了推荐系统中的协同过滤与深度填补:不同性质之间存在相关性(如 logP 与溶解度、与通透性),已测的性质可以帮助推断未测的性质。同时,相似分子之间也可以互相借力。
| 传统建模 | 缺失数据填补 |
|---|---|
| 每个性质单独建一个模型 | 所有性质联合建模,共享信息 |
| 需要该性质有足够训练数据 | 数据少的性质可从相关性质借力 |
| 丢弃有缺失的样本 | 利用全部已测数据 |
| 输出点预测 | 输出预测 + 不确定性 |
主动学习:决定「下一个该测什么」
这是它更有价值的部分。实验资源有限时,不是所有测量的信息价值都一样:
- 测一个模型已经很确定的分子,几乎学不到新东西;
- 测一个模型高度不确定、且对决策影响大的分子,信息价值最高;
- 主动学习就是形式化地量化这个价值,给出「下一批该测哪些分子的哪些性质」的建议。
实际收益是减少无效实验。在 DMTA 闭环中,每一轮实验的周期是数周,能把轮数从 6 轮压到 4 轮,就是几个月的项目时间。
用开源实现的思路
import numpy as np
from sklearn.ensemble import RandomForestRegressor
# 1) 多任务模型处理稀疏标签(Chemprop 原生支持缺失值)
# chemprop train --data-path multi_task.csv --task-type regression
# 缺失值留空,模型只在有标签处回传梯度
# 2) 用集成方差做不确定性估计
def uncertainty_from_ensemble(models, X):
preds = np.stack([m.predict(X) for m in models])
return preds.mean(axis=0), preds.std(axis=0)
# 3) 主动学习采集函数:优先测「不确定性高 + 预测值接近决策边界」的分子
def acquisition(mean, std, threshold, beta=1.0):
"""结合不确定性与决策相关性"""
dist_to_boundary = np.abs(mean - threshold)
return std * beta - dist_to_boundary * 0.5 # 越大越该测
mean, std = uncertainty_from_ensemble(models, X_candidates)
scores = acquisition(mean, std, threshold=6.5) # 如 pIC50 > 6.5 为达标
next_batch = np.argsort(scores)[-24:] # 下一轮测这 24 个
适用前提
- 性质之间确实相关:如果各性质完全独立,联合建模没有增益。ADMET 性质之间通常有相关性,这个前提大体成立。
- 数据量要过最低门槛:几十个分子的项目,任何模型都学不到可靠规律。通常需要至少一两百个分子、多轮迭代后才有意义。
- 数据质量一致:不同批次、不同实验条件的数据混在一起,模型学到的可能是批次效应。
- 决策标准要明确:主动学习需要知道「什么算达标」才能算信息价值。
常见误区
- 把填补值当实测值。这是最危险的错误。填补的是预测,带有不确定性。用它做排序和优先级可以,写进报告当数据、或作为决策的唯一依据不行。
- 忽略「缺失非随机」:数据缺失往往不是随机的——化学家可能只对看起来有希望的分子做了完整测试。这种选择性缺失会让填补模型产生系统性偏差。
- 只看预测不看不确定性:填补值的可靠性差异很大,必须一并看不确定性。
- 期待它替代实验设计判断:主动学习给出的是统计上的信息价值,不考虑合成难度、化学直觉、项目策略。它应该作为化学家决策的输入,而非替代。
提示
商业平台功能与定价变动较快,本文为方向性介绍,采购前请核对官方最新信息。缺失数据填补与主动学习的思路本身值得引入任何 DMTA 流程,用开源工具即可实现基础版本。
延伸资源
- 配套平台:282《Optibrium StarDrop》;多任务建模:174《Chemprop》;
- DMTA 闭环与决策见「实战流程」模块。