METHODOLOGY WHITEPAPER · FOR INSTITUTIONAL COMPLIANCE REVIEW

ORION Scoring Methodology

Every formula, weight, data source, and limitation behind ORION's scores — written to the standard an institutional due-diligence reviewer would require, including the categories that are not yet built and the one backtest that produced a negative result.

Document statusLiving document — reflects the implementation running in production as of this version
OwnerORION Quantitative Research / Engineering
AudienceInstitutional due-diligence reviewers, compliance, engineering
Companion documentsdocs/ORION_BUY_SCORE_SPEC.md, docs/ORION_RISK_SCORE_SPEC.md, docs/CASE_STUDY_2022_BACKTEST.md — the audit-grade source specs this whitepaper summarizes
Weight/threshold verificationChecking against production scoring code…

1. Limitations & Assumptions

Per this document's own audience — an institutional compliance reviewer — the limitations are stated first, not buried at the end.

None of ORION's scores are statistically validated predictive models

Every composite weight described below (Buy Score's 30/20/25/25, Clinical Risk's 40/30/30, Franchise Health's 30/40/30, etc.) is a reasoned allocation — a judgment call about what should matter and how much — not a weight derived from regressing against realized forward returns or outcomes. No component has been backtested to establish predictive accuracy, with the single exception described in Section 6, which returned a negative result and was published rather than suppressed.

ORION Risk Score is a partial composite, most of it still unbuilt

Risk Score is specified as a 10-category composite. As of 2026-08-01, 4 categories are live in production and wired into a real composite: Clinical Risk (20% target weight), Regulatory Risk (15%), Cash Burn Risk (15%, reusing the same SEC EDGAR data as the Cash Runway card), and Competition Risk (10%, a ClinicalTrials.gov cross-search by indication counting late-stage/Phase 3-4 direct competitors — requires a resolved indication, so it's excluded rather than estimated when none is available). The remaining 6 categories (40% of target weight) require data feeds ORION does not currently ingest — IP/litigation, pricing/reimbursement, trial-execution history, manufacturing/CMC, political, and macroeconomic data. A single "Risk Score" number is shown in Prediction History and the Explain modal — renormalized over whichever of the 4 live categories are actually computable for a given company (Regulatory Risk needs an active trial or near-term FDA Calendar match; Cash Burn Risk needs the company to file with the SEC; Competition Risk needs a resolved indication) — always alongside an "N of 10 categories live" disclosure, never presented as the full 10-category picture.

Institutional Confidence is a market-sentiment proxy, not ownership data

Despite the name, this component does not use 13F institutional-ownership filings. It is built from two publicly available market signals — sell-side analyst price-target upside and recent price momentum — as a proxy for what institutional sentiment currently implies. If a structured 13F feed is integrated in the future, this would become a genuine ownership-based measure; until then, treat it as a sentiment proxy.

All scores are point estimates without native confidence intervals

Buy Score's "Confidence" figure is a data-completeness-and-decisiveness index (how much underlying data exists, and how far from a neutral midpoint the score sits) — it is explicitly not a statistical confidence interval, standard error, or credible interval on the score value. No score in this document should be read as having a calibrated probability distribution around it.

General assumption underlying every score: ORION computes scores only from structured, verifiable data (ClinicalTrials.gov, market data providers, SEC EDGAR, published industry base-rate statistics). No score component is ever inferred from unstructured AI-generated narrative, and no missing sub-score is ever silently backfilled with a fabricated value — see each section's "Missing Data Handling" for the specific rule.

2. ORION Buy Score™ ● LIVE

Full specification: docs/ORION_BUY_SCORE_SPEC.md

A 0–100 composite ranking heuristic answering: "Given only public, verifiable data, how attractive is this name right now?" It is not a price target, not a probability of a specific return, and not a substitute for fundamental analysis.

Formula

Buy Score = round( Σ(vᵢ · wᵢ) / Σ(wᵢ)  for every i where vᵢ is defined )
ComponentInputWeight
Pipeline StrengthBreadth + maturity of clinical pipeline30%
Clinical Safety100 − Clinical Risk20%
FDA SuccessBlended historical approval base rate for active trials25%
Institutional ConfidenceAnalyst-target upside + price momentum25%

Renormalization rule: if FDA Success is undefined (zero active trials), it is dropped from both the numerator and denominator — the remaining weights (0.75 total) are used as-is. No component is ever assigned a synthetic default value to keep weights summing to 1.0.

Why these weights

Historical validation

FDA Success base rates (Phase 1→9%, Phase 2→14%, Phase 3→57%, Phase 4/Approved→95%) are drawn from published industry clinical-development-success-rate studies — population base rates, not asset-specific predictions. The composite weighting scheme itself (30/20/25/25) is a reasoned allocation, not backtested against realized forward returns or approval outcomes.

Hard stop

If a company has zero trials and no market data, Buy Score is never computed or displayed — the product shows "Report Generation Stopped" instead of a low-information score built entirely from defaults.

3. ORION Risk Score™ ◐ PARTIALLY LIVE

Full specification: docs/ORION_RISK_SCORE_SPEC.md

A 0–100 composite (higher = riskier) intended to answer: "Across every category of risk that could impair capital, how much hazard is currently visible in structured, verifiable data?" Deliberately separate from Buy Score rather than netted into one number — a name can carry high upside and high risk simultaneously.

#CategoryStatusTarget Weight
1Clinical Risk● LIVE20%
2Regulatory Risk● LIVE (2026-07-13)15%
3Cash Burn Risk● LIVE (2026-07-14)15%
4Competition Risk● LIVE (2026-08-01)10%
5Patent Risk○ PENDING DATA10%
6Commercial Risk○ PENDING DATA10%
7Execution Risk○ PENDING DATA8%
8Manufacturing Risk○ PENDING DATA7%
9Political Risk○ PENDING DATA3%
10Macroeconomic Risk○ PENDING DATA2%

Categories 1–4 (60% of target weight) are computable today and combined into a real Risk Score composite, renormalized over whichever of the four are actually available for a given company — shown in Prediction History and the Explain modal, always alongside an "N of 10 categories live" disclosure. This table is published in full, including the 6 still-pending categories, rather than showing only what's built.

The three live categories

Clinical Risk (20%):
  terminationRate   = (# trials TERMINATED or WITHDRAWN) / (total trials) × 100
  earlyStageRatio   = (# trials in Phase 1 or 2 only) / (total trials) × 100
  concentrationRisk = max(0, 100 − min(100, totalTrials × 12))
  ClinicalRisk = round( terminationRate×0.40 + earlyStageRatio×0.30 + concentrationRisk×0.30 )
  If zero trials: fixed 50 (neutral/unknown, deliberately not 0).

Regulatory Risk (15%):
  approvalRiskComponent = 100 − FDA Success (blended historical phase-approval base rates)
  calendarRiskComponent = FDA Calendar event within 90 days? very_high→90 / high→65 / medium→40 / low→20 : excluded (not 0)
  RegulatoryRisk = weighted average of whichever component(s) are available, 70/30 split

Cash Burn Risk (15%):
  runwayMonths = cashAndEquivalents / quarterlyBurnRate × 3   (SEC EDGAR XBRL, same figure as the Cash Runway card)
  CashBurnRisk = ≥24mo→10 / ≥18mo→30 / ≥12mo→55 / ≥6mo→80 / <6mo→100 / cash-flow positive→10

Clinical Risk is weighted highest (20%) because a terminated trial is a fact, not a proxy. Regulatory and Cash Burn Risk (15% each) are undefined — excluded from the composite, not defaulted — when their respective inputs aren't resolvable for a given company (no active trials/no near-term calendar match; no SEC filing history), per the renormalization rule in Section 1.

Clinical Risk's 40/30/30 internal weighting, and Regulatory Risk's 90/65/40/20 calendar-proximity constants, are reasoned allocations, not regression-fit. No backtest currently correlates any of these figures against realized outcomes — see Section 6 for what happened when this was tested on Buy Score.

4. ORION Franchise Health™ ● LIVE

Shown in place of Buy Score for companies whose most advanced asset is already approved/commercial-stage — a probability-of-approval framing doesn't apply to a drug already on the market. A deliberately different composite, not Buy Score renamed: no approval-probability term, since approval already happened.

Franchise Health = round( LifeCycleDepth×0.30 + InstitutionalConfidence×0.40 + Diversification×0.30 )
ComponentDefinitionWeight
Life-Cycle Pipeline DepthActive non-Phase-4 trials still running behind the approved asset (label expansions, combination studies, follow-ons), capped at 10030%
Institutional ConfidenceReused unchanged from Buy Score — a market-sentiment read is equally valid for a commercial-stage company40%
Portfolio DiversificationDistinct indications addressed, as a proxy for exposure to any single indication's competitive/reimbursement risk30%

Tiers: ≥65 Strong Franchise · ≥45 Stable Franchise · ≥25 Maturing Franchise · <25 At Risk.

5. ORION Institutional Confidence™ ● LIVE

A component reused across both Buy Score and Franchise Health — not derived from 13F institutional-ownership filings (see Section 1's limitation). Built from two public market signals:

Institutional Confidence = round( (analystUpside/20)×60 + (momentum/20)×40 )
TermDefinition
Analyst upsideTiered mapping of (analyst target − current price) / current price. Defaults to neutral midpoint if target data is missing.
MomentumTiered mapping of 3-month stock return. Defaults to neutral midpoint if price data is missing.

If both inputs default to their neutral midpoints (no market data at all), Institutional Confidence resolves to exactly 50 — the deliberate "no signal" value, not a guess in either direction.

6. ORION Impact Chain™ — How a Signal Becomes a Score ◐ PARTIALLY LIVE

Frontend module: js/growth-modules.js (Module 12). Fetches GET /impact-chain, a live backend route in orion_biotech.py as of 2026-07-13. This section answers the question institutional reviewers ask most often about ORION's AI layer: when a step in a causal story sounds plausible, how do you stop that from quietly becoming a number?

For a material Watchtower event, Impact Chain renders the full reasoning path ORION traced from that event to a score: input event → affected entity → … → Score → Thesis Ledger → Watchlist. Each step is a discrete, individually-evidenced node — not a single paragraph of AI narrative. Within records actually returned and indexed through ORION's ClinicalTrials.gov-primary workflow, Impact Chain decides which signals may move a real number and which may only be shown as a labeled hypothesis. This is not a claim of complete registry coverage.

Four confidence tiers, every step tagged

TierMeaningRendering
Verified Causal EffectA disclosed, direct regulatory or ledger fact — not an inference (e.g. a CRL, a Thesis Ledger diff)Solid line, green
Strong InferenceA logical consequence of a verified fact, drawn from ORION's own structured cross-reference (e.g. Discovered's competitor overlap match)Solid line, accent
Weak InferenceA plausible but not independently evidenced connectionDashed line, amber
Speculative PossibilityA hypothesis with no data source behind it — labeled as such, not smoothed overDashed line, gray

The rule that matters most: only two signal types have a live scoring destination today

Everything past Clinical Risk and Institutional Confidence is speculative by construction

As of this version, exactly two upstream signal types resolve to a real, computed ORION score: (1) a clinical-trial-status change flowing into Clinical Risk / Pipeline Strength, which feeds Buy Score, and (2) a price or analyst-target move flowing into Institutional Confidence, which also feeds Buy Score (see Sections 2 and 5). A typical downstream story — competitor pressure eases → market share rises → peak sales rise → valuation rises — has no live scoring destination. Every step past that boundary is always tagged speculative, and its quantitative_impact is forced to null in code, not just by convention. The step is still shown, captioned "No live scoring destination for this step yet" — it is not hidden, only stopped from posing as a computed result.

Two rules are enforced in icTraceEnforceHonesty(), not left to documentation discipline alone: a step with zero evidence entries is dropped from the chain entirely before render; a step tagged speculative has its quantitative_impact field forced to null regardless of what was computed upstream.

Why this boundary exists

ORION's report narrative is generated by two independent tracks: a deterministic scoring engine that owns every number shown in a report, and a separate Claude (Anthropic) call that produces free-text narrative only. The narrative track's prose is never parsed back into a number, score, or recommendation — see docs/ORION_AI_REASONING_ARCHITECTURE.md. Impact Chain's speculative/null-impact rule protects the same boundary at the causal-reasoning layer: an LLM-plausible-sounding multi-step story is not allowed to quietly present itself as a computed figure just because each individual link sounds reasonable.

Status today

As of 2026-07-13, GET /impact-chain is a real, live backend endpoint: enter any real company (and optionally its ticker) and ORION assembles a chain from that company's own clinical-trial and market data, tracing only the two signal types that have an actual computed path today — clinical-trial status → Clinical Risk/Pipeline Strength → Buy Score & Risk Score, and analyst-target/price momentum → Institutional Confidence → Buy Score. A chain produced this way is marked ● TRACED FROM LIVE ORION DATA. What is still not built: a structured knowledge graph that can automatically resolve an arbitrary Watchtower event (or news headline) into a trigger company without the user typing it in, and the Competitors → Revenue → Valuation → rNPV hops, which have no live scoring model to source a number from and stay speculative indefinitely (see the architecture notes at the bottom of js/growth-modules.js). Because that event-resolution step is missing, the Watchtower "Trace Impact →" shortcut still shows an illustrative reference chain, clearly marked DEMO PREVIEW, using a fictional company (Kestrel Genomics) rather than real trial data. Impact Chain is gated to Fund and Enterprise tier accounts, enforced both client-side and server-side.

See this mechanism worked through end-to-end on a real regulatory event: How ORION Analyzes a Live Catalyst — the REGN Case Walkthrough →

7. The 2022 Backtest — a disclosed negative result

Full case study: docs/CASE_STUDY_2022_BACKTEST.md · part of a running, dated docs/ORION_BACKTEST_LOG.md, not a one-time document

Clinical Risk does not meaningfully predict real trial termination

ORION's own live scoring engine was tested against real historical ClinicalTrials.gov data (via AACT, Duke University's public archive), reconstructed as it looked on real past dates, checked against what actually happened afterward — five separate hypotheses, up to 83,000 trials in the largest sample.

TestSampleResult
5 named 2022 FDA decisions5No clean separation — highest-scored company received a CRL; lowest-scored was approved
Systematic sample, Clinical Risk vs. 1-yr termination1,806 companiesr = 0.055 — no meaningful correlation
Regression-recalibrated weights, held-out test1,806, 70/30 splitRecalibrated weights performed worse out-of-sample
Recruiting duration as stall proxy59,821 trialsr = 0.0005 — essentially zero
Completion-date revisions as proxy82,935 trialsA real, small effect — opposite the intuitive direction

ORION published this finding rather than suppressing it. The recalibrated weights were not shipped (a worse-performing, more-sophisticated-sounding formula would have been a strictly worse product). The one place a real signal appeared — actively-revised records behaving differently from quiet ones — pointed toward time-series signal that static snapshots cannot provide, and directly motivated ORION's real-time trial-snapshot infrastructure and the public, continuously-updating Accuracy page.

This is included here, in the compliance document, rather than only in a separate case study, because an institutional risk review should not have to go looking for the one result that didn't flatter the product.

8. Data Sources

SourceUsed forProvider
Clinical trial dataPipeline Strength, Clinical Risk, FDA Success, Franchise HealthClinicalTrials.gov v2 API (U.S. National Library of Medicine)
Market dataInstitutional Confidence, momentum, analyst targetsFinancial Modeling Prep / Yahoo Finance
Cash runway / dilutionDisplayed separately in reports; cash runway also feeds Risk Score's Cash Burn Risk category (live as of 2026-07-14, see Section 3) — dilution is display-only, not a score inputSEC EDGAR company facts API
Competitor overlap (same indication)ORION Impact Chain's competitor-count step only — not a Buy Score, Risk Score, or Franchise Health inputClinicalTrials.gov v2 API (cross-indication search)
Historical approval base ratesFDA Success, Regulatory Risk's approval componentPublished industry clinical-development-success-rate studies (constant table, not fetched live)
Report narrativeInvestment thesis text, cited to the structured sources aboveClaude (Anthropic) — AI-generated, not investment advice

Explicitly not a data source for any score above (Buy Score, Risk Score, Franchise Health): 13F institutional-ownership filings, market-share data, IP/litigation status, pricing/reimbursement data, or any AI-generated free text. Competitor overlap (row above) is the one exception, and only as an Impact Chain trace step, never as a score input — the "market share impact" hop downstream of it stays deliberately unscored, see Section 6. A future version that wants to incorporate any of these into an actual score must add them as structured fields, never infer them from prose.