Methodology

How our prediction models work, how premium picks qualify, and exactly how the Premium Pick Tracker records performance. Designed to be audited, not just trusted.

Last updated: 2026-05-13

1. Two prediction models — V1 and V3

For every soccer fixture we generate predictions from two independent models. Both produce a home/draw/away probability and a confidence score. They use different feature inputs and different training data so they fail in different ways.

V1 model

Long-tenured ensemble trained on multi-season data. Strong on traditional leagues with long histories (Scottish Premiership, Swiss Super League, Championship). Tends to track the market line — useful as a sanity check.

V3 (Sharp Intelligence) model

Newer model with stronger empirical performance on top-tier leagues (Bundesliga, La Liga, J1 League). Identifies divergence from market consensus where the model sees a different most-likely outcome than the bookmakers.

Per league we track which model has been historically more accurate. Where one dominates, our premium picks weight that model more heavily. For team-level views we surface both numbers side-by-side so you can compare.

2. What qualifies as a Premium Pick

A soccer fixture qualifies as premium when V3 confidence is at least 60% for the favoured side. Qualification is deterministic — the rules live in code at lib/premium-tracker/capture-helpers.ts and are applied identically to every match.

Qualification rules

  • Premium tier — V3 confidence ≥ 60% on the favoured outcome. Strongest historical accuracy band.
  • Strong tier — V3 confidence ≥ 50% in a strong-league context, OR a calibrated premium score ≥ 60. Mid-band picks.
  • Not tracked — V1/V3 below thresholds, or matches without a usable consensus odds value.

We surface the premium tier as the public tracker headline because the strong tier dilutes ROI. The strong tier is still visible in the filtered view on the audit page.

3. How the Premium Pick Tracker works

The tracker simulates a virtual $100 flat stake on every qualifying pick at the consensus odds available when the pick was surfaced.

Win: net = stake × (oddsAtPublish − 1)
Loss: net = −stake
Push: net = 0
Void: net = 0
ROI = sum(net) / sum(stake on settled W/L) × 100
  • • Every captured row has oddsAtPublish locked at publication. We never overwrite it later.
  • • Settled rows are append-only: once a result lands we record it and move on. No retroactive edits.
  • • Pushes and voids never enter the ROI denominator — they aren't losses, but they aren't wins either.
  • • Parlays and player props are excluded from this tracker — they distort ROI and need their own surfaces.

4. Odds resolution

We use the consensus implied probability across all tracked bookmakers as the source of odds-at-publish. The decimal odds we use are computed as 1 / consensus_probability. This includes the natural bookmaker margin (vig), so the simulated payouts match what a flat bettor would actually have received.

Picks where consensus odds are unavailable at capture time are skipped — the same exclusion rule applies to live capture and to any historical reconstruction. We never substitute, estimate, or interpolate an odds value.

5. Historical backfill — what it is and why

The forward capture cron runs every two hours and locks in every premium-qualified pick as it surfaces. To make the tracker useful from day one, we ran a one-shot backfill over the last 90 days. The backfill applies the same qualification code path, the same odds-resolution logic, and the same outcome derivation as live capture. Every backfilled row is labelled backfill in the audit table.

What backfill is not: a cherry-picked selection. The script walks every finished soccer match in the window with sufficient data, applies the rules uniformly, and writes both winners and losers. The same exclusion (no usable odds → skip) was applied in both directions.

What backfill is: a deterministic reconstruction. Given the same model state and consensus odds, the script will produce the same result every time. The code is in the repo.

6. Limitations & what we do not promise

  • Past performance does not predict future results. Soccer is high-variance. Even a model with positive expected value loses streaks.
  • We do not guarantee profit. The tracker shows a simulation, not a recommendation to bet.
  • Real-world betting differs from simulation — bookmaker limits, liquidity, line movement, and your own slippage will all affect actual returns.
  • The model is not infallible. Strong-tier picks have run negative ROI over our 90-day window. We disclose this rather than hide it.
  • This is not financial advice. Betting involves risk of total loss. Please see responsible betting if any of this feels like it's becoming a problem.
See the tracker live at /performance · Read about us at /about · Bet responsibly at /responsible-betting.