想象你是一位传承了三十代的宫廷御厨,手中握着一本厚达十万页的《人体菜谱》。菜谱里的每一行字都精确规定了食材——A、T、C、G 四种“食材代号”,也就是我们的 DNA 序列。人体约 30 亿个字母被组织成约 2 万个“菜谱”(基因),每道菜谱最终做出一道“菜”(蛋白质)。可在漫长的抄写传承中,有的菜谱被抄错了一个字:“加盐”变成了“加糖”;有的被删掉一整页;有的甚至让后面整段字全部错位。基因学家把这些改动叫作“变异”。麻烦的是,绝大多数“错字”其实无伤大雅——菜照样好吃;但少数改动会让菜变馊、变毒,甚至根本做不出来。变异效应预测,就是请一位“AI 试菜师”去判断:这个错字,到底会不会让菜翻车? 今天这篇文章,就带你走进基因变异效应预测的世界。我们会从“错字都有哪些类型”讲起,看看有哪些线索能判断错字的严重程度,再介绍从经典经验法则到深度学习模型的不同“试菜流派”,最后讲讲它们如何通过盲测上岗、走进真实的临床后厨。

岗位关联

对 AI 从业者来说,变异效应预测是 AI for Science 的绝佳练兵场:数据有明确标签、评估有公认基准、结果能直接被医院采用。掌握这一套从数据、模型到评估的完整流程,你就获得了把算法变成生命科学生产力的核心能力。

目录
  1. 可视化演示
  2. 变异效应概述
  3. 序列特征分析
  4. 功能效应机制
  5. 经典预测算法
  6. 深度学习模型
  7. 性能评估方法
  8. 临床应用实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

沿基因序列逐位点展示变异致病性评分,阈值线区分致病变异与良性变异。切换序列、变异与预测模式,观察变异效应预测的置信度与算法评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

变异效应预测 致病变异 良性变异 风险=ƒ(序列) 逐位点评估

变异效应概述

一位试菜师接手的第一件事,不是尝菜,而是先认识“菜谱上的改动”长什么样。翻开祖传的《人体菜谱》,你会发现书页空白处有各代厨师的笔迹:有的把“生抽”改成了“老抽”——只换了一个字母;有的把“三瓣蒜”改成“三头蒜”——多了一段字;还有的干脆撕掉了一整个段落。这些改动,就是基因变异的第一课。

基因组中的“改动”同样分层次。最常见的是 SNP(单核苷酸多态性),指某个位置上一个碱基被替换,如 A→G,好比菜谱里换了一个字;第二类是 InDel(插入缺失),插入或删除一小段序列,相当于多加或漏掉几个字;第三类是结构变异(SV),包括大片段缺失、重复、倒位和易位,相当于整页菜谱被重写。变异规模不同,后续影响天差地别。

面对一个变异,临床想知道的是:它会不会致病?目前国际上普遍采用五级分类:致病、可能致病、意义不明确(VUS)、可能良性、良性。VUS 是最让医生头疼的——它占了临床检出变异的相当比例。变异效应预测器的核心任务,就是把 VUS 往“可能致病”或“可能良性”方向推一把。衡量变异与疾病关联的经典统计量是比值比(OR)。

试菜师拿着 OR 这张“批注口碑统计表”,只能知道某个改动与翻车有关联,却还不知道为什么翻车、翻得多厉害。这就像你发现“所有做糊的菜都加了冰糖”,但至于冰糖为什么导致糊锅,还得翻开菜谱继续研究。下一章,我们来看试菜师的第二件法宝——序列特征。

ab与cd的比值:OR=a/bc/d=adbc\dfrac{a}{b} \quad\text{与}\quad \dfrac{c}{d} \quad\text{的比值:}\quad \text{OR}=\dfrac{a/b}{c/d}=\dfrac{ad}{bc}
其中 a 为患者中携带该变异的例数,b 为患者中不携带该变异的例数;c 为健康对照中携带该变异的例数,d 为健康对照中不携带该变异的例数。OR > 1 表示变异在患者中更常见,与疾病正相关。
  1. 患者组携带率a/b——患者中“带着批注的菜谱”与“没带批注的菜谱”的比值。若某批注总出现在翻车的菜品里,这个比值就大。
    ab\dfrac{a}{b}
  2. 对照组携带率c/d——健康人中同一批注出现与不出现的比值,相当于“正常情况下这种批注有多常见”的基线。
    cd\dfrac{c}{d}
  3. 两率相除把两个比值相除得到 OR。OR = 1 表示无关;OR 大于 1 越多,说明该变异与疾病关联越强。
    OR=a/bc/d=adbc\text{OR}=\dfrac{a/b}{c/d}=\dfrac{ad}{bc}

序列特征分析

试菜师又去翻阅世界各地的同款菜谱:东瀛的、地中海沿岸的、南美的。结果发现,尽管口味风格各异,有一道工序几百年来从未变过——“蛋白霜必须朝一个方向搅拌十圈”。凡是敢改这个步骤的菜谱,全都做砸了。这种“谁也动不得”的关键步骤,就是序列分析中最看重的信号:保守性。

在基因组学里,把人类基因与小鼠、斑马鱼、果蝇等物种的对应序列排在一起(多序列比对),会看到某些位点无论什么物种都保持一致,称为“保守位点”。它们通常位于蛋白质的关键功能区域,一旦突变就会破坏功能。变异预测器把保守性作为核心输入特征:越保守,变异越可能致病。

度量保守性常用香农熵:统计某个位点在多个物种序列中各个碱基的出现频率,计算信息熵。熵越低,说明该位点越单一、越保守。除了保守性,还有几类常用特征:变异是否落在剪接位点(影响 mRNA 的“去头掐尾”)、是否位于蛋白结构域内、以及该变异在人群中的等位基因频率——极低频的变异往往更可能有害,因为自然选择通常已把高频有害变异清除。

有了“关键步骤地图”,试菜师就能圈出菜谱上不能碰的红线。但光知道哪里不能动还不够——同样是改关键步骤,把糖换成蜂蜜可能没事,换成盐就毁了。这取决于改动本身的“化学性质”,也就引出了下一章的机制分类。

H=−∑i=14pilog⁡2piH=-\sum_{i=1}^{4} p_i \log_2 p_i
p_i 是某个位点上第 i 种碱基(A/T/C/G)在多个物种序列中的出现频率。H 接近 0 表示该位点极度保守,H 接近 2 表示四个碱基随机出现、几乎无功能约束。
  1. 计算各碱基频率先数一数比对序列中某个位置上 A、T、C、G 各自的出现频率 p_i——相当于统计各地菜谱在这个步骤上都用了什么食材。
    pi=niNp_i=\dfrac{n_i}{N}
  2. 单碱基熵项对每个 p_i 计算 $-p_i\log_2 p_i$。若某种碱基占绝对主导,p_i 接近 1,这一项趋近于 0。
    −pilog⁡2pi-p_i \log_2 p_i
  3. 四项求和把四个碱基的熵项相加得到 H。H 越小,说明进化越“不敢”改变这个位置,变异越危险。
    H=−∑i=14pilog⁡2piH=-\sum_{i=1}^{4} p_i \log_2 p_i

功能效应机制

试菜师把“批注”按效果分了四类:把“生抽”换成“酱油膏”——菜味几乎一样;把“糖”换成“盐”——彻底翻车;在菜谱写到一半时突然划线“后面的菜不用做了”——成品直接变成半截;还有更狠的,删掉一个字导致后面整段字全部错位、不知所云。前一种叫“同义”,后三种分别叫“错义、无义、移码”。

基因翻译时每三个碱基(一个密码子)对应一种氨基酸。同义突变:密码子变了但翻译出的氨基酸不变,通常无害;错义突变:换成了另一种氨基酸,可能改变蛋白质结构和功能;无义突变:密码子提前变成终止信号,蛋白质被拦腰截断;移码突变:插入或缺失的碱基数不是 3 的倍数,导致后续所有密码子读框错位,往往产生完全失活的蛋白质。效应预测首先要对变异做这层“语法分析”。

对于错义突变,仅知道“换了氨基酸”还不够,还要量化两种氨基酸的差异。常用 Grantham 距离,它综合三种理化性质——氨基酸组成、极性、体积——来计算两个氨基酸“长得有多不像”。距离越大,替换对蛋白质结构的扰动越剧烈,致病可能性越高。例如缬氨酸(V)替换丙氨酸(A)距离仅约 32,而色氨酸(W)替换甘氨酸(G)距离高达约 142。

现在试菜师既知道“哪里是关键步骤”,又知道“改动有多激进”,已经能凭经验给出初步判断了。但不靠直觉、只靠规则的“业内老前辈”,早就把这套经验编成了标准手册——这就是经典预测算法。

d=∑j=13cj(Xj−Yj)2d=\sum_{j=1}^{3} c_j (X_j-Y_j)^2
X_j 与 Y_j 分别是原氨基酸和替代氨基酸在第 j 个理化属性(组成、极性、体积)上的取值,c_j 是经验权重。d 越大,说明两种氨基酸差异越大,突变越激进。
  1. 三组理化属性每种氨基酸用三个数值描述——组成、极性、体积,就像每种食材有“色泽、纹理、含水量”三个指标。X_j 与 Y_j 是替换前后两个氨基酸的指标值。
    Xj,Yj(j=1,2,3)X_j,\quad Y_j \quad (j=1,2,3)
  2. 求平方差对每一维计算 $(X_j-Y_j)^2$,正值化并放大差异。任何一维差得远,都会显著增大总距离。
    (Xj−Yj)2(X_j-Y_j)^2
  3. 加权求和三组平方差按经验系数 c_j 加权后相加,得到 Grantham 距离 d。实际使用中可对 d 归一化到 0~1,作为模型的输入特征。
    d=∑j=13cj(Xj−Yj)2d=\sum_{j=1}^{3} c_j (X_j-Y_j)^2

经典预测算法

在深度学习横空出世之前,试菜界流传着几本“老前辈手札”。老前辈一辈子试了上百万道菜,把经验浓缩成几条铁律:比如“某道工序在全世界都没人改过,你敢改,八成要翻车”。SIFT 就是这条铁律的自动化版本。

SIFT(Sorting Intolerant From Tolerant)的核心思想是:如果一个错义突变后产生的氨基酸,在多序列比对的同源序列中“从来或几乎不出现”,那它就很难被容忍,预测为有害。SIFT 输出 0~1 的容忍分数,小于 0.05 判定有害。PolyPhen 则在保守性之外,还结合蛋白质结构、功能注释等信息,输出 0~1 的致病概率。

后来出现了“大杂烩”式集成方法 CADD(Combined Annotation Dependent Depletion)。它把数十个注释特征(保守性、调控元件、剪接、开放染色质等)合并,训练模型去区分“已经固定在人群中的变异”(通常无害)与“新产生的变异”(更多有害),输出基于对数比转换的 C-score。C-score 越高,代表变异在人群中越罕见,致病风险越大。

老前辈的经验法则可靠、可解释,但天花板也很低——它们只看得懂“有没有人这么干过”,却看不透序列背后的语法与上下文。新一代试菜师决定不再手写规则,而是让神经网络直接吃进整本菜谱,自己总结规律。这就是深度学习模型登场的时刻。

T(a)=naNT(a)=\dfrac{n_a}{N}
N 为同源序列总条数,n_a 为在这些序列中出现待评估氨基酸 a 的条数。若 T(a) < 0.05,SIFT 预测该错义替换有害。
  1. 统计同源序列把不同物种的同一蛋白序列对齐,N 是总条数——相当于收集全世界所有版本的同一道菜谱。
    NN
  2. 统计目标氨基酸出现次数数一数参考位点上,历史上是否出现过氨基酸 a。如果一次都没出现过,说明它违背了自然选择的“常识”。
    nan_a
  3. 求比例并判定$T=n_a/N$ 越小,说明这个替换越“离经叛道”。SIFT 规定 T < 0.05 即判定有害,其余视为可容忍。
    T(a)=naN,T<0.05⇒有害T(a)=\dfrac{n_a}{N},\quad T<0.05 \Rightarrow \text{有害}

深度学习模型

老前辈手札再厚,也敌不过一个见识过世界所有菜系的“AI 试菜宗师”。宗师不需要别人告诉它“哪一步是关键”,它把整本菜谱逐字读进去,自己琢磨出“为什么这里不能改、那个改动为什么致命”。这就是深度学习变异预测模型的思路:从海量基因组序列中自动学习突变与效应的规律。

深度学习模型的第一步是序列编码:把 DNA 片段变成模型能读的输入。最常用的是 one-hot 编码——每个位置用长度 4 的向量表示,A、T、C、G 各占一个维度,相当于把菜谱的每个字转成机器认得的“四选一标记”。模型的输入通常是以变异位点为中心的数百到数千碱基窗口,这样模型能同时看到局部上下文和远距离调控信息。

这一方向涌现出多个代表性模型:Enformer 基于 Transformer 架构,同时预测数千个基因组特征,能捕捉长距离调控交互;PrimateAI 巧妙地把灵长类动物中常见的变异作为“天然良性”标签——因为这些变异经过了自然选择的考验;AlphaMissense 则借鉴蛋白质语言模型,把蛋白质序列当作“语言”建模,输出错义变异的致病概率。无论架构如何,训练时都使用交叉熵损失来度量预测与标签的差距。

AI 试菜宗师虽然厉害,但也可能“尝得太少而走偏”——比如把某家饭店的独家口味当成了普世标准。所以再强的模型,也要经过一套不掺水的盲测才能上岗。这就轮到性能评估方法出场了。

L=−1N∑i=1N[yilog⁡y^i+(1−yi)log⁡(1−y^i)]\mathcal{L}=-\dfrac{1}{N}\sum_{i=1}^{N}\left[y_i \log \hat{y}_i + (1-y_i)\log(1-\hat{y}_i)\right]
y_i 是第 i 个样本的标签(1 为致病,0 为良性),ŷ_i 是模型输出的致病概率。损失越小,说明模型的预测与真实标签越一致。
  1. 样本标签 y_iy_i=1 表示这个变异确认致病,y_i=0 表示良性——相当于试菜宗师尝完后给出的“翻车与否”标准答案。
    yi∈{0,1}y_i \in \{0,1\}
  2. 模型预测 ŷ_i模型输出的致病概率,取值 0~1。模型越确信“这道菜要翻车”,ŷ_i 越接近 1。
    y^i=P(致病∣xi)\hat{y}_i = P(\text{致病} \mid x_i)
  3. 单个样本损失$-y_i\log \hat{y}_i-(1-y_i)\log(1-\hat{y}_i)$。预测接近真值时损失趋近 0;自信地预测错时损失趋向无穷大。
    −yilog⁡y^i−(1−yi)log⁡(1−y^i)-y_i\log \hat{y}_i-(1-y_i)\log(1-\hat{y}_i)
  4. 批平均对所有样本损失取平均,得到该批数据的平均损失,作为反向传播的优化目标。
    L=−1N∑i=1N[⋯ ]\mathcal{L}=-\dfrac{1}{N}\sum_{i=1}^{N}\left[\cdots\right]

性能评估方法

一家饭店决定引进 AI 试菜师,可不敢直接让它把关食品安全。老板先搞了一场“盲测”:把过去五年鉴定过的菜谱(有些确认翻车、有些确认没问题)混在一起,让 AI 打分,再与真实鉴定结果对比。这场盲测用的“题库”和“评分标准”,就是变异效应预测的性能评估体系。

评估变异预测器的黄金“题库”有几类:ClinVar(临床提交的致病/良性变异)、人类基因组数据库(如 gnomAD)中的常见变异(作为良性代表)、以及深度突变扫描(DMS)实验数据(大规模功能实验测得每个变异的功能影响)。有了带标签的数据集,就可以计算各种指标。

最常用的评估工具有两类:一是混淆矩阵衍生出的灵敏度与特异度。把预测结果按阈值分为致病/良性,可得四个数字:真阳性 TP(致病且被预测致病)、假阳性 FP、真阴性 TN、假阴性 FN。灵敏度衡量“真致病中有多少被抓住”,特异度衡量“真良性中有多少被放过”。二是 ROC 曲线下面积 AUC:把阈值从高到低扫描,绘制灵敏度对 1-特异度的曲线,AUC 综合反映模型的排序能力,0.5 相当于瞎猜,1.0 是完美。在致病变异极不平衡的现实数据上,精确率-召回率曲线(PR-AUC)往往更敏感。

盲测成绩合格,AI 试菜师终于拿到“上岗证”,走进了真正的后厨。但后厨比实验室复杂得多:有几百种菜谱要同时把关,有过敏原要忌口,还有每个食客的体质差异。这就是最终的临床应用实践环节。

灵敏度=TPTP+FN,特异度=TNTN+FP\text{灵敏度}=\dfrac{TP}{TP+FN},\qquad \text{特异度}=\dfrac{TN}{TN+FP}
TP 是“坏菜被揪出”,FP 是“好菜被冤枉”,TN 是“好菜被放行”,FN 是“坏菜漏网”。两个指标从不同角度刻画预测器的能力。
  1. 混淆矩阵四项TP 为真阳性,FP 为假阳性,TN 为真阴性,FN 为假阴性——对应四种“判断对错”的组合。
    TP, FP, TN, FNTP,\ FP,\ TN,\ FN
  2. 灵敏度$TP/(TP+FN)$——所有真正翻车的菜里,有多少比例被 AI 试菜师拦下来了。对诊断类应用,这一指标至关重要。
    TPTP+FN\dfrac{TP}{TP+FN}
  3. 特异度$TN/(TN+FP)$——所有没问题的菜里,有多少被正确放行。特异度低意味着误报多,会吓坏太多健康人。
    TNTN+FP\dfrac{TN}{TN+FP}

临床应用实践

AI 试菜师正式进入米其林中央厨房,它的职责不再只是“预测某道菜是否翻车”,而是成为整个质检体系的一环:哪些材料该拒收、哪些人群该忌口、哪些新菜可以上市。在真实的临床场景中,变异效应预测的价值同样如此落地。

在罕见病诊断中,医生对患者做全外显子组或全基因组测序,会得到成千上万个变异,但真正致病的往往只有一个。效应预测器输出的风险分数,能帮助遗传咨询师迅速给候选变异排序,锁定最可疑的“肇事者”。在药物基因组学中,预测器用于解读药物代谢基因的变异,例如 CYP2D6 的变异组合决定了患者是“快速代谢”还是“慢速代谢”,直接影响用药剂量。

临床应用不能只信单一预测器,国际通用的 ACMG/AMP 指南要求把多类证据汇总:人群频率(极罕见加分)、计算预测(多个预测器一致加分)、功能实验(细胞实验证实破坏功能加分)、家系共分离数据(家系中与疾病共同分离加分)等。每类证据有不同权重,加总后落入五级分类。这相当于让多位专家各自打分,再汇总成最终结论。计算预测只是其中一票,但往往是最便宜、最先拿到的一票。

至此,AI 试菜师完成了从“认识批注”到“上岗把关”的完整旅程:先认清改动类型,再分析关键位置与改动幅度,借助经典规则和深度学习给出风险分,通过严格盲测,最后在真实厨房里与人类专家并肩工作。基因变异效应预测,本质上就是把“这道菜会不会翻车”的人类经验,变成可以规模化、客观量化的算法能力。

S=∑kwk δk,δk∈{0,1}S=\sum_{k} w_k\, \delta_k,\qquad \delta_k \in \{0,1\}
w_k 为第 k 类证据的权重(非常强 8 分、强 4 分、中等 2 分、支持 1 分;良性证据取负分),δ_k 表示该证据是否成立。总分落入致病区间则判为致病。
  1. 证据成立与否对每条证据打分 δ_k,成立取 1、不成立取 0——就像每份质检报告只回答“是/否”。
    δk∈{0,1}\delta_k \in \{0,1\}
  2. 权重加权不同证据可信度不同:非常强(如关键基因的蛋白截断变异)8 分,强 4 分,中等 2 分,支持 1 分,良性证据取负分。
    wk∈{−4,−2,−1,1,2,4,8}w_k \in \{-4,-2,-1,1,2,4,8\}
  3. 阈值判定所有证据分累加,若 S ≥ 10 判“致病”,若明显为负则判“良性”,中间地带归入“意义不明确”。
    S=∑kwk δkS=\sum_{k} w_k\, \delta_k

AI 应用场景

罕见病诊断中的变异位点排序

阶段:模型推理与候选筛选

解决的问题:全外显子测序一次产出 2 万多个变异,传统人工逐个查阅文献耗时数周。变异效应预测器(如 CADD、AlphaMissense)能对全部错义变异批量打分,几分钟内把致病候选从数万缩到几十个。

具体案例:某罕见病中心收治一位发育迟缓患儿,WES 检出约 3 万个变异。先用人群频率过滤掉 99%,再用 AlphaMissense 对剩余 200 个错义变异打分,排第一位的位点恰好落在已知神经发育基因的保守结构域中,后续 Sanger 验证确认了诊断,总耗时从三周缩短到三天。

药物基因组学与个体化用药

阶段:特征工程与分类预测

解决的问题:药物代谢基因(如 CYP2D6)的变异复杂多样,传统表型分型靠手工规则,容易漏判。变异效应预测模型帮助自动解读基因型组合,预测患者的代谢类型,从而指导用药剂量。

具体案例:某药企在肿瘤药物临床试验中,用变异效应预测器对入组患者的药物代谢基因变异进行功能分级,把慢代谢患者筛选出来并下调剂量,显著降低了不良反应发生率,同时保证疗效。

Python 演示

python80 行
"""Simplified variant effect predictor: codon translation + Grantham distance + conservation."""import math # 标准遗传密码表 共 64 个密码子CODON_TABLE = {    'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L',    'TCT': 'S', 'TCC': 'S', 'TCA': 'S', 'TCG': 'S',    'TAT': 'Y', 'TAC': 'Y', 'TAA': '*', 'TAG': '*',    'TGT': 'C', 'TGC': 'C', 'TGA': '*', 'TGG': 'W',    'CTT': 'L', 'CTC': 'L', 'CTA': 'L', 'CTG': 'L',    'CCT': 'P', 'CCC': 'P', 'CCA': 'P', 'CCG': 'P',    'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q',    'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R',    'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M',    'ACT': 'T', 'ACC': 'T', 'ACA': 'T', 'ACG': 'T',    'AAT': 'N', 'AAC': 'N', 'AAA': 'K', 'AAG': 'K',    'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R',    'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V',    'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A',    'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 'GAG': 'E',    'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 'GGG': 'G',} # 氨基酸理化属性 组成 极性 体积AA_PROPS = {    'G': (57, 0, 3), 'A': (89, 0, 27.5), 'V': (117, 0, 43),    'L': (117, 0, 43), 'I': (117, 0, 43), 'F': (165, 0, 91.5),    'W': (204, 0, 115.5), 'M': (131, 0, 52.5), 'P': (117, 0, 32.5),    'S': (89, 1.67, 13.5), 'T': (101, 1.67, 33.5), 'C': (103, 1.67, 27.5),    'Y': (181, 1.67, 91.5), 'N': (114, 1.67, 38), 'Q': (130, 1.67, 53.5),    'D': (114, 8, 35), 'E': (127, 8, 53.5), 'K': (128, 8, 62.5),    'R': (156, 8, 68.5), 'H': (137, 3, 45.5), '*': (0, 0, 0),} def translate(dna):    """translate DNA into amino acid sequence by codons"""    prot = []    for i in range(0, len(dna) - 2, 3):        codon = dna[i:i + 3].upper()        prot.append(CODON_TABLE.get(codon, '?'))    return ''.join(prot) def grantham_distance(aa1, aa2):    """euclidean distance of physicochemical props between two amino acids"""    if aa1 not in AA_PROPS or aa2 not in AA_PROPS:        return 0.0    p1, p2 = AA_PROPS[aa1], AA_PROPS[aa2]    dist = 0.0    for j in range(3):        dist += (p1[j] - p2[j]) ** 2    return math.sqrt(dist) def predict_variant(ref_dna, pos, alt_base, conservation):    """predict pathogenicity risk of substituting base at position pos"""    ref_base = ref_dna[pos].upper()    if ref_base == alt_base.upper():        return 0.0, 'identical(no change)'    alt_dna = ref_dna[:pos] + alt_base.upper() + ref_dna[pos + 1:]    codon_start = pos - pos % 3    ref_codon = ref_dna[codon_start:codon_start + 3].upper()    alt_codon = alt_dna[codon_start:codon_start + 3].upper()    ref_aa = CODON_TABLE.get(ref_codon, '?')    alt_aa = CODON_TABLE.get(alt_codon, '?')    if ref_aa == alt_aa:        return 0.05, 'synonymous(same amino acid)'    if alt_aa == '*':        return 0.99, 'nonsense(truncated protein)'    dist = grantham_distance(ref_aa, alt_aa)    # 融合保守度与理化距离 各占一半权重    score = 0.5 * conservation + 0.5 * min(dist / 100.0, 1.0)    return round(min(score, 1.0), 3), 'missense %s->%s dist=%.0f' % (ref_aa, alt_aa, dist) if __name__ == '__main__':    ref = 'ATGGCTGAATTCCCGGCGTCGACGTAA'    score, note = predict_variant(ref, 4, 'T', 0.9)    print('Variant 1:', note, 'risk =', score)    score2, note2 = predict_variant(ref, 6, 'T', 0.2)    print('Variant 2:', note2, 'risk =', score2)    score3, note3 = predict_variant(ref, 5, 'C', 0.8)    print('Variant 3:', note3, 'risk =', score3)
目的:用纯 Python 实现一个简化版变异效应预测器——先翻译密码子判断突变类型,再计算 Grantham 理化距离,最后融合保守度输出 0~1 的致病风险分数。
  1. ref_base = ref_dna[pos].upper()取出参考序列在变异位点的原始碱基,若与替换碱基相同则直接判为无变化。
  2. alt_dna = ref_dna[:pos] + alt_base.upper() + ref_dna[pos + 1:]用字符串拼接模拟“修改菜谱中的一个字”,得到变异后的 DNA 序列。
  3. codon_start = pos - pos % 3计算变异位点所属密码子的起始位置,这是判断“改动落在哪个词”的关键。
  4. prot.append(CODON_TABLE.get(codon, '?'))每三个碱基查一次遗传密码表,把 DNA“菜谱”翻译成氨基酸“成品菜”。
  5. dist = grantham_distance(ref_aa, alt_aa)计算替换前后两种氨基酸的理化属性欧氏距离,量化“换了食材后的差异幅度”。
  6. score = 0.5 * conservation + 0.5 * min(dist / 100.0, 1.0)把保守度与理化距离各按一半权重融合,得到最终致病风险。

常见误区

误区预测器给出 0.95 的致病概率,那这个人一定会得病吧?

正解这个概率度量的是“变异对功能的影响强度”,不是个体患病的确定性预言。一个变异被判致病,只表示风险显著升高,外显率可能只有 20%。就像菜谱里“加了毒蘑菇”几乎必翻车,但“辣椒放多了”只让一部分人觉得太辣。效应预测回答的是“这个改动有多糟糕”,而不是“这个人是否发病”。

为何常见:人们习惯把百分比理解为事件发生的确定性概率,忽略了变异效应预测本质上是等位基因功能影响的量化,与复杂疾病的多基因背景和环境因素并非一一对应。

误区位点保守性高达 0.95,那这个位置的任何变异都一定是致病的。

正解保守性只反映“进化压力下这个位点很重要”,但并非所有改变都会破坏功能。实验已发现大量“保守位点的中性变异”——例如保守的丙氨酸换成同样疏水的缬氨酸,蛋白质照样工作。SIFT 的阈值设计本身就承认这种不确定性。好比一道菜里的“盐”很关键,但把海盐换成岩盐,味道其实差不多。

为何常见:教材和文献通常突出“保守性高→有害”这条主线,容易让初学者把它当成绝对规则,忽略了氨基酸理化性质相似性等补偿因素。

误区深度学习是黑盒,把序列丢进去就能出结果,肯定比传统方法全自动、更客观。

正解模型确实能自动学特征,但数据构建、窗口设定、标签体系、训练目标都隐含着大量人为设计。例如 PrimateAI 用灵长类常见变异当良性标签,本身就利用了“自然选择”这一先验知识;Enformer 的可解释性分析也显示它内部学到了保守性和调控基序。特征工程没有消失,而是转移到了数据设计和建模决策层面。就像 AI 试菜师不用人教“哪步关键”,但喂它哪些菜谱、以什么为标准答案,仍然是人定的。

为何常见:“端到端”“自动学习”的营销语言掩盖了数据与标签设计的重要性,初入门者容易把模型的泛化能力理想化。

误区模型 AUC 达到 0.98,肯定可以直接上临床诊断了。

正解AUC 衡量的是排序能力,而临床决策关心特定阈值下的校准度和绝对风险。现实中致病变异极其稀少,即使特异度 99%,阳性预测值也可能很低。需要结合精确率-召回率曲线、阈值校准,以及 ACMG 指南的多证据整合。就像盲测中 98% 分得清“甜/咸”的试菜师,真到了后厨,还得先解决“咸味物质本来就很稀有”的问题。

为何常见:竞赛和论文普遍用 AUC 作排行榜指标,容易让人误以为高 AUC 就等于高临床价值。

面试题

Q1. 在 DNA 序列中,SNP 变异指的是什么?

单选题 · easy

  • A.单个碱基被替换成另一个碱基← 正确答案
  • B.一段 DNA 序列被整段删除
  • C.染色体片段发生倒位
  • D.一条染色体整体丢失

答案:A。SNP(单核苷酸多态性)是单个碱基位置上的替换,如 A→G。删除对应 InDel,倒位和染色体丢失属于结构变异范畴,不是 SNP。

Q2. 一个密码子由几个碱基组成?

单选题 · easy

  • A.1 个
  • B.2 个
  • C.3 个← 正确答案
  • D.4 个

答案:C。遗传密码以三联体形式读取,每 3 个碱基编码一种氨基酸,这是基因翻译的基本“分组单位”,也是判断移码突变的基础。

Q3. 某变异使密码子 GCT(丙氨酸)变为 GAT(天冬氨酸),这种变异属于?

单选题 · easy

  • A.同义突变
  • B.错义突变← 正确答案
  • C.无义突变
  • D.移码突变

答案:B。翻译出的氨基酸从丙氨酸变成天冬氨酸,氨基酸种类改变,属于错义突变。氨基酸不变才是同义,提前出现终止密码子才是无义,非 3 倍数插入缺失导致读框漂移才是移码。

Q4. SIFT 预测有害的判定阈值通常是?

单选题 · mid

  • A.容忍分数大于 0.05
  • B.容忍分数小于 0.05← 正确答案
  • C.致病概率大于 0.5
  • D.CADD 分数大于 10

答案:B。SIFT 输出 0~1 的容忍分数,小于 0.05 表示该氨基酸替换在进化上几乎不被容忍,判定有害。CADD 用的是另一套 C-score 体系,阈值含义不同。

Q5. Grantham 距离用于量化什么?

单选题 · mid

  • A.两个物种的亲缘关系
  • B.两条 DNA 序列的相似度
  • C.两种氨基酸的理化性质差异← 正确答案
  • D.蛋白质结构域的数量

答案:C。Grantham 距离综合氨基酸的组成、极性、体积三种理化属性,差值越大说明氨基酸替换越激进,对蛋白质结构的扰动可能越大,致病风险相应越高。

Q6. 灵敏度(召回率)的定义是?

单选题 · mid

  • A.TN / (TN + FP)
  • B.TN / (TN + FN)
  • C.TP / (TP + FN)← 正确答案
  • D.TP / (TP + FP)

答案:C。灵敏度 = TP/(TP+FN),衡量真致病变异中被正确预测出来的比例;特异度 = TN/(TN+FP);精确率 = TP/(TP+FP),注意三者公式不要混淆。

Q7. PrimateAI 训练时把灵长类常见变异当作良性标签,利用了哪种先验知识?

单选题 · mid

  • A.依赖密码子偏爱信息
  • B.依赖自然选择净化压力← 正确答案
  • C.依赖基因表达组织差异
  • D.依赖连锁不平衡模式

答案:B。变异若在灵长类群体中高频存在,说明它经受住了自然选择的考验,大概率不破坏必需功能,否则早被淘汰,因此可作良性标签。这避免了人工标注的主观偏差。

Q8. 下列哪些属于 ACMG/AMP 指南中的证据类型?

多选题 · mid

  • A.人群等位频率← 正确答案
  • B.计算预测结果← 正确答案
  • C.家系共分离数据← 正确答案
  • D.蛋白质结构的坐标

答案:ABC。ACMG 指南整合人群频率、计算预测、功能实验、共分离等多类证据;蛋白质坐标本身不构成独立证据条目,只是功能或结构证据的支撑材料。

Q9. 关于变异效应预测模型的评估,下列说法正确的是?

多选题 · hard

  • A.AUC 只反映排序能力而非绝对校准← 正确答案
  • B.类别极不平衡时 PR 曲线更敏感← 正确答案
  • C.ClinVar 表现好 DMS 必然同样好
  • D.阈值选择影响灵敏度与特异度权衡← 正确答案

答案:ABD。AUC 仅度量排序质量,与阈值和校准无关;致病变异极稀少时 PR-AUC 更能体现少数类性能;不同基准数据分布差异大,跨集表现不能保证(C 错误);阈值直接决定混淆矩阵,灵敏度与特异度此消彼长。

Q10. 深度学习变异预测模型的输入和训练设计中,常见的做法包括哪些?

多选题 · hard

  • A.以变异位点为中心的序列窗口← 正确答案
  • B.使用 one-hot 编码表示碱基← 正确答案
  • C.用交叉熵损失训练二分类器← 正确答案
  • D.直接输入蛋白质的质谱谱图

答案:ABC。深度模型通常以变异为中心截取序列窗口并做 one-hot 编码,用交叉熵损失做二分类训练。质谱谱图属于蛋白质组学数据,不是序列变异预测的常规输入。