How the SharpXI model works
By Adam
No black box: this page walks a single bet-builder leg all the way from raw match data to a ranked edge. It's the long version — the homepage has the three-step gist and the guides take the ideas one at a time. Stay if you like knowing why.
1. A recency-weighted base rate
For each player and market we compute a per-90 rate from his historical matches in every league we cover, weighting recent games more heavily (an exponential half-life). A player who moves between leagues keeps his history — recent form carries across a transfer. Four full seasons of data per league underpin every rate; everything league-relative (the opponent factor, positional priors, recalibration) is computed within that player's league, so a defence is rated against its own league, not a blend.
2. Shrinkage for small samples
A player with three matches shouldn't dominate the model. We shrink each rate toward a positional prior using empirical-Bayes — the fewer the minutes, the more the estimate leans on what players in that position typically do. This is why every pick carries a sample size.
3. Context adjustments
- Opponent — how much the opposition concede (for shots) or draw/commit fouls (for fouls), relative to the league average.
- Referee — for cards, the official is often the single biggest, most mispriced factor. We use each referee's card tendency.
- Minutes & role — the rate is scaled by projected minutes; lineup risk widens the confidence.
- Derby / match context — a modest multiplier where it's warranted. The subjective stuff a model can't see (must-win pressure) is never faked into the numbers.
4. The right distribution per market
- Counts (shots, fouls) — a Negative Binomial, which handles the over-dispersion real player data shows; Poisson as a fallback. We take P(count ≥ line).
- Cards — a Poisson booking model for P(at least one card).
- Team & match goals — a Dixon-Coles bivariate-Poisson fit on team expected goals (xG), capturing attack, defence, home advantage and the low-score correlation.
5. Removing the bookmaker's margin (de-vig)
A bookmaker's price includes their margin, so the naïve implied probability is inflated — and it inflates longshots most (the favourite–longshot bias). Because player bets are longshots, we de-vig properly using Shin's method before comparing our number to the price. Skipping this would manufacture edge that isn't there.
6. Calibration — grading ourselves honestly
Each market is re-calibrated with isotonic regression, fit on a temporal-train split and only kept if it beats the raw model on a held-out set — no self-grading. Match cards is our weakest market and we say so; more data is the fix, and we keep adding it. You don't have to take our word for any of this: the track record shows predicted vs. observed rates and Brier skill for every market, out of sample.
7. Edge, confidence and staking
The headline number is edge = our probability × decimal price − 1. Alongside it sits a confidence rating built from sample size, referee-table maturity and lineup certainty. For staking we surface a fractional (¼) Kelly figure — a discipline, not an instruction.
Why closing-line value? Short-run profit is noisy and bookmakers limit winners. The honest scoreboard is whether our prices beat the closing line over time. Every leg is a hypothesis with a probability — not a guarantee.
One caveat on completeness: every method on this page is named and public, but the tuning — the half-lives, the shrinkage strengths, the factor weightings — stays ours. The methods are published; the tuning is the edge.
Data: player and team statistics are sourced from public match data; bookmaker prices are entered per leg. SharpXI is an analytics tool, not a betting operator.