I Graded My World Cup Model Against the Bookmakers
I built a football prediction model and graded every call against the closing line, on paper, before it ever touched money. Here is the scorecard.
I watched a lot of the 2026 World Cup. I also had money on it: small positions on Kalshi.
After a couple of weeks of that I wanted something better than a hunch.
So I built a model to predict 2026 World Cup matches and graded every call against Bet365's closing line. The first version was a couple of hours of work, improved in small passes over the following week; the paid stats API behind it came off when its seven-day trial ended. Every wager recorded in the repo was paper.
Separately, I put real money behind some of its calls and turned $1,000 into several times that.
The buzzwords guide translated the vocabulary. This one shows what a build looks like when it comes home with a report card.
What I built
Three pieces:
- Python
- A Dixon-Coles bivariate Poisson model fitted on international match history
- A Streamlit dashboard I could open before kickoff
It puts a percentage on every match: win, draw, loss, total goals, first goalscorer. Then I grade every call against the bookmaker's closing line once the game finishes.
I commit every prediction, price and settled bet straight back into the repo.
TheStatsAPI ──> ingest ──> 10 parquet files ──> 4 models ──> a percentage
ESPN (free) 23,735 rows Dixon-Coles, scorers,
corners, cards
│
v
paper ledgers ──> settle ──> backtest ──> the gate
173 bets which markets may bet
How it did
Over 99 matches, graded against Bet365's closing line:
- First goalscorer: my model beat the book. 0.4631 against 0.4965, at 100% confidence over 96 matches.
- My prices beat the market's close. Across 173 recorded bets, ahead in more than 99.9% of 20,000 bootstrap resamples.
- Match outcomes: no edge. 0.4772 against the book's 0.4833, with a confidence interval running from −0.032 to +0.045. It straddles zero. My model was closer than the market on 47 of 99 games.
- I never bet four of the six markets. I set a 95% confidence gate: if a market couldn't clear it in a day-by-day replay of the tournament, I didn't bet it. Both-teams-to-score, totals, corners and first-half all failed. The corners model was one of them, and I had rebuilt that one from scratch. The rebuild scored better than my first version and still lost to the book.
Every grade above is against Bet365, a recreational book. The sharp books set a harder line, and my ingest never got one to compare against.
Four markets never cleared the bar
I built six betting markets and tested all six against a replay of the tournament. Four never cleared the bar I set. Both-teams-to-score came back at 7% confidence, so I never bet it, even on the weekends I liked it.
If you're buying AI instead of building it, that's the piece to copy. Before anything touches your money or your customers, ask for its grade on decisions it has never seen: last month's invoices, emails from before the sale. Ask how confident the number is; I set 95% as the bar and only bet when it cleared.
Ask the same question anywhere AI touches a money decision.
If the vendor can't show you that scorecard, they're finding out whether it works on your business, at your cost.
The full scorecard
All of it is there: the confidence intervals, the four markets that failed the gate, the calibration curve, and how I built the models.
Start Here
Before an AI system touches your money, you need a way to decide whether to trust it.
At daisyguti.ai/work-with-me there's a short intake: about nine questions, a few minutes. I read every submission myself, assess whether a system like this would hold up in your business, and reply with next steps. I'm a 20+ year engineer, and I build and grade these systems myself.
Next in the series: the tools your developer keeps naming (CrewAI, LangChain, n8n and the rest), translated.