Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
药物研发宝典:历史药物漏斗分析与价值挖掘
drug
drug
yufeng
发布于 2023-08-06
推荐镜像 :Basic Image:ubuntu20.04-py3.10
推荐机型 :c2_m4_cpu
赞 1
药物研发宝典:历史药物漏斗分析与价值挖掘
0:当药物研发遇上漏斗分析
1:漏斗是什么
2:漏斗分析怎么做
3:漏斗分析驱动数据和模型的飞轮
4:机会与挑战
附录

药物研发宝典:历史药物漏斗分析与价值挖掘

©️ Copyright 2023 @ Authors
作者: 余峰 📨
日期:2023-07-10
共享协议:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
快速开始:点击上方的 开始连接 按钮,选择 registry.dp.tech/dptech/ubuntu:20.04-py3.10镜像CPU:c8_m16_cpu 或更高配置机型即可开始。

代码
文本

funnel_drug.pngOpen In Bohrium

代码
文本
[ ]
# 安装所需的依赖
!pip install pandas
!pip install matplotlib
from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt
代码
文本

0:当药物研发遇上漏斗分析

代码
文本

🎖️药物或材料研发系统,可以借助计算手段,从海量的分子空间中筛选出最合适的K个分子。

筛选海量的分子空间,需要巨量的计算,为了平衡系统的效果和效率,可以将计算过程拆解成多个阶段,每个阶段像漏斗一样过滤和筛选。

这与工业推荐系统,如淘宝的商品推荐系统、字节的短视频推荐系统,在很多方面都有相似之处,本质上也是从海量物品空间中筛选出最合适的K个物品。

他山之石可以攻玉,可以借鉴工业推荐系统的成熟经验,来不断迭代和完善药物或材料等研发系统。

成熟的工业推荐系统往往不是一蹴而就的,是在数据和模型的飞轮中不断地迭代优化,如何指导优化的方向呢?

除了在线AB test,离线的漏斗分析也是一个简单而强大的工具,能够清晰地展现系统各阶段的效率和瓶颈,指导做出ROI最大的改进。

本文以计算药物研发为例,尝试讨论如何使用漏斗分析,来评价和改进药物研发各阶段的效率。

🎖️通过漏斗分析对历史上研发成功或失败的药物进行重新发现和复盘分析,旨在优化药物研发流程并挖掘药物研发过程中的隐藏价值,为未来药物研发提供更加高效率、低风险的解决方案。

🎖️在数据-模型闭环基础上,可以进一步构建数据-模型-产品-用户的飞轮循环,以实现药物研发领域的快速发展。

以下将围绕漏斗分析的几个问题来展开:是什么,怎么做,为什么,机会与挑战。

代码
文本

1:漏斗是什么

代码
文本

以成熟的商品推荐系统为例,介绍成熟的商品推荐系统中的漏斗分析,以及与计算药物研发系统的相似之处。

🔖为了平衡系统的效果和效率,往往需要将推荐系统拆解成多个阶段,每个阶段像漏斗一样过滤和筛选,输入十亿级的物品,最终输出最合适的K个物品,如下图所示:

代码
文本
[2]
fig = plt.figure(figsize=(12,10))
colors = ["#a9d18e", "#ffc000", "#ed7d31", "#5b9bd5", "#4472c4"]
plt.fill_betweenx(y=[1, 3.8], x1=[10,12], x2=[8,6], color=colors[0]);
plt.fill_betweenx(y=[4, 6.8], x1=[12,14], x2=[6,4], color=colors[1]);
plt.fill_betweenx(y=[7, 9.8], x1=[14,16], x2=[4,2], color=colors[2]);
plt.fill_betweenx(y=[10, 12.8], x1=[16,18], x2=[2,0], color=colors[3]);
plt.fill_betweenx(y=[13, 15.8], x1=[18,20], x2=[0,-2], color=colors[4]);
pass_counts = ['10e10', '10e5', '10e4', '10e3', '10e2']
stages = ['Recall', 'RoughRanking', 'FineRanking', 'Repermutation', 'Impression']
plt.xticks([],[]);
plt.yticks([2,5,8,11,14], stages[::-1]);

for y, value in zip([2,5,8,11,14], pass_counts[::-1]):
plt.text(9, y, value, fontsize=16, fontweight="bold", color="white", ha="center");

plt.ylabel("Stages");

plt.title("Funnel Efficiency in Recommender System", loc="center", fontsize=25, fontweight="bold")
Text(0.5, 1.0, 'Funnel Efficiency in Recommender System')
代码
文本

🔖这个漏斗的含义是,商品池的商品数量有10e10,经过召回,粗排,精排,重排各阶段过滤和筛选后,还分别剩余的数量为10e5,10e4,10e3,10e2。

商品推荐系统的几个阶段可以跟计算药物研发系统的几个阶段,粗略地对应:

Stage Recommender System Computational Drug Development
1 Recall VirtualScreening
2 RoughRanking ADMET
3 FineRanking FEP
4 Repermutation ActivityCliff
5 Impression Experiment
代码
文本

🎖️现在让我们详细了解一下每个阶段,并探讨如何将这些阶段应用到药物研发系统中。

  1. 召回阶段:在推荐系统中,召回阶段是从海量商品中筛选出用户可能感兴趣的候选商品。在药物研发系统中,这个阶段可以类比为从化合物库中筛选出具有治疗潜力的候选化合物。我们可以利用已知的药物靶点信息、化学结构相似性等进行初步筛选,以缩小研究范围。

  2. 粗排阶段:在推荐系统中,粗排阶段是对召回阶段筛选出的候选商品进行初步排序,以便后续的精排。在药物研发系统中,这个阶段对应于对筛选出的候选化合物进行初步的活性和安全性评估。可以通过一些简单的模型(如QSAR模型、ADMET性质预测)进行评估,筛选出具有较高潜在治疗价值的化合物。

  3. 精排阶段:在推荐系统中,精排阶段是对粗排后的候选商品进行更细致的排序,以便为用户提供最合适的推荐结果。在药物研发系统中,这个阶段对应于对筛选出的候选化合物进行更详细的研究,如FEP计算。通过这些方法,我们可以进一步评估候选化合物的优劣,为最终的药物筛选提供依据。

  4. 重排阶段:商品属性的细微变化,比如商品的价格和颜色等差异,可能都会影响用户的兴趣,我们对session内商品进行重排序,以帕累托最优的方式来满足用户的需求。在药物研发系统中,药物的亲和力以及ADMET等多种性质面临权衡取舍,我们也需要对组成药物的fragment进行排列组合,以达到以帕累托最优的药物性质和潜力。

  5. 展示阶段:在推荐系统中,展示阶段是用户最终决定购买商品的阶段。在药物研发系统中,这个阶段对应于从筛选出的候选化合物中选择最有潜力的药物进行进一步的实验研究和临床试验。这一阶段的结果将直接影响药物的研发成功与否。

代码
文本

2:漏斗分析怎么做

代码
文本

📖漏斗

顾名思义,过滤掉阴性分子,筛选出阳性分子,漏斗效率 = 已知阳性分子的通过率。

我们假设已经有了一个包含虚拟筛选、ADMET性质预测、FEP计算、活性悬崖预测和实验验证五个阶段结果的数据集。

数据集中1或0代表,已经成功研制的药物分子,如FDA批准的药物分子,能否被各阶段的计算方法筛选出来。

代码
文本
[3]
from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt

# 读取药物研发数据集
drug_discovery_data = StringIO("""Compound_ID,VirtualScreening,ADMET,FEP,ActivityCliff,Experiment
a,1,1,1,1,1
b,1,1,1,1,0
c,1,1,1,0,0
d,1,1,1,0,0
e,1,0,0,0,0
f,0,0,0,0,0
g,1,0,0,0,0
h,1,0,0,0,0
i,1,0,0,0,0
j,1,0,0,0,0
""")
data = pd.read_csv(drug_discovery_data)
stages = ['VirtualScreening', 'ADMET', 'FEP', 'ActivityCliff', 'Experiment']

# 计算各阶段的通过数量
def calculate_pass_count(data, stage):
stage_count = data[data[stage] == 1].shape[0]
return stage_count

pass_counts = [calculate_pass_count(data, stage) for stage in stages]
pass_rates = [pass_count / data.shape[0] for pass_count in pass_counts]

# 输出各阶段的漏斗效率
for stage, pass_rate in zip(stages, pass_rates):
print(f'{stage}_Pass_Rate: {pass_rate}')

# 可视化阶段漏斗效率
colors = ["#a9d18e", "#ffc000", "#ed7d31", "#5b9bd5", "#4472c4"]
plt.bar(stages, pass_rates, color=colors[::-1])
plt.xlabel('Drug Development Stage')
plt.ylabel('Pass Rate')
plt.title('Funnel Efficiency in Drug Development Stage')
plt.show()
VirtualScreening_Pass_Rate: 0.9
ADMET_Pass_Rate: 0.4
FEP_Pass_Rate: 0.4
ActivityCliff_Pass_Rate: 0.2
Experiment_Pass_Rate: 0.1
代码
文本
[4]
fig = plt.figure(figsize=(12,10))
colors = ["#a9d18e", "#ffc000", "#ed7d31", "#5b9bd5", "#4472c4"]
plt.fill_betweenx(y=[1, 3.8], x1=[10,12], x2=[8,6], color=colors[0]);
plt.fill_betweenx(y=[4, 6.8], x1=[12,14], x2=[6,4], color=colors[1]);
plt.fill_betweenx(y=[7, 9.8], x1=[16,18], x2=[2,0], color=colors[2]);
plt.fill_betweenx(y=[10, 12.8], x1=[16,18], x2=[2,0], color=colors[3]);
plt.fill_betweenx(y=[13, 15.8], x1=[28,30], x2=[-10,-12], color=colors[4]);
pass_counts = [calculate_pass_count(data, stage) for stage in stages]
stages = ['VirtualScreening', 'ADMET', 'FEP', 'ActivityCliff', 'Experiment']
plt.xticks([],[]);
plt.yticks([2,5,8,11,14], stages[::-1]);


for y, value in zip([2,5,8,11,14], pass_counts[::-1]):
plt.text(9, y, value, fontsize=16, fontweight="bold", color="white", ha="center");

plt.ylabel("Stages");

plt.title("Funnel Efficiency in Drug Development", loc="center", fontsize=25, fontweight="bold")
Text(0.5, 1.0, 'Funnel Efficiency in Drug Development')
代码
文本

🎖️以上漏斗显示,对于已知的10个阳性分子,经过VirtualScreening, ADMET, FEP, ActivityCliff, Experiment等阶段后,剩余阳性分子的数量分别为9, 4, 4, 2, 1。

瓶颈在第二阶段ADMET,即经过ADMET后,阳性分子的通过率大幅降低,漏斗筛选效率大幅降低。

因此对于已知的阳性分子,我们可以分析ADMET模型:

为什么没能筛选出阳性分子?为什么没能过滤掉阴性分子?即可得到大量模型预测错误的阳性或阴性分子,利用这些数据重训模型,改善模型性能。

为了在药物研发系统中实现类似的漏斗分析,我们可以采取以下措施:

  1. 为每个阶段设定明确的目标和评估指标,以便衡量每个阶段的推荐效率。比如,在召回阶段,我们可以关注召回率和准确率;在粗排和精排阶段,我们可以关注排序效果,如AUC、NDCG等。

  2. 收集每个阶段的数据,以便进行分析。在药物研发系统中,这可能包括化合物的特征数据、评估指标等。

  3. 分析每个阶段的数据,找出可能存在的问题和改进空间。通过对比不同阶段的数据,我们可以发现整个流程中的瓶颈和优化点。

  4. 根据分析结果,优化模型和策略。这可能包括调整特征工程、选择更合适的模型、优化参数等。

通过以上措施,我们可以在药物研发系统中实现类似漏斗分析的过程,从而有效地监测和优化整个药物筛选流程。

代码
文本

3:漏斗分析驱动数据和模型的飞轮

代码
文本

📖反向找靶

在计算药物研发中,我们还可以加入反向找靶,形成数据-模型闭环,然后通过闭环中各阶段的漏斗分析,来指导优化模型。

具体来说,我们可以收集历史上研发成功所有小分子药物,通过 反向找靶预测模型 ,预测出小分子对应的蛋白靶点。

对于每一个蛋白靶点,我们都可以走一遍以上流程(VirtualScreening, ADMET, FEP, ActivityCliff),然后分析每个模型的漏斗效率。

同时,对于每个模型,我们还可以得到大量模型预测错误的阳性或阴性分子,这些数据重训模型,有利于模型性能的改善。

基于以上数据和模型的飞轮循环,我们可以逐步改进系统的每一个阶段,进而提升系统整体的药物研发效果。

计算药物研发系统是一个持续优化的过程。我们需要不断收集新的数据,更新模型。

对于历史上研发失败的药物,如果能使用更高效的模型,进行重新发现和复盘分析,可以发掘隐藏价值。

对于历史上研发成功的药物,借助反向找靶等各阶段计算结果,梳理出药物-靶点-疾病等多向药理学机理,给疾病治疗提供更多启发和思路。

代码
文本

4:机会与挑战

代码
文本

🎖️对历史上研发成功或失败的药物进行漏斗分析和复盘分析,可以发掘出多方面的价值

  1. 提高药物研发效率:通过对历史药物研发案例的分析,可以了解各个阶段的瓶颈和影响药物研发成功率的关键因素,从而优化药物研发流程、改进模型预测效果,提高整个药物研发过程的效率。

  2. 减少药物研发风险:复盘分析可以帮助我们总结历史药物研发过程中的失败原因,为新药研发提供有益的经验教训。通过避免重蹈覆辙,我们可以降低药物研发过程中的风险,提高成功率。

  3. 优化药物研发资源分配:通过漏斗分析,我们可以了解各个阶段的资源投入与产出比,进而合理分配研发资源,将有限的资源集中在关键环节,提高整体药物研发的成本效益。

  4. 挖掘潜在药物候选分子:对历史药物研发案例进行重新发现和复盘分析,可能会发现一些具有潜在价值的药物分子。例如,某些因为当时技术条件限制而被认为不具备研发价值的药物分子,在现有技术条件下可能具备开发潜力。这有助于我们充分利用现有药物资源,降低新药研发的成本。

  5. 促进跨学科合作:通过对历史药物研发案例的分析,我们可以发现不同学科在药物研发过程中的重要作用,例如计算机科学、生物学、化学等。这有助于我们建立跨学科合作的药物研发团队,共同推动药物研发的进步。

  6. 培养药物研发人才:复盘分析可以帮助研发团队总结经验教训,提高团队成员的专业素养。同时,通过对历史案例的学习,新人可以更快地了解药物研发的全过程,缩短培训周期,提高工作效率。

  7. 丰富药物研发知识体系:对历史药物研发案例进行复盘分析,可以为药物研发领域的知识体系提供更多的经验数据。这有助于我们构建更完善的药物研发理论体系,推动药物研发领域的发展。

  8. 改进药物政策制定:通过对历史上研发成功或失败的药物进行复盘分析,政策制定者可以更好地了解药物研发过程中的关键环节和风险因素,从而制定更科学、更合理的药物政策,促进药物研发产业的发展。

通过对历史上研发成功或失败的药物进行漏斗分析和复盘分析,我们可以从中发掘出多方面的价值,包括提高药物研发效率、减少药物研发风险、优化资源分配等,为药物研发领域的发展提供有益的指导。

代码
文本

🔖万事俱备,只欠数据

我们需要源源不断的数据,初始数据以及收集过程中的数据。

初始数据可以来自 chembl,可以拿到很多药物数据、蛋白小分子亲和力数据、药物与适应症数据,

蛋白序列数据可以来自 uniprot,可以拿到智人,大鼠等不同物种的蛋白序列库。

蛋白-蛋白交互数据可以来自 STRING,有丰富的蛋白及其交互信息。

蛋白与适应症数据可以来自 TTD

欢迎大家评论交流更多更好的数据以及清洗方法,建立更合理的benchmark评价体系。

余峰(yufeng@dp.tech)

代码
文本

附录

如果您想进一步了解漏斗分析,您可以阅读下述文章:

  1. 淘宝搜索中的漏斗分析
  2. 重排序
  3. 反向找靶预测模型
代码
文本

📖多向药理学

传统药物研发思路的“1分子,1靶点,1疾病”模式是指将单一化合物针对单一靶点的干预来治疗特定疾病。这种研发思路在很大程度上简化了药物研发过程,降低了药物研发的难度和风险。然而,这种方法存在一定的局限性,因为许多疾病的发病机制很复杂,涉及多种生物过程和靶点。

多向药理学则是一种全新的药物研发策略,它强调针对多个靶点的干预来治疗疾病。这种方法认为,通过同时作用于多个靶点,可以更有效地治疗疾病,提高药效,降低副作用。多向药理学的研究取得了一定的进展,尤其在复杂疾病(如癌症、神经退行性疾病等)的治疗方面显示出潜力。

两种药物研发思路之间的矛盾主要体现在以下几个方面:

  1. 药物选择性:传统药物研发思路强调药物的高度选择性,即药物只对特定靶点起作用,从而减少副作用。而多向药理学则认为,针对多个靶点的药物可能更具优势,因为这样可以更全面地影响疾病的发展过程。

  2. 药物研发过程:传统药物研发过程通常较为简单,主要关注单一靶点的作用。而多向药理学研究过程相对复杂,需要考虑多个靶点之间的相互作用和协同效应。

  3. 药物评价标准:传统药物研发侧重于评估药物对单一靶点的作用,而多向药理学则需要评估药物对多个靶点的影响,这使得评价标准更加复杂和多元。

  4. 药物研发成本和时间:传统药物研发的时间和成本相对较低,而多向药理学研究由于涉及多个靶点的研究,可能导致研发成本和时间的增加。

传统药物研发思路与多向药理学存在一定程度的矛盾。但随着技术的发展,这两种思路在一定程度上也可以相互借鉴和融合,共同推动药物研发事业的发展。

代码
文本

🎖️药物研发飞轮

在数据-模型闭环基础上,可以进一步构建数据-模型-产品-用户的飞轮循环,以实现药物研发领域的快速发展。

  1. 通过数据-模型闭环优化各个阶段,可以获得更高质量的药物候选分子、更精确的药物研发系统和更低的研发风险。这将有助于我们推出更具竞争力的药物产品和工具产品,进而实现药物研发领域的快速发展。

  2. 药物研发的最终目标是为患者和医疗机构提供有效、安全、经济的药物产品和和工具产品。患者需求包括治疗效果、副作用、用药便利性等方面。

  3. 建立严格的质量控制体系,对药物研发过程中的各个阶段进行严密监控,确保药物的安全性和有效性达到预期标准,这将有助于提高药物研发系统的市场竞争力,满足药物研发专家的需求。

通过以上几个方面的优化,可以构建一个高效、低风险的药物研发闭环,从而形成数据-模型-产品-用户的飞轮循环,推动药物研发领域的快速发展。同时,这种飞轮循环还将有利于药物研发领域的技术创新和跨学科合作,为未来药物研发领域的发展提供更广阔的空间。

代码
文本

fly.png

代码
文本
drug
drug
已赞1
本文被以下合集收录
2023机器学习及其在化学中的应用
昌珺涵
更新于 2024-09-12
22 篇158 人关注
推荐阅读
公开
药物管线五维分析框架
药物数据分析
药物数据分析
yufeng
发布于 2023-08-23
5 赞
公开
药物管线六维分析框架
药物分析
药物分析
yufeng
发布于 2023-11-12
3 赞
评论
 # 药物研发宝典:历史药物漏斗分析与价值...

MileAway

2023-08-22
目前自动连接镜像了哈
评论