Football match predictions — model forecasts, honestly unvalidated.
Coloured bar = Home / Draw / Away chance at a glance. A green EDGE chip means the model rates it higher than the bookmakers (≈ market = it agrees). Tap any match for the full breakdown. Forecasts only — unproven until the track record says otherwise.
The model's most lopsided calls — only the markets where a high hit-rate is genuinely real (favourites, double chance, goals), and only those still paying 1.30 or more (the surest picks pay near nothing, so they're filtered out). The tier is the expected hit-rate: 7/10 ≈ 70%+.
Even at 1.30+, the bookmaker prices these as likely for a reason — high hit-rate is not high profit, and one upset wipes several wins. These are “most likely to be right”, not “most likely to make money”.
Promotions are the one edge that doesn't need you to predict anything — a free bet is money the bookmaker handed you. This works out whether a specific offer is worth taking, and bluntly flags the −EV ones to skip.
A free bet is worth less than its face — you don't get the stake back. Higher odds raise the theoretical value but you lose it more often (variance).
“Book margin” is the vig you bleed clearing the wagering (~5% on mainline football). EV = bonus − (turnover × margin).
Most boosts are still −EV (they boost longshots). Worth it only when the boosted price beats the fair price.
The math can't see the friction: wagering requirements, KYC/verification, void rules, and withdrawal hassle — worst on Nigerian books. A +EV promo is only real if you can actually get the money out.
Don't try to beat Pinnacle — use it as truth. Enter the sharp/reference odds (Pinnacle, or the market consensus on the Predictions tab) and your book's odds. Where your book pays more than the de-vigged fair price, that's real value — the market's own sharp consensus, not our model.
Soft-book value is real but thin, and books limit or ban winners fast. Stakes are indicative (quarter-Kelly) — size down, and expect your account to get capped the moment you win consistently.
Every forecast you load is logged here automatically, and results settle themselves from the final scores. This is your out-of-sample record — the only honest proof the model works (or doesn't).
Season auto-picks the current year and trains on the last few seasons — leave it
unless you want a specific one. Keys live on the server (set FOOTBALL_DATA_KEY and
ODDS_API_KEY in Cloudflare and redeploy); only fill these in if the app says a token
is invalid. The Odds API key powers the model-vs-market edge.
When on (and the league is EPL / La Liga / Serie A / Bundesliga / Ligue 1), the model trains on each team's expected goals (xG, from Understat) instead of raw goals — a less noisy measure that steadies the ratings on fewer games. No effect on Brazil, World Cup, or the Champions League (Understat doesn't cover them); any unmatched game quietly falls back to goals.
Walk-forward test: the model is re-fit before each past matchday, then scored on what actually happened. Lower numbers = better.
Don't wait for fresh matches — fill the calibration scoreboard now from recent finished games (walk-forward, leakage-free: the model only ever sees matches played before each one). Load a league first. The edge & CLV scoreboards stay empty on purpose: no free historical odds exist for the past, so a market edge can't be reconstructed honestly — only forward picks can fill those.