Methodology
How it works
The whole method, including the parts that are unflattering.
The model
We use a Dixon–Coles adjusted Poisson model. In plain terms: we estimate how many goals each team tends to score and concede, adjust for who they played and where, and turn that into a probability for every possible scoreline. Every market we quote — match result, total goals, both teams to score, handicaps — is derived from that single table of scorelines, so the numbers can never contradict each other.
The Dixon–Coles part is a correction for low-scoring games. Plain Poisson systematically misprices 0-0, 1-0, 0-1 and 1-1, which is precisely where a lot of football betting sits. The model is explained in full, with a worked example, on its own page.
Team strength is estimated from roughly the last 40 matches, weighted so a game from 180 days ago counts half as much as one from yesterday. We fit twice — once on goals, once on expected goals — and blend the two, weighting expected goals at 60% because it predicts future results better than goals do.
We also shrink each team’s estimated strength toward the league average. Without that, a team on a hot streak looks better than it is, and the model becomes overconfident. Shrinking costs a little accuracy on the extremes and buys a lot of honesty in the probabilities.
When we advise a bet
We do not bet on the model alone. Bookmakers’ prices, once their margin is stripped out, are the best-calibrated football forecast there is — better than any public model, ours included — and the durable edge in this market comes from the prices that stand clear of that consensus, not from disagreeing with it. So for every selection we take the de-vigged consensus across every bookmaker we can see, blend it with our own probability at 40% model to 60% market, and judge the best available price against that figure. The model’s job is to add what it knows — the scoreline distribution behind totals and handicaps, form the market prices slowly — and to break ties; it is not the referee.
A bet is advised when the best price beats that blended figure by the bar for its market: 3% on the match result and the Asian handicap, 4% on total goals and 5% on both teams to score. The bar is higher in the markets where the model’s own calibration checks show it adds less. Correct scores are priced on every match page but never advised: the prices are long, the margins are wide and the edge estimate is mostly noise. We stake using fractional Kelly on the blended probability, capped at 2 units of a notional 100-unit bankroll, so a 2-unit stake is 2% of it.
Two more limits. Nothing is advised at a price of 4.0 or longer, or below a 10% chance: long shots are systematically over-bet and return less than favourites, and a model’s error is largest there. And when even the blended figure disagrees with the price by more than 12%, the likelier explanation is that something is missing — a line-up, a side we have barely seen — rather than that the market is wrong, so we advise nothing. Friendlies are never advised.
We also keep the list short. A match carries at most 1 free and 2 premium selection, and a day at most 10 free and 30 premium: on a busy weekend far more matches clear the bar, and only the strongest of them are published.
Most fixtures do not clear that bar, and those pages say so plainly. A page with no value bet is a correct result, not a failure.
What the model cannot do
It does not know about injuries, suspensions, a manager resting players before a European tie, or a squad that has just been through a takeover. It sees goals, shots and expected goals, and nothing else. On any single match that ignorance can be decisive.
It is also fitted on a finite sample, so its probabilities carry real error. When we say a selection has a 4% edge, some of that may be our own estimation noise rather than the bookmaker’s mistake. That is why the threshold exists and why the stakes are capped.
Our current data provider (api-football) does not supply bigChancesAvg, touchesOppBoxAvg, throwInsAvg. Those rows show as unavailable in the stat tables rather than being estimated and presented as measurements.
What happens after kick-off
A prediction becomes immutable at kick-off — enforced by a database trigger, not just by our intentions — and a settled outcome is written once and never rewritten. Once a day’s matches are over, every selection the model published for that day, members’ picks included, is listed on the previous days’ pages with its price, the final score and the outcome. Losses are listed in the same place and the same words as wins.
Why the day pages and the dated pages are separate
A day-of-week page shows the next occurrence of that weekday. A dated page is a permanent entry for one specific date, and once that date has passed its picks and outcomes have a page of their own. They overlap for a few hours a week and diverge permanently after that, so each is indexed on its own terms rather than one being pointed at the other.
Questions
- Do you predict every match?
- We publish a forecast — probabilities and a stat comparison — for every fixture we cover. We only publish a selection where the available price looks genuinely wrong to us, which is a minority of fixtures. A page with no selection is a correct result, not a failure.
- Can I see the predictions you published before?
- Yes. Once a day is over, every selection the model published for it — the members’ picks included — is listed on the previous days’ pages with its price, the final score and whether it won, lost or was void. Nothing is left out and nothing is edited after kick-off.
- Do your predictions make money?
- We make no claim about that, and nobody honestly can. Predictions are probabilities, not certainties; losing runs are a normal part of betting on any method; and past predictions do not indicate future results. Never stake money you cannot afford to lose.