- Bankroll
- $1000.00
- Today
- +0.00
- Risk
- 0.0%
- Open
- 0
- 7-day
- +0.00
What the model is actually based on.
A complete, honest list of every input that drives a probability number on this site — and what we deliberately don't use. Read it; if you don't buy our methodology, don't buy our edges.
Data inputs
Match results
football-data.org · balldontlieHistorical scores, league tables, fixture metadata. The Elo engine consumes these the moment they settle. Football covers top-7 European leagues + UEFA competitions; NBA covers regular season + playoffs since 2008; tennis covers ATP/WTA tour matches with surface tags.
Recent form
last 5 matches per teamW/L/D outcome, goals/points for and against, home or away. Fed into a form-strength feature alongside Elo.
Head-to-head
last 5 H2H, surface-aware for tennisDirect meetings between the two competitors. Lower weight than Elo because samples are small, but we surface them so you can sanity-check.
Rest days
schedule densityDays since each side's last match. NBA back-to-back and European-tournament fatigue effects are sport-tuned.
Home advantage
league-specific factorEmpirically estimated home-court / home-pitch lift per league. Folded into the rating diff before the logistic.
Player rosters + box scores
balldontlie · NBA onlyPer-player minutes, points, rebounds, assists, threes, PRA for the last N games. Drives NBA player-prop normal distributions.
Market odds
The Odds API · Pinnacle preferredBest price per market across 8 books, vig stripped via de-vigging. The sharpest book's line is treated as the consensus market probability we beat or lose to.
News context
Gemini 2.5 Flash + Google SearchPer-team summary, named injuries with impact level, named suspensions, lineup notes, form notes, and the sources cited. See it on the Newsroom. Cached per match, regenerated when an analysis is rerun.
The model, per sport
Football · 1X2
logistic on Elo + form + restLogistic regression takes the Elo diff, recent-form gap, rest differential, and home-advantage factor. Output is a calibrated win/draw/away triple.
Football · scorelines + derivatives
bivariate Poisson on team xGRecent xG-for and xG-against per team feed two correlated Poisson rates. The full score grid is integrated to derive BTTS, totals (over/under 1.5/2.5/3.5), Asian handicap, clean sheet, win-to-nil, and HT/FT.
NBA · moneyline + totals
normal distribution on team ratesEach team's recent points-for / points-against are fitted to a normal distribution; difference + sum drive moneyline, spread (team_totals featured market), and game O/U.
NBA · player props
per-player normal pricingPoints / rebounds / assists / threes / PRA each get a mean+std fit from the player's last N games (starter or bench filtered). Over/under model probability is the integral past the line.
Tennis · match win
surface-aware EloSurface-specific Elo (hard/clay/grass) feeds a logistic output. Best-of-3 vs best-of-5 differs because long matches converge to favourite.
Calibration
Platt scaling on graded historyRaw model probabilities are stretched/compressed against the actual hit rate at each confidence bucket — see the calibration plot. The number we publish is the calibrated number, not the raw model number.
Edge calculation
- 01Pull every book's posted price for the market.
8 books, fetched from The Odds API. We track who's quoting and how stale.
- 02Strip the vig.
Two-sided markets are divided by the sum of their implied probabilities to back out the no-vig fair line.
- 03Compare model probability to fair market probability.
Edge % = (model_prob − market_prob) / market_prob. Positive = model thinks the price is mispriced in our favour.
- 04Apply the +EV threshold.
Below ~3%, the edge is dominated by model noise. We tag those as 'fair'. Between 3–6% is mainline; above 6% is an outlier we surface in the ribbon ticker.
- 05Suggest a stake via fractional Kelly.
Quarter-Kelly by default (75% lower variance than full Kelly with very small ROI cost). Slider on every match page.
What we deliberately don't do
No proprietary 'inside info'
Every input is documented above. If we don't list it, the model doesn't see it.
No tipster mode
We publish probabilities and edge, not picks. You decide what to back. Our P&L is your P&L, graded on the same scorecard you see.
No survivorship bias
Every analysis we generate is graded — wins and losses both visible on /accuracy. We never delete a bad call.
No affiliate-bias incentive
We are not affiliated with any sportsbook. Best-price highlighting is purely a function of the posted lines, not a kickback.
Honest limitations of the current build
- Asian handicap ladder is mostly model-only.
The Odds API gives us one handicap line per match in the free tier. The full ladder is generated by the model so you can read across, but only the line books actually post will show real prices + edge.
- Corners + cards markets need an additional provider.
The Odds API charges 10× per credit for these. We have the integration ready (API-Football's free 100/day tier covers them) but it requires CC validation; if you have a key, set FOOTBALL_API_KEY and they activate.
- Player props for football aren't priced.
We model 1X2, BTTS, totals, AH, corners and cards — but not player-level shots/goals/assists. NBA has player props. Football player props are on the roadmap.
- Closing-line value (CLV) on the landing page is a backtest figure.
The pipeline that captures every pick's closing line and computes the realized CLV is wired but not flipped on yet. The number on the home page is honest about being from the 180-day backtest at 1u flat staking.
- News context can lag during high cap days.
The Gemini wrapper has a daily call cap and will return empty rather than risk overrun. When that happens, the news block on a match page falls back to 'no context available' — the model still runs without the news features.
If something on this list isn't how you'd want a model built, tell us. The methodology gets sharper because real users push on it.