can you predict HIV neutralization from sequence?
CATNAP is the public database of how well HIV antibodies neutralize different strains of the virus. the question: from sequence alone, can a model predict whether a given antibody will neutralize a given strain? it matters because measuring every pair in a lab is slow.
CATNAP, LANL release 2026-10-01 โ 80,340 antibody-virus pairs, 715 antibodies, 2,734 viruses. leak-free splits, seed 42. every chart below is drawn from the result files in this repo; hover any point for its numbers.
1. the strong numbers were leakage
CATNAP holds many rows per antibody. split those rows at random and the same antibodies land in both training and test, so a model scores well just by recognising ones it has already seen. hold whole antibodies out and the same fine-tuned model drops to chance. a second bug looked like a training "collapse": in fp16 the model overflowed to NaN and never trained at all. bfloat16 fixed it.
show the numbers
| model / split | AUROC |
|---|---|
| ankh fine-tune ยท random split | 0.892 |
| ankh fine-tune ยท split by antibody | 0.498 |
| best leak-free model (ESM-2 + GBM) | 0.714 |
2. the bigger the model, the worse the part that matters
pooled scores mostly measure how broadly an antibody works and how fragile a strain is. the harder question is specificity: for one unseen antibody, which strains does it neutralize? scored that way, on novel antibodies and novel viruses, the end-to-end fine-tune lands exactly on chance, while simple interpretable features โ V-gene, CDR3, mutation load, Env alignment โ do best.
show the numbers
| approach | within-antibody AUROC |
|---|---|
| germline + alignment features (RF) | 0.644 |
| frozen ESM-2 650M + cross-attention | 0.514 |
| ESM-2 650M, LoRA fine-tuned | 0.500 |
3. where added features did beat the standard recipe
on the task the field actually uses โ a known antibody, a new strain โ i compared the usual recipe (an ESM-2 embedding of Env, one random forest per antibody) against the same thing plus explicit glycan-shield and alignment features. same antibodies, same folds, same metric. it was better on 202 of 234 antibodies, median AUC 0.635 to 0.673 (Wilcoxon p = 2.4 ร 10-31).
show the numbers
| antibody | epitope | viruses | ESM-2 only | with features | change |
|---|---|---|---|---|---|
| EN02_01_D03 | other | 235 | 0.597 | 0.781 | +0.185 |
| PGT145 | V2 apex | 752 | 0.639 | 0.782 | +0.143 |
| VRC41.01 | V3 glycan | 202 | 0.694 | 0.824 | +0.131 |
| PG9RSH N(100f)Y | V2 apex | 195 | 0.587 | 0.706 | +0.119 |
| EN02_05_B08 | other | 234 | 0.621 | 0.739 | +0.118 |
| BG18 | V3 glycan | 374 | 0.807 | 0.923 | +0.116 |
| VRC08 | other | 196 | 0.621 | 0.732 | +0.111 |
| PC39-55C | other | 123 | 0.501 | 0.608 | +0.107 |
| PC39-23A | other | 123 | 0.530 | 0.629 | +0.098 |
| 10-1074 | V3 glycan | 1111 | 0.846 | 0.944 | +0.098 |
| PG9 | V2 apex | 1018 | 0.748 | 0.845 | +0.097 |
| DH270.6 | V3 glycan | 207 | 0.750 | 0.847 | +0.096 |
| DH270.1 | V3 glycan | 223 | 0.714 | 0.810 | +0.096 |
| VRC02 | other | 201 | 0.574 | 0.668 | +0.094 |
| 8ANC195 | interface | 244 | 0.705 | 0.798 | +0.093 |
| VRC01 | CD4bs | 1706 | 0.788 | 0.880 | +0.092 |
| PG16 | V2 apex | 734 | 0.704 | 0.794 | +0.091 |
| EN01_007 | other | 220 | 0.668 | 0.758 | +0.090 |
| VRC-CH31 | CD4bs | 368 | 0.664 | 0.752 | +0.088 |
| DH270.5 | V3 glycan | 209 | 0.731 | 0.818 | +0.087 |
| DH270min1 | V3 glycan | 202 | 0.712 | 0.799 | +0.087 |
| N49P18.1 | other | 113 | 0.536 | 0.623 | +0.086 |
| PGT128 | V3 glycan | 663 | 0.756 | 0.841 | +0.086 |
| 10-996 | other | 117 | 0.837 | 0.920 | +0.083 |
| PG9RSH DU025 | V2 apex | 202 | 0.653 | 0.736 | +0.083 |
| PC39-17A | other | 122 | 0.556 | 0.638 | +0.082 |
| PGT121 | V3 glycan | 1528 | 0.811 | 0.891 | +0.080 |
| PC39-50G | other | 123 | 0.590 | 0.668 | +0.078 |
| DH270min11 | V3 glycan | 205 | 0.749 | 0.827 | +0.078 |
| PGDM1400 | V2 apex | 1258 | 0.825 | 0.901 | +0.076 |
| PGT143 | V2 apex | 150 | 0.600 | 0.676 | +0.075 |
| PGDM12 | other | 133 | 0.726 | 0.799 | +0.073 |
| VRC-PG04 | CD4bs | 310 | 0.607 | 0.681 | +0.073 |
| PGT145 DU303 | V2 apex | 202 | 0.656 | 0.728 | +0.072 |
| 2411a | other | 202 | 0.585 | 0.654 | +0.069 |
| PC39-28C | other | 123 | 0.616 | 0.685 | +0.069 |
| b13 | other | 177 | 0.618 | 0.686 | +0.068 |
| GPZ6-a.01 | other | 202 | 0.655 | 0.722 | +0.068 |
| PC39-39B | other | 124 | 0.570 | 0.636 | +0.067 |
| PGT142 | V2 apex | 219 | 0.578 | 0.644 | +0.066 |
| PGT130 | V3 glycan | 226 | 0.643 | 0.709 | +0.066 |
| 10E8 IgG mutant 5 | MPER | 106 | 0.511 | 0.577 | +0.066 |
| vFP53.02 | fusion peptide | 201 | 0.383 | 0.448 | +0.065 |
| N49P23 | other | 113 | 0.593 | 0.658 | +0.065 |
| 1C2-rabbit | other | 193 | 0.575 | 0.639 | +0.064 |
| 4E10 | MPER | 996 | 0.759 | 0.822 | +0.063 |
| SF5 | other | 124 | 0.660 | 0.722 | +0.062 |
| DF1W-a.01 | other | 200 | 0.560 | 0.622 | +0.061 |
| VRC26.25 | V2 apex | 551 | 0.772 | 0.833 | +0.061 |
| MinVRC01 | CD4bs | 127 | 0.590 | 0.651 | +0.060 |
| E51 | other | 160 | 0.623 | 0.682 | +0.060 |
| PGDM21 | other | 132 | 0.756 | 0.814 | +0.059 |
| 0PV-c.01 | other | 202 | 0.541 | 0.599 | +0.058 |
| 3BNC55 | CD4bs | 115 | 0.536 | 0.594 | +0.058 |
| IOMA-HC-DDE | other | 122 | 0.530 | 0.587 | +0.057 |
| 3BC315 | other | 199 | 0.577 | 0.634 | +0.057 |
| VRC24 | other | 200 | 0.518 | 0.575 | +0.057 |
| V033-a.01 | other | 233 | 0.601 | 0.657 | +0.056 |
| PC39-23D | other | 122 | 0.603 | 0.659 | +0.055 |
| PCDN-38B | other | 128 | 0.603 | 0.659 | +0.055 |
| ElsE2 | other | 101 | 0.647 | 0.703 | +0.055 |
| PGT126 | V3 glycan | 378 | 0.747 | 0.802 | +0.055 |
| VRC26.08 | V2 apex | 343 | 0.771 | 0.826 | +0.055 |
| AIIMS-P01 | other | 91 | 0.726 | 0.779 | +0.053 |
| PCIN71I1a | other | 129 | 0.556 | 0.608 | +0.052 |
| PC39-50K | other | 123 | 0.535 | 0.586 | +0.051 |
| VRC46.01 | other | 199 | 0.777 | 0.826 | +0.050 |
| 0PV-a.01 | other | 202 | 0.463 | 0.512 | +0.050 |
| HERH-a.01 | other | 202 | 0.681 | 0.731 | +0.049 |
| PGT135 | V3 glycan | 310 | 0.735 | 0.785 | +0.049 |
| 3BNC117 | CD4bs | 1409 | 0.846 | 0.895 | +0.049 |
| VRC42.02 | MPER | 202 | 0.558 | 0.607 | +0.049 |
| VRC38.01 | V2 apex | 235 | 0.581 | 0.629 | +0.048 |
| DH270min12 | V3 glycan | 202 | 0.629 | 0.677 | +0.048 |
| 0PV-b.01 | other | 202 | 0.556 | 0.604 | +0.048 |
| GPZ6-b.01 | other | 202 | 0.603 | 0.651 | +0.048 |
| VRC03 | CD4bs | 359 | 0.723 | 0.771 | +0.048 |
| ACS202 | fusion peptide | 229 | 0.611 | 0.658 | +0.048 |
| VRC18 | other | 170 | 0.631 | 0.678 | +0.047 |
| VRC07 | CD4bs | 477 | 0.661 | 0.708 | +0.047 |
| DJ85-a.01 | other | 202 | 0.641 | 0.688 | +0.047 |
| vFP16.02 | fusion peptide | 193 | 0.508 | 0.554 | +0.046 |
| DH796.1 | other | 291 | 0.609 | 0.655 | +0.045 |
| vFP20.01 | fusion peptide | 202 | 0.563 | 0.608 | +0.045 |
| F105 | other | 208 | 0.557 | 0.603 | +0.045 |
| VRC07-523-LS | CD4bs | 902 | 0.802 | 0.847 | +0.045 |
| VRC34.01 | fusion peptide | 340 | 0.731 | 0.775 | +0.044 |
| VRC26.03 | V2 apex | 192 | 0.691 | 0.734 | +0.044 |
| PCDN-33A | other | 128 | 0.630 | 0.674 | +0.044 |
| PGT123 | V3 glycan | 165 | 0.774 | 0.816 | +0.042 |
| RHA1.V2.01 | other | 202 | 0.567 | 0.609 | +0.042 |
| PCT64-35M | V2 apex | 228 | 0.667 | 0.708 | +0.041 |
| PCIN77D | other | 129 | 0.416 | 0.457 | +0.041 |
| DH727.2 | other | 291 | 0.559 | 0.600 | +0.041 |
| ElsE1 | other | 101 | 0.666 | 0.706 | +0.040 |
| DFPH-a.01 | fusion peptide | 202 | 0.716 | 0.756 | +0.040 |
| VRC34.01_mm28 | fusion peptide | 202 | 0.620 | 0.660 | +0.040 |
| VRC43.01 | other | 203 | 0.681 | 0.720 | +0.039 |
| PC39-28E | other | 123 | 0.653 | 0.692 | +0.039 |
| PGDM11 | other | 105 | 0.662 | 0.700 | +0.039 |
| 8ANC134 | other | 168 | 0.644 | 0.682 | +0.039 |
| LJF-0085 | other | 82 | 0.721 | 0.760 | +0.038 |
| CH103 | other | 237 | 0.718 | 0.756 | +0.038 |
| PC39-50I | other | 123 | 0.638 | 0.676 | +0.038 |
| TRNM-b.01 | other | 202 | 0.697 | 0.735 | +0.038 |
| DFPH-a.03 | fusion peptide | 202 | 0.672 | 0.709 | +0.037 |
| J601-1B2 | other | 202 | 0.760 | 0.797 | +0.037 |
| PCT64-35S | V2 apex | 118 | 0.567 | 0.604 | +0.037 |
| LJF-0034 | other | 82 | 0.747 | 0.784 | +0.036 |
| PCDN-38A | other | 128 | 0.701 | 0.737 | +0.036 |
| N49P9.1 | other | 113 | 0.645 | 0.680 | +0.035 |
| DH851.1 | other | 124 | 0.676 | 0.711 | +0.035 |
| RHA10.04 | other | 121 | 0.492 | 0.527 | +0.035 |
| VRC26.09 | V2 apex | 183 | 0.766 | 0.801 | +0.035 |
| gVRC-H1dC38/VRC01L | CD4bs | 149 | 0.637 | 0.671 | +0.034 |
| PCT64-35O | V2 apex | 117 | 0.494 | 0.528 | +0.034 |
| PC39-55D | other | 124 | 0.605 | 0.639 | +0.034 |
| vFP49.02 | fusion peptide | 199 | 0.682 | 0.715 | +0.033 |
| M1214_N2.2 | other | 116 | 0.762 | 0.795 | +0.033 |
| PGZL1_gVmDmJ | other | 125 | 0.624 | 0.657 | +0.033 |
| 2F5 | MPER | 928 | 0.914 | 0.947 | +0.033 |
| VRC26.26 | V2 apex | 231 | 0.705 | 0.738 | +0.033 |
| CH03 | V2 apex | 104 | 0.829 | 0.861 | +0.032 |
| PC39-61A | other | 126 | 0.515 | 0.547 | +0.032 |
| PC39-61B | other | 126 | 0.583 | 0.616 | +0.032 |
| VRC34-pI4 | fusion peptide | 201 | 0.616 | 0.648 | +0.032 |
| CH04 | V2 apex | 194 | 0.711 | 0.743 | +0.032 |
| PCT64-35B | V2 apex | 117 | 0.574 | 0.605 | +0.031 |
| 447-52D | other | 312 | 0.729 | 0.760 | +0.031 |
| 2G12 | V3 glycan | 774 | 0.824 | 0.855 | +0.031 |
| IOMA | other | 231 | 0.626 | 0.657 | +0.031 |
| VRC26.27 | V2 apex | 192 | 0.652 | 0.682 | +0.030 |
| vFP52.02 | fusion peptide | 199 | 0.572 | 0.602 | +0.030 |
| VRC40.02 | other | 202 | 0.587 | 0.616 | +0.029 |
| PCT64-24F | V2 apex | 118 | 0.659 | 0.688 | +0.029 |
| VRC34-pI3 | fusion peptide | 202 | 0.679 | 0.708 | +0.029 |
| M1214_N1 | other | 116 | 0.716 | 0.743 | +0.027 |
| PCT64-24E | V2 apex | 115 | 0.757 | 0.784 | +0.027 |
| VRC06 | other | 179 | 0.538 | 0.564 | +0.027 |
| PGT151 | interface | 435 | 0.785 | 0.811 | +0.026 |
| VRC06b | other | 225 | 0.715 | 0.741 | +0.026 |
| VRC-PG05 | other | 245 | 0.650 | 0.676 | +0.026 |
| ACS117 | other | 119 | 0.670 | 0.696 | +0.026 |
| Bess4 | other | 101 | 0.697 | 0.723 | +0.025 |
| DFPH-a.15 | fusion peptide | 202 | 0.712 | 0.737 | +0.025 |
| G70W-2E9 | other | 202 | 0.587 | 0.612 | +0.025 |
| V031-a.01 | other | 122 | 0.630 | 0.654 | +0.025 |
| PGT127 | other | 150 | 0.604 | 0.627 | +0.024 |
| PCT64-18D | V2 apex | 119 | 0.631 | 0.655 | +0.024 |
| 12A21 | other | 176 | 0.767 | 0.790 | +0.023 |
| PGT125 | V3 glycan | 151 | 0.533 | 0.556 | +0.023 |
| 17b | other | 290 | 0.775 | 0.798 | +0.022 |
| 41328-a.01 | other | 123 | 0.716 | 0.737 | +0.021 |
| CH235.12 | other | 367 | 0.731 | 0.752 | +0.021 |
| J038 | other | 203 | 0.554 | 0.575 | +0.021 |
| PC39-50L | other | 122 | 0.579 | 0.598 | +0.020 |
| m66.6 | other | 156 | 0.732 | 0.752 | +0.019 |
| NIH45-46 | CD4bs | 341 | 0.648 | 0.668 | +0.019 |
| 2408b | other | 202 | 0.518 | 0.537 | +0.019 |
| HERH-c.01 | other | 202 | 0.638 | 0.657 | +0.019 |
| VRC34.01_Combo1 | fusion peptide | 202 | 0.622 | 0.640 | +0.018 |
| DF1W-a.02 | other | 202 | 0.442 | 0.459 | +0.017 |
| 35O22 | interface | 367 | 0.740 | 0.757 | +0.017 |
| PGT152 | other | 114 | 0.613 | 0.630 | +0.017 |
| CH235.9 | other | 193 | 0.656 | 0.673 | +0.017 |
| M4008_N1 | other | 116 | 0.731 | 0.747 | +0.017 |
| CH01 | V2 apex | 334 | 0.697 | 0.713 | +0.016 |
| M1214_N1.2 | other | 116 | 0.631 | 0.646 | +0.015 |
| Z13e1 | other | 240 | 0.700 | 0.715 | +0.015 |
| vFP48.02 | fusion peptide | 198 | 0.516 | 0.531 | +0.015 |
| VRC23 | CD4bs | 175 | 0.630 | 0.644 | +0.015 |
| vFP7.04 | fusion peptide | 202 | 0.406 | 0.420 | +0.015 |
| RHA10.01 | other | 121 | 0.471 | 0.486 | +0.014 |
| VRC44.01 | other | 209 | 0.580 | 0.594 | +0.014 |
| VRC42.I3 | MPER | 202 | 0.612 | 0.626 | +0.014 |
| 8ANC131 | CD4bs | 179 | 0.564 | 0.577 | +0.014 |
| PCIN71L | other | 129 | 0.510 | 0.523 | +0.013 |
| HJ16 | other | 311 | 0.546 | 0.559 | +0.012 |
| VRC01_FR3-03 | CD4bs | 202 | 0.641 | 0.653 | +0.012 |
| Bess1 | other | 101 | 0.617 | 0.629 | +0.012 |
| VRC-PG20 | other | 177 | 0.681 | 0.693 | +0.012 |
| b12 | CD4bs | 744 | 0.707 | 0.719 | +0.012 |
| DH1317.4 | fusion peptide | 193 | 0.867 | 0.879 | +0.012 |
| IOMAexFACEmin | other | 124 | 0.668 | 0.679 | +0.011 |
| DH851.2 | other | 124 | 0.676 | 0.687 | +0.011 |
| VRC26.01 | V2 apex | 186 | 0.682 | 0.691 | +0.009 |
| M1214_N2 | other | 116 | 0.818 | 0.826 | +0.008 |
| Min12A21 | other | 119 | 0.635 | 0.643 | +0.008 |
| 44715-a.01 | other | 120 | 0.564 | 0.572 | +0.008 |
| PGZL1 | other | 125 | 0.599 | 0.607 | +0.008 |
| IOMAmin3 | other | 124 | 0.590 | 0.597 | +0.007 |
| IOMAmin5 | other | 124 | 0.590 | 0.597 | +0.007 |
| 42056-a.01 | other | 123 | 0.539 | 0.544 | +0.006 |
| VRC13 | CD4bs | 350 | 0.649 | 0.655 | +0.006 |
| CH02 | V2 apex | 196 | 0.709 | 0.714 | +0.005 |
| 2413c | other | 202 | 0.582 | 0.587 | +0.005 |
| ACS114 | other | 119 | 0.836 | 0.840 | +0.004 |
| VRC27 | other | 174 | 0.583 | 0.587 | +0.004 |
| 2413b | other | 202 | 0.489 | 0.492 | +0.003 |
| ACS101 | other | 137 | 0.714 | 0.717 | +0.003 |
| PCT64-35G | V2 apex | 117 | 0.613 | 0.614 | +0.001 |
| PCT64-35D | V2 apex | 117 | 0.604 | 0.605 | +0.000 |
| DH1317.9 | fusion peptide | 136 | 0.835 | 0.834 | -0.001 |
| VRC33.01 | other | 202 | 0.552 | 0.551 | -0.001 |
| VRC44.02 | other | 209 | 0.685 | 0.683 | -0.002 |
| 179NC75 | other | 212 | 0.529 | 0.527 | -0.003 |
| VRC16 | other | 231 | 0.742 | 0.739 | -0.003 |
| NC-Cow1 | other | 125 | 0.552 | 0.548 | -0.004 |
| N49P22 | other | 113 | 0.671 | 0.667 | -0.005 |
| HmAb64 | other | 203 | 0.450 | 0.445 | -0.005 |
| DH753 | other | 291 | 0.553 | 0.548 | -0.005 |
| HGN194 | other | 90 | 0.494 | 0.488 | -0.005 |
| 1B2530 | other | 202 | 0.636 | 0.628 | -0.007 |
| DH851.3 | other | 124 | 0.753 | 0.745 | -0.008 |
| 3074 | other | 344 | 0.535 | 0.526 | -0.009 |
| N49P19 | other | 113 | 0.666 | 0.656 | -0.010 |
| 6561-a.01 | other | 234 | 0.727 | 0.717 | -0.010 |
| vFP7.05 | fusion peptide | 202 | 0.281 | 0.270 | -0.011 |
| LJF-0024 | other | 82 | 0.669 | 0.657 | -0.011 |
| CH235 | other | 198 | 0.630 | 0.618 | -0.012 |
| LJF-0087 | other | 82 | 0.621 | 0.608 | -0.013 |
| 6070-a.01 | other | 123 | 0.686 | 0.672 | -0.014 |
| vFP1.01 | fusion peptide | 201 | 0.496 | 0.480 | -0.016 |
| VRC-PG04b | CD4bs | 173 | 0.620 | 0.603 | -0.017 |
| EPTC112 | other | 118 | 0.471 | 0.453 | -0.019 |
| 40591-a.01 | other | 123 | 0.538 | 0.519 | -0.019 |
| PCIN71G | other | 129 | 0.552 | 0.533 | -0.020 |
| PCIN66B | CD4bs | 129 | 0.632 | 0.609 | -0.023 |
| 2408c.3 | other | 202 | 0.621 | 0.592 | -0.028 |
| 2413a | other | 202 | 0.599 | 0.568 | -0.031 |
| 2219 | other | 89 | 0.663 | 0.627 | -0.036 |
| VRC26.06 | V2 apex | 194 | 0.422 | 0.383 | -0.040 |
| 10E8 | MPER | 1176 | 0.758 | 0.697 | -0.061 |
| 5695-b.01 | other | 122 | 0.512 | 0.441 | -0.071 |
4. the gains land where the mechanism predicts
mean-pooling an ESM-2 embedding washes out the N-glycosylation sites that define several epitope classes. putting those sites back explicitly should help most on the glycan-dependent ones โ and it does. V3-glycan improved on every single antibody.
show the numbers
| epitope class | antibodies | median, ESM-2 only | median, with features | mean gain | improved |
|---|---|---|---|---|---|
| V3 glycan | 17 | 0.747 | 0.818 | +0.075 | 17/17 |
| V2 apex | 31 | 0.659 | 0.713 | +0.045 | 30/31 |
| interface | 3 | 0.740 | 0.798 | +0.045 | 3/3 |
| CD4bs | 18 | 0.645 | 0.670 | +0.035 | 16/18 |
| other | 139 | 0.621 | 0.657 | +0.031 | 114/139 |
| MPER | 6 | 0.685 | 0.661 | +0.027 | 5/6 |
| fusion peptide | 20 | 0.618 | 0.653 | +0.027 | 17/20 |
what i'd claim, and what i wouldn't
predicting which strains a brand-new antibody hits, from sequence alone, is not supported by this data. across everything i tried โ frozen embeddings, fine-tuning, folded structure, censored IC50 regression โ that number sits around 0.68 at best, reached by the simplest interpretable model. scale didn't move it, and the reason is the sample size that counts: 715 antibodies, not 80,000 pairs.
what does hold up: a clean self-sourced dataset with leak-free splits, the measurement showing pooled scores track breadth rather than specificity, and a like-for-like win from glycan and alignment features on the novel-strain task.