Function prediction evaluation projects: cross-project review (2026-09-26)

Function prediction evaluation projects: cross-project review (2026-09-26)

Back to the Function Prediction Evaluation index

This page reviews the projects listed in the function-prediction index:
ProtNLM2, BioReason-Pro / GO-GPT,
DeepECTransformer / E. coli,
Affinage and TreeGrafter. It also covers the index
page itself and the shared *-predictions-review.yaml / prediction-browser infrastructure.

The review was AI-generated (Claude Code). Parallel reviewer agents recomputed the headline numbers
from each project's sidecars and per-gene YAMLs, checked relative links, ran schema validation, and
spot-checked individual calls against the gene reviews. The review changed no project content.
Findings are listed with file:line so they can be acted on.

Status of fixes (updated 2026-10-04)

Each project page now states the commit its results were computed at and the command that reproduces them.
ProtNLM2 and BioReason numbers are read at main's frozen review_snapshot_commit. TreeGrafter and Affinage
were regenerated at dated branch tips after the initial audit; the latest TreeGrafter
refresh is commit f81b9f300 on 2026-10-03.

The issue list and per-project findings below preserve the 2026-09-26 audit;
the fixes above supersede findings where the same problem is listed as fixed.
Still open, with each item recorded on its project page:

Overall verdict

The infrastructure is in good shape:

The weaknesses are methodological:

None of the pages currently overstate numbers relative to their data. Several overstate what the
numbers mean.

Cross-cutting issues

  1. State the reference standard (all projects). Agent reviews as the reference are the design:
    the aim is to check, within each tool's own corpus, whether its outputs are biologically
    meaningful by the project's curation rules. Each page should say what its reference is and
    that it was fixed before scoring. (Revised 2026-10-01; the original wording called this
    "circular or non-independent ground truth", which overstated it.)
    Two real issues remain:
  2. Affinage FA-cohort reviews were built with Affinage input, then used to grade Affinage
    recall. That is ordinary bias, now reported separately.
  3. The TreeGrafter OpenScientist/Falcon exemplars came only from already down-graded rows,
    with no accepted-annotation controls, so they cannot support a reliability claim.

A small human-rated subset would still be useful to calibrate the agent ratings.
2. COR/CNN measure GOA sparsity, not model novelty.
- ProtNLM COR is defined against the target's cached GOA. As a result, horse is 37% COR while
pombe, Neurospora and fly are about 0%. Roughly 16 of 53 COR calls are generic terms entailed
by an existing MF or domain.
- BioReason re-labelled 61 calls to CNN in a current-snapshot audit, 25 of them from COR.

Novelty should be judged against a GOA release at the model's training cutoff, or COR should be
renamed "not in target GOA" and reported per cohort.
3. Failure-mode taxonomies are anecdotal.
- BioReason: 62/147 discordant ARGO95 terms have no error_type, and LOCALIZATION_DEFAULT is
tagged only 4 times, yet the page calls it "systematic".
- Affinage: some "wrong branch" examples contradict our own core_functions.

Report mode counts with denominators.
4. Snapshot drift.
- TreeGrafter: re-running the analysis on HEAD changes 63 actions. 48 of the 306 down-grades are
no longer down-graded, which invalidates two hotspot families.
- ProtNLM: the OpenScientist adjudication report disagrees with about 20 current YAML calls.
- Affinage: recall re-runs give 137 genes at 47%, not 91 at 52%.

Each results section should name the commit it was computed at and a command that reproduces it.
5. Two public views of the same predictions disagree (DeepECTF).
deepectf-eval.html is rendered from the blinded recapitulation copies. That experiment matched
the production calls on only 4/7 genes. The prediction browser shows the production calls.
Neither page says which is which.
6. Generated evaluation tables are not built in CI. render-bioreason-eval
(project.justfile:1532) is not part of build-pages, so sft-eval, gogpt-eval and
deepectf-eval.html refresh only by hand.

Per-project findings

ProtNLM2 (page)

BioReason-Pro / GO-GPT (page)

DeepECTransformer / E. coli (page)

Gene Accession b-number
ygfF P52037 b2902 (page says b2878)
yciO P0AFR4 b1267 (page says b1282)
yegV P76419
yjhQ P39368
yrhB P46857
yjdM P0AFJ1
fepE P26266

Affinage (page)

TreeGrafter (page)

Index and shared infrastructure (index)

Category Claims
UNC 104
LSP 83
COR 54
CNN 32
NPI 19
PLI 2
REP 1

Prioritized actions

  1. Quick, mechanical fixes:
  2. E. coli accession and b-number table; ygfF locus_tag.
  3. ProtNLM overlap-table cells.
  4. BioReason "0-1/5" scale error and the eight-vs-nine mode count.
  5. TreeGrafter "five exemplars" and "same 510 proteins".
  6. Relabel deepectf-eval.html as the blinded recap and retitle it.
  7. Refresh drifted snapshots, pinned to a commit: TreeGrafter (re-run plus re-curation of the
    flipped rows), Affinage recall (commit the gene list; report FA separately), and reconciliation
    of the ProtNLM OpenScientist report.
  8. Add a standard "reference standard and leakage" section to each project: name who made
    the reference, whether the evaluated tool's output was visible to them, and the GOA snapshot
    used for novelty.
  9. Replace anecdotal failure modes with counted ones, with denominators, and fix the
    mis-attributed examples (aprE, Spy, PKM, RASA1, KEAP1, HMOX1, ADAR2).
  10. Build render-bioreason-eval in CI; archive generate_prediction_reviews.py; commit the
    trimmed Affinage cache.
  11. Extend the index with the missing projects.
  12. Longer term: have a human rate a small shared subset across the BioReason, ProtNLM and
    TreeGrafter evaluations, so that agreement with the agent reviews can be quoted.