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.
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 compare our probability to the price on offer. If our number says a selection should be 2.0 and it is available at a longer price, that difference is our edge. We only advise a bet when that edge clears 4%, and we stake using fractional Kelly capped at 2 units. Stakes are in units of a notional 100-unit bankroll, so a 2-unit stake is 2% of it.
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.
How the record is kept honest
A prediction becomes immutable at kick-off — enforced by a database trigger, not just by our intentions. Settled results are write-once. Each day’s predictions are hashed into a merkle root that commits to the previous day’s root, so altering an old selection breaks every root after it.
Our own build pipeline recomputes every headline figure from the raw rows on every commit and fails if they disagree with what this site displays. You can run the same check yourself against the public JSON.
Why the day pages and the dated pages are separate
A day-of-week page shows the next occurrence of that weekday and how that weekday has gone for us. A dated page is a permanent archive entry for one specific date. They overlap for a few hours a week and diverge permanently after that, so both are indexed on their 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 advise a bet where the available price looks genuinely wrong to us, which is a minority of fixtures. Advising a bet on every game is the fastest way to destroy a record.
- What is in your published record?
- Every advised bet, win or lose, with the advised price, the stake, the outcome and the profit or loss in units. Nothing is removed. Forecasts are not counted in the profit figures, because a forecast is not a bet.
- Can I verify your results myself?
- Yes. The full history is downloadable as CSV and JSON, every prediction carries a hash of its published fields, and each day is sealed into a merkle root chained to the previous day. Editing any past prediction breaks every root after it.
- Are you guaranteeing profit?
- No. Nobody can. Past performance does not predict future results, a losing run of 15 or more selections is statistically normal even for a strategy with a real edge, and any record could be luck rather than skill. Never stake money you cannot afford to lose.