Scoring Methodology
This page documents how hypotheses are ranked, why the formulas are designed the way they are, and what the known limitations are. It updates with each formula revision.
June 5, 2026
Active Formulav1.1
N = 1 / (1 + ln(1 + p))p = existing B–C papers on PubMed. 0 papers → 1.000 · 1 paper → ≈0.591 · 10 papers → ≈0.330 · 100 papers → ≈0.177
S = 1 − 1 / (1 + √(ln(1+B↔A) × ln(1+C↔A)))Log-compress each side first, then geometric mean. If either side is zero, S = 0. Symmetric cases produce the same output as v1.0.
H = 0.5 × N + 0.5 × SEqual-weighted average. Both N and S are bounded [0, 1], so H is also [0, 1].
Strategic Goal▾
The scoring system answers a specific question: which drug–disease hypotheses are both well-evidenced through a bridge mechanism and genuinely unexplored?
This is not the same as finding total evidence (most papers mentioning both concepts), nor is it purely about finding balanced evidence (equal support on both sides). The goal is closer to:
- –Both sides must be credible. A bridge with 200 B↔A papers and 0 C↔A papers is not a lead — one side of the triangle doesn't exist.
- –The B–C connection must not already exist in print. If a drug–disease pair is already well-studied, it isn't undiscovered knowledge.
- –Evidence is subject to diminishing returns. The jump from 0 to 1 paper is enormous. The jump from 100 to 101 is nearly noise.
These three constraints shape every formula choice below.
Novelty Score▾
N = 1 / (1 + ln(1 + p))Where p is the number of PubMed papers that already study the disease–compound pair directly (B–C). Verified via live PubMed query.
Why this shape
The log applies diminishing returns to the penalty for existing literature. A hypothesis with 1 existing paper is substantially less novel than one with 0. But the difference between 100 and 200 papers is almost irrelevant — both are well-studied. Using raw p in the denominator would treat 100 papers as 100× worse than 1 paper, which overcorrects.
The output is bounded (0, 1]. It reaches exactly 1.0 only when no existing B–C literature exists.
Behavior
| B–C papers (p) | Novelty (N) | Interpretation |
|---|---|---|
| 0 | 1.000 | Completely unexplored |
| 1 | ≈ 0.591 | One paper exists |
| 5 | ≈ 0.407 | A handful of studies |
| 10 | ≈ 0.330 | Small literature |
| 50 | ≈ 0.213 | Modest coverage |
| 100 | ≈ 0.177 | Well-studied |
| 1 000 | ≈ 0.118 | Extensively studied |
Strength Score▾
S = 1 − 1 / (1 + √(ln(1+B↔A) × ln(1+C↔A)))Where B↔A is the number of distinct publications supporting the disease–bridge link and C↔A is the number supporting the compound–bridge link.
Why log-compress each side first
In v1.0 the log was applied after the geometric mean: ln(1 + √(B×C)). This accidentally rescued lopsided triangles — a bridge with B↔A = 2, C↔A = 100 produced √200 ≈ 14.1, then the log compressed that to roughly the same as a balanced (10, 10) case.
v1.1 applies ln to each side independently first, then takes the geometric mean of the compressed values. A single well-studied side cannot compensate for a weak other side. Zero-collapse is preserved: ln(1+0) = 0 collapses S to 0.
For symmetric cases (B↔A = C↔A), v1.0 and v1.1 produce identical output — the formulas are mathematically equivalent when both sides are equal.
Behavior
| B↔A / C↔A | Strength (S) | Note |
|---|---|---|
| 0 / any | 0.000 | One side missing — no bridge |
| 1 / 1 | ≈ 0.41 | Minimal bilateral support (same as v1.0) |
| 5 / 5 | ≈ 0.64 | Modest balanced evidence (same as v1.0) |
| 10 / 10 | ≈ 0.71 | Solid balanced bridge (same as v1.0) |
| 2 / 100 | ≈ 0.69 | Lopsided — correctly below 10/10 (was ≈ 0.73 in v1.0) |
| 50 / 50 | ≈ 0.80 | Strong bilateral support (same as v1.0) |
| 100 / 100 | ≈ 0.82 | Very well-evidenced (same as v1.0) |
The lopsided case (2 / 100) now scores ≈ 0.69, below the balanced 10/10 (≈ 0.71) as intended. In v1.0 it incorrectly scored ≈ 0.73 — higher than 10/10.
Combined Score▾
H = 0.5 × N + 0.5 × SA simple equal-weighted average of Novelty and Strength. Both are bounded to [0, 1], so H is also bounded to [0, 1].
Why equal weights
The 0.5 / 0.5 split is a deliberate starting point, not a calibrated value. It encodes the view that being undiscovered matters as much as being well-evidenced. A hypothesis that scores perfectly on strength but has 500 existing papers is not novel discovery — it's a database confirmation. The weights have not yet been tuned against real-world validated discoveries.
What ranks highest
- –B–C pair with zero existing literature (N = 1.0) and strong bilateral bridge evidence
- –Bridges where both the disease side and the compound side have meaningful, independent publication support
- –Compounds not yet associated with the disease in any published study
Known Limitations▾
Residual distributional bias between B↔A and C↔A
Disease–mechanism (B↔A) links are systematically better-studied than drug–mechanism (C↔A) links in biomedical literature. The v1.1 per-side log compression reduces this bias — sparse C↔A edges are no longer as catastrophically penalized as in v1.0 — but it does not eliminate it. A drug that legitimately acts on a well-known disease mechanism but hasn't been studied mechanistically will still score lower than a less relevant drug with more C↔A papers.
Planned fix: normalize each edge count against its global distribution before combining.
Combined score weights are not empirically calibrated
The 0.5 / 0.5 split between Novelty and Strength has not been validated against known drug-repurposing successes. It is possible that novelty deserves higher weight (since the tool's core value is surfacing unexplored connections), or that strength deserves more weight to filter noise. Calibration requires a ground-truth set of verified Swanson-type discoveries.
Edge counts are not predicate-filtered
B↔A and C↔A counts include all predication types (CAUSES, TREATS, INHIBITS, ASSOCIATED_WITH, etc.). A disease that is only negatively associated with a bridge mechanism, or a drug that only inhibits it, may score identically to a directly therapeutic connection. Predicate weighting or filtering is not applied in v1.1.
Formula Changelog▾
- current
Strength formula: log compression moved inside the geometric mean
- –
Strength: 1 − 1 / (1 + √(ln(1+B↔A) × ln(1+C↔A))) — log-compress each side first, then geometric mean - –
Fix: lopsided triangles (e.g. B↔A=2, C↔A=100) now score correctly below a balanced equivalent - –
Symmetric cases: output identical to v1.0 — only lopsided hypotheses are affected - –
Novelty and Combined formulas unchanged
- –
Initial production scoring system
- –
Novelty: 1 / (1 + ln(1 + p)) — log-compressed inverse of B–C paper count - –
Strength: 1 − 1 / (1 + ln(1 + √(B↔A × C↔A))) — log applied after geometric mean (known limitation) - –
Combined: 0.5 × Novelty + 0.5 × Strength — equal-weighted linear combination
- –