protein-qc について
Protein Design Quality Controlは、設計タンパク質を評価・順位付けするスキルです。構造、結合、発現の確認をフィルタリングと複合スコアにまとめ、計算指標だけでは結合親和性を確定できないことも示します。
主な機能
- 01構造、結合、発現の品質チェック
- 02指標の閾値と設計レベルのリスク検出
- 03段階的なフィルタリングとキャンペーン診断
- 04複合スコアによる設計の順位付け
- 05設計キャンペーンの失敗回復ガイダンス
活用シーン
- 01実験前の設計タンパク質の選別
- 02複数の品質指標を用いた候補の順位付け
- 03設計キャンペーンの低い通過率の診断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ adaptyvbio/ protein-design-skills --skill protein-qcインストール後、Claude Code で/protein-qcを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/binding-qc.mdcomposite-scoring.mdexpression-qc.mdstructural-qc.md詳細
タンパク質設計の品質管理
重大な制限事項
個々の指標は、結合を予測する力が弱いです。研究によると、以下のとおりです。
- 個々の指標の ROC AUC:0.64~0.66(ランダムよりわずかに良い程度)
- 指標は事前スクリーニング用のフィルターであり、親和性の予測指標ではありません
- 意味のある順位付けには、複合スコアリングが不可欠です
これらのしきい値は質の低い設計を除外するためのものであり、結合親和性を予測するものではありません。
QC の構成
QC は目的とレベルに基づいて構成されています。
| 目的 | 評価対象 | 主な指標 |
|---|---|---|
| 結合 | インターフェースの品質、結合ジオメトリ | ipTM、PAE、SC、dG、dSASA |
| 発現 | 製造可能性、溶解性 | Instability、GRAVY、pI、システイン |
| 構造 | フォールドの信頼度、一貫性 | pLDDT、pTM、scRMSD |
各カテゴリには 2 つのレベルがあります。
- 指標レベル:しきい値を用いて計算される値(pLDDT > 0.85)
- 設計レベル:パターン/モチーフの検出(奇数個のシステイン、NG 部位)
クイックリファレンス:すべてのしきい値
| カテゴリ | 指標 | 標準 | 厳格 | 出典 |
|---|---|---|---|---|
| 構造 | pLDDT | > 0.85 | > 0.90 | AF2/Chai/Boltz |
| pTM | > 0.70 | > 0.80 | AF2/Chai/Boltz | |
| scRMSD | < 2.0 Å | < 1.5 Å | 設計と予測の比較 | |
| 結合 | ipSAE_min | > 0.61 | > 0.70 | AF3/Boltz(ipsae を参照) |
| ipTM | > 0.50 | > 0.60 | AF2/Chai/Boltz | |
| PAE_interaction | < 12 Å | < 10 Å | AF2/Chai/Boltz | |
| Shape Comp (SC) | > 0.50 | > 0.62 | PyRosetta | |
| interface_dG | < -10 | < -15 | PyRosetta | |
| Interface BUNS | <= 4 | <= 2 | PyRosetta | |
| 発現 | Instability | < 40 | < 30 | BioPython |
| GRAVY | < 0.4 | < 0.2 | BioPython | |
| ESM2 PLL | > 0.0 | > 0.2 | ESM2 | |
| Folding ΔG | < -2 kcal/mol | < -4 kcal/mol | SaProtΔG |
設計レベルのチェック(発現)
| パターン | リスク | 対応 |
|---|---|---|
| 奇数個のシステイン | ジスルフィド結合の未形成 | 再設計 |
| NG/NS/NT モチーフ | 脱アミド化 | 要確認/回避 |
| K/R が 3 個以上連続 | タンパク質分解 | 要確認 |
| 疎水性残基が 6 個以上連続 | 凝集 | 再設計 |
参照:references/binding-qc.md、references/expression-qc.md、references/structural-qc.md
インターフェース指標(PyRosetta)
形状相補性と interface_dG に加えて、2 つのインターフェース指標で、de novo 設計でよくある失敗を検出できます。
- 埋没した未充足水素結合(BUNS):水素結合を形成していない、埋没した極性原子です。 主要なエネルギー的失敗要因であり、dG や dSASA とは独立した指標です。インターフェース BUNS は、標準では 4 以下、厳格では 2 以下にしてください。
- ContactMolecularSurface:形状相補性で重み付けされた接触面積です。dSASA とは異なり、隙間や穴のあるインターフェースに惑わされません。値が大きいほど良好です。
どちらも Cao 2022、AlphaProteo、BindCraft のフィルターセットで使用されています。
構造品質の順位付けには、biomodals の modal_af2rank.py(AF2Rank)も利用できます。これは、設計自身の構造をテンプレートとして、設計がどの程度正確に再予測されるかをスコアリングします。
バインダーの順位付け(ベンチマークに基づく)
15 の標的について実験で検証された 3,766 個のバインダーを対象としたメタ分析(Overath et
al., bioRxiv 2025, doi:10.1101/2025.08.14.670059)では、AF3 の ipSAE_min が結合を予測する最良の単一 in-silico 指標であり、3 つの特徴量を使った単純な線形モデルが標的をまたいで最も高い汎化性能を示すことがわかりました。複雑にしても性能は向上せず、勾配ブースティングや多数の特徴量を使うモデルも、線形モデルを上回りませんでした。
この研究で推奨されているフィルタリング戦略は次のとおりです。
- 次のいずれかにしきい値を設定します:
AF3 ipSAE_min > 0.61、ipSAE_min × interface_ΔG/ΔSASA < -1.5、またはLIS × shape_complementarity > 0.42。 shape_complementarity > 0.62とRMSD_binder < 3.73(入力構造と再予測構造の比較)で事前フィルタリングし、その後ipSAE_minに基づく上位 K 件を選択します。
ipSAE_min は、非対称な 2 方向の ipSAE(バインダー→標的、標的→バインダー)のうち小さい方であり、平均値や最大値ではありません。計算には ipsae スキルを使用してください。標的によっては RMSD_binder フィルターが厳しすぎる場合があるため、厳格なしきい値ではなく、緩やかな事前フィルターとして使用するのがおすすめです。
安定性の予測(小さなドメイン)
小さなドメイン(ミニバインダーの範囲で、およそ60~80残基)では、絶対的なフォールディング安定性を直接予測できます。SaProtΔG(Cho et al., bioRxiv 2026, doi:10.64898/2026.05.19.726285)は、絶対的なフォールディングΔGをRMSE約0.8 kcal/molで予測し、設計タンパク質の安定性と不安定性の判別精度を向上させます。商用利用では、ESM3の重みが非商用であるため、ESM3バリアントではなくSaProtバリアントを使用してください。ΔGがより負の値(より安定)になるようにフィルタリングします。
配列のリスク要因スキャン
抗体固有の依存関係を取り入れるのではなく、モチーフルールとしてリスク要因チェックを直接実装します。溶媒露出度が高いほど重大度が上がります(構造が利用できる場合はSASAで判定します)。
import re
LIABILITIES = {
"deamidation": (r"N[GSNTH]", "NG/NS high, NN/NT moderate"),
"isomerization": (r"D[GSTDH]", "Asp isomerization"),
"N-glycosylation": (r"N[^P][ST]", "NxS/T sequon"),
"polybasic": (r"[KR]{3,}", "proteolysis / charge patch"),
"hydrophobic_run": (r"[AILMFWVY]{6,}", "aggregation"),
}
def scan_liabilities(seq):
hits = {}
for name, (pattern, note) in LIABILITIES.items():
positions = [m.start() for m in re.finditer(pattern, seq)]
if positions:
hits[name] = (positions, note)
# Unpaired cysteine check
if seq.count("C") % 2 == 1:
hits["unpaired_cysteine"] = ([seq.index("C")], "odd cysteine count")
return hits
MetとTrpの酸化もリスク要因ですが、残基が溶媒に露出している場合に限ってフラグを付けてください。
順次フィルタリングのパイプライン
import pandas as pd
designs = pd.read_csv('designs.csv')
# Stage 1: Structural confidence
designs = designs[designs['pLDDT'] > 0.85]
# Stage 2: Self-consistency
designs = designs[designs['scRMSD'] < 2.0]
# Stage 3: Binding quality
designs = designs[(designs['ipTM'] > 0.5) & (designs['PAE_interaction'] < 10)]
# Stage 4: Sequence plausibility
designs = designs[designs['esm2_pll_normalized'] > 0.0]
# Stage 5: Expression checks (design-level)
designs = designs[designs['cysteine_count'] % 2 == 0] # Even cysteines
designs = designs[designs['instability_index'] < 40]
複合スコアリング(ランキングに必須)
個々の指標だけでは不十分です。複合スコアリングを使用してください。
def composite_score(row):
return (
0.30 * row['pLDDT'] +
0.20 * row['ipTM'] +
0.20 * (1 - row['PAE_interaction'] / 20) +
0.15 * row['shape_complementarity'] +
0.15 * row['esm2_pll_normalized']
)
designs['score'] = designs.apply(composite_score, axis=1)
top_designs = designs.nlargest(100, 'score')
高度な複合スコアリングについては、references/composite-scoring.mdを参照してください。
ツール固有のフィルタリング
BindCraftのフィルターレベル
| レベル | 用途 | 厳格さ |
|---|---|---|
| デフォルト | 標準的な設計 | 最も厳格 |
| 緩和 | より多くの設計が必要な場合 | 失敗率が高い |
| ペプチド | 30 AA未満の設計 | 成功率が約5~10分の1 |
BoltzGenのフィルタリング
boltzgen run ... \
--budget 60 \
--alpha 0.01 \
--filter_biased true \
--refolding_rmsd_threshold 2.0 \
--additional_filters 'ALA_fraction<0.3'
alpha=0.0:品質のみでランキングalpha=0.01:デフォルト(多様性をわずかに考慮)alpha=1.0:多様性のみ
設計レベルの重大度スコアリング
パターンベースのチェックでは、重大度をスコアリングします。
| 重大度レベル | スコア | 対応 |
|---|---|---|
| 低 | 0~15 | 続行 |
| 中 | 16~35 | フラグが付いた問題を確認 |
| 高 | 36~60 | 再設計を推奨 |
| 重大 | 61以上 | 再設計が必要 |
実験結果との相関
| 指標 | AUC | 用途 |
|---|---|---|
| ipTM | 約0.64 | 事前スクリーニング |
| PAE | 約0.65 | 事前スクリーニング |
| ESM2 PLL | 約0.72 | 単独指標として最良 |
| 複合指標 | 約0.75以上 | 必ず使用 |
重要な知見:指標は成功例を予測(ランキング)するものではなく、失敗例を除外するフィルターとして機能します。
キャンペーンの健全性評価
設計キャンペーンを手早く評価します。
| 合格率 | 状態 | 解釈 |
|---|---|---|
| > 15% | 優秀 | 平均以上。続行 |
| 10~15% | 良好 | 通常。続行 |
| 5~10% | 境界域 | 平均以下。問題を確認 |
| < 5% | 不良 | 重大な問題あり。原因を特定 |
失敗時の復旧ツリー
pLDDTフィルターの合格数が少なすぎる(pLDDT > 0.85の合格率が5%未満)
Low pLDDT across campaign
├── Check scRMSD distribution
│ ├── High scRMSD (>2.5Å): Backbone issue
│ │ └── Fix: Regenerate backbones with lower noise_scale (0.5-0.8)
│ └── Low scRMSD but low pLDDT: Disordered regions
│ └── Fix: Check design length, simplify topology
├── Try more sequences per backbone
│ └── modal run modal_ligandmpnn.py --input-pdb bb.pdb --params-str "--number_of_batches 32 --temperature 0.1"
├── Use SolubleMPNN instead of ProteinMPNN
│ └── Better for expression-optimized sequences
└── Consider different design tool
└── BindCraft (integrated design) may work better
ipTMフィルターの合格数が少なすぎる(ipTM > 0.5の合格率が5%未満)
Low ipTM across campaign
├── Review hotspot selection
│ ├── Are hotspots surface-exposed? (SASA > 20Ų)
│ ├── Are hotspots conserved? (check MSA)
│ └── Try 3-6 different hotspot combinations
├── Increase binder length (more contact area)
│ └── Try 80-100 AA instead of 60-80 AA
├── Check interface geometry
│ ├── Is target flat? → Try helical binders
│ └── Is target concave? → Try smaller binders
└── Try all-atom design tool
└── BoltzGen (all-atom, better packing)
scRMSDが高い(scRMSD > 2.0Åの設計が50%超)
Sequences don't specify intended structure
├── ProteinMPNN issue
│ ├── Lower temperature: --sampling_temp "0.1"
│ ├── Increase sequences: --num_seq_per_target 32
│ └── Check fixed_positions aren't over-constraining
├── Backbone geometry issue
│ ├── Backbones may be unusual/strained
│ ├── Regenerate with lower noise_scale (0.5-0.8)
│ └── Reduce diffuser.T to 30-40
└── Try different sequence design
└── ColabDesign (AF2 gradient-based) may work better
すべて合格するが、実験でヒットが得られない
In silico metrics don't predict affinity
├── Generate MORE designs (10x current)
│ └── Computational metrics have high false positive rate
├── Increase diversity
│ ├── Higher ProteinMPNN temperature (0.2-0.3)
│ ├── Different backbone topologies
│ └── Different hotspot combinations
├── Try different design approach
│ ├── BindCraft (different algorithm)
│ ├── ColabDesign (AF2 hallucination)
│ └── BoltzGen (all-atom diffusion)
└── Check if target is druggable
└── Some targets are inherently difficult
合格する設計が多すぎる(50%超)
Suspiciously high pass rate
├── Check if thresholds are too lenient
│ └── Use stringent thresholds: pLDDT > 0.90, ipTM > 0.60
├── Verify prediction quality
│ ├── Are predictions actually running? Check output files
│ └── Are complexes being predicted, not just monomers?
├── Check for data issues
│ ├── Same sequence being predicted multiple times?
│ └── Wrong FASTA format (missing chain separator)?
└── Apply diversity filter
└── Cluster at 70% identity, take top per cluster
診断コマンド
キャンペーンの簡易評価
import pandas as pd
df = pd.read_csv('designs.csv')
# Pass rates at each stage
print(f"Total designs: {len(df)}")
print(f"pLDDT > 0.85: {(df['pLDDT'] > 0.85).mean():.1%}")
print(f"ipTM > 0.50: {(df['ipTM'] > 0.50).mean():.1%}")
print(f"scRMSD < 2.0: {(df['scRMSD'] < 2.0).mean():.1%}")
print(f"All filters: {((df['pLDDT'] > 0.85) & (df['ipTM'] > 0.5) & (df['scRMSD'] < 2.0)).mean():.1%}")
# Identify top issue
if (df['pLDDT'] > 0.85).mean() < 0.1:
print("ISSUE: Low pLDDT - check backbone or sequence quality")
elif (df['ipTM'] > 0.50).mean() < 0.1:
print("ISSUE: Low ipTM - check hotspots or interface geometry")
elif (df['scRMSD'] < 2.0).mean() < 0.5:
print("ISSUE: High scRMSD - sequences don't specify backbone")