How OddsIQ's Premier League Model Actually Works
Every tipster site claims to have an edge. Here's ours, laid out in full — the math, the inputs, the feedback loop, and the things we'll never be able to predict.
Every tipster site claims to have an edge. Here's ours, laid out in full — the math, the inputs, the feedback loop, and the things we'll never be able to predict.
Most tipster sites won't tell you how they reach their predictions. A screenshot of yesterday's winning tip, a bold claim about "our AI," and a buy button. That's the business model — opacity is the product.
We think that's backwards. If we're confident in our model, we should be happy to explain it. If we're wrong, we want you to know how we were wrong so we can fix it. And if our numbers disagree with a bookmaker's, you deserve to know which assumptions drove the gap.
So here's everything inside the Premier League model, laid out in plain English. Bring it up next time a pundit tells you "form is temporary, class is permanent" — because one of those is something we can actually measure.
For every upcoming Premier League match, we want to answer three questions:
The third question is the interesting one. A model that agrees with bookmakers 100% of the time is useless — you'd just bet at the bookmaker's prices and lose the vig. A model that disagrees has opinions, and opinions are where the edge lives.
Football is weird compared to other sports, statistically speaking. The scores are low. A 1-0 match is common. Ties at 0-0 and 1-1 are more frequent than a naive model would predict. And dominant teams sometimes score five; sometimes they score zero.
The standard approach is a Poisson model — a probability distribution that handles "how many goals will team X score?" given their expected goals (their "attack rate") and team Y's defensive rate. Multiply those for each team and you get a matrix of scoreline probabilities.
But pure Poisson has a problem: it underpredicts 0-0, 1-0, and 1-1 scores, and overpredicts 2-2 and beyond. Real football matches cluster at low scores more than the math suggests.
Enter Dixon-Coles. Two statisticians, Mark Dixon and Stuart Coles, published a paper in 1997 that corrected exactly this. Their adjustment nudges the probabilities of low-scoring results upward based on empirical observation. It's not glamorous, but it makes the model noticeably more accurate for football specifically.
We use the Dixon-Coles adjustment on top of our base Poisson model. Every match gets a full 10×10 matrix of possible scores (0-0, 1-0, 0-1, 1-1, 2-0, etc.), and we sum across the matrix to get win / draw / loss probabilities.
The attack and defense rates above don't come out of thin air. We need to know how strong each team is. For that, we use Elo.
Elo was designed for chess in the 1960s, but it turns out to work remarkably well for football. The idea is simple: each team has a rating. When two teams play, the winner gains points and the loser loses them. Beating a much stronger team gains more points than beating a much weaker one. The points are redistributed between the two teams — the total Elo in the league is conserved.
We start each season with carry-forward Elo ratings (adjusted slightly for new signings and managerial changes when we have the data) and update them after every match. The key parameter is the K-factor — how much each match shifts the ratings. Too high and the model chases recent form too aggressively; too low and it's slow to respond to real changes in team strength.
We use a K-factor tuned specifically for Premier League match density. It's not the same value as FIFA uses for international football, or what chess uses for grandmaster play. Every competition has its own rhythm.
Elo gives us a single number per team — their strength relative to the league. We then convert that into the attack and defense rates that feed the Dixon-Coles Poisson model.
Despite what some modern analytics types will tell you, home advantage in the Premier League is real and measurable. It's smaller than it used to be (pre-2000 it was worth about 0.6 goals; now it's closer to 0.3), but it hasn't disappeared.
We model it as a small boost to the home team's attack rate and a small reduction in their defensive rate. The exact values are fitted to the last three Premier League seasons — enough data to be stable, recent enough to reflect the current state of the game.
Form matters, but the internet mostly gets it wrong. "Last 5 matches" is too short to be statistically meaningful. "Last 20 matches" smooths out the signal we actually care about.
We use a weighted recent-form adjustment over the last 10 international-calendar-aware matches, with heavier weight on recent performances and lighter weight on older ones. A team on a 5-match winning streak against top-half opponents gets a small positive nudge. A team on a 5-match losing streak, even against weaker opposition, gets a small negative one.
This adjustment is deliberately conservative. The base Elo rating is the main driver of team strength; recent form is a modifier, not a replacement.
Here's the part most tipster sites don't have: we log every prediction and check whether we were right.
Every match we predict goes into our ai_bet_log table with the model's probability for each outcome. When the match finishes, we record what actually happened. Over time, this builds a dataset that answers the question that actually matters:
When our model says a team has a 70% chance of winning, do they actually win 70% of the time?
That's called calibration. If our model is well-calibrated, our 70% predictions happen 70% of the time. If we're overconfident, our 70% predictions might only land 55% of the time — meaning we're claiming more certainty than we have.
You can see our calibration chart on the calibration page. We publish it honestly, including the ranges where we're slightly off.
No model is perfect. A few things we genuinely don't account for:
Injuries declared hours before kickoff. If Haaland picks up a knock in the warm-up, our model doesn't know. Team news can shift win probabilities by 5-10% in big matches — a gap no model without live team-news ingestion can close.
Tactical changes we can't observe. A manager deciding to sit deep and hit on the counter? We don't have a variable for that.
Refereeing. Individual referees produce measurable differences in cards, penalties, and extra time added. We don't model this.
Psychological context. A team that's already secured their Champions League spot playing the weekend before a cup final. A side with a manager on the brink. These narratives matter, and our model doesn't read the news.
We're working on bringing some of this in over time. Team news is next. But we'd rather ship a model that's honest about its blind spots than one that claims omniscience.
A few important caveats we'd tell a friend:
Don't bet on every match. Most matches are priced efficiently by the market. Our edge — when we have one — shows up in specific matches where our model meaningfully disagrees with bookmakers. Those are worth a closer look. Most matches are not.
Don't confuse confidence with certainty. A 70% prediction means we're wrong 30% of the time. That's a LOT. Over a season of ~380 matches, a well-calibrated 70% prediction will be wrong about 114 times. Plan for it.
Past performance is exactly that. The model's been right about some things and wrong about others. The future is a new data point. If you need a 100% guarantee, this isn't the tool for you. Actually, nothing is.
Gamble responsibly. OddsIQ shows probabilities. What you do with them is your call. If betting isn't fun anymore, BeGambleAware and GamCare are free, confidential, and 24/7.
If you want to understand the math at a deeper level, the original Dixon-Coles paper is still a good read. It's not long, and the intuition holds up 25+ years later.
That's the model. No secrets. We'd rather lose a tiny competitive edge to total transparency than build a business that depends on opacity.