Predictorous

How this works

Two halves: the model that prices fixtures, and the event layer underneath it. Both are built and published. Only the first is allowed to move a prediction, and the difference is marked throughout — a model that blurs the two is selling something.

250 calls graded47.4% said, on average50.8% landedevery call, graded →
Running today

From shots to a published call

1

Read the shots, not the scores

Every shot in the big five: where from, what it was worth, who took it, which minute, what happened. Results are a poor measure of a team — a deflected winner and a hammering both read as three points — so chance quality is what gets stored.
2

Turn shots into team strength

Each club gets attack and defence ratings from its last 38 matches, weighted toward recent games, opponent-adjusted so feasting on the bottom three is not mistaken for competing with the top three. Promoted clubs start on a measured archetype rather than a flattering blank slate.
3

Map where a team lives on the pitch

The same shots, grouped by area, give nine functional zones per club: three attacking lanes, three defensive lanes, and midfield split by job — progression, press, screen. Defensive zones are built from what opponents produced against that side, and lanes are mirrored, so our left attack is judged against their right defence.
4

Price the fixture

Ratings become expected goals for this specific match, then a grid of scorelines, then three probabilities. The zone matchup nudges those expected goals through four fitted channels. The published triplet is then a layer: the home:away ratio is the average of two independently fitted models — the chance-quality one above and a process Elo built from thirteen seasons of expected goals — while the draw is handed whole to a classifier trained on 17,134 matches. Two questions with two different winners, measured on 1,714 matches neither had seen.
5

Commit it before kickoff

The prediction is written down and never revised, then graded against what happened. That record is the product — see it.
6

Replay the season ten thousand times

Every remaining fixture is priced and the season played out repeatedly. Each replay draws its own per-team strength error, because our estimate of a club is itself uncertain — without that, projections come out about 1.45× too confident, which we measured rather than assumed.

How anything gets in

Nothing ships because it sounds clever. An idea is fitted on one season, frozen, and judged on a season it has never seen — and only ships if it beats what is already there. Most ideas fail, and the failures stay on the record.

Passed
Zone channels

Squashing all nine zone matchups into one number made them redundant with the strength ratings. Kept apart as four channels, they beat it on an unseen season by roughly four times the old edge.

Rejected
Availability shock

Tracking which key players were missing improved the model on one season. Across two, the coefficients flipped sign. A real effect does not reverse direction, so it was thrown away.

What it does not do

  • Never reads bookmakers' odds. It states what an outcome is worth and stops. Comparing that with a price is the reader's job; telling anyone what to bet is nobody's.
  • Does not know tonight's line-up. No team-news or injury feed, so a late absence is invisible to it.
  • Does not model managers, cups or transfers. A new manager reaches today's ratings only through results, slowly — the managerial layer below is being built, not running.
  • Player ratings do not feed predictions. They are a separate, unvalidated experiment — see Mental.
Built, not yet trusted

Zones as the unit

Everything above runs on 25 shots a match — about 1.8% of what happens. This layer runs on every event, roughly 1,431 per match, each with the player, the position, the outcome and the minute. It is built and published: the shot and pass maps, the zone heat, the capability profiles and the manager spells all read it.

What it has not done is earn a place in the predictor. Zones built from player events were measured against the shipping model and did not beat it, so they do not move a single published probability. That is the gate working, not the layer failing — the measurement is on the record. The organising idea it is being built toward: a team is as strong as the way it occupies space, and a zone cannot be rated without the players who occupy it — so the zone rating and the player rating become one measurement read at two levels.

Every eventplayer · position · outcome · minuteStamped with the state at that minutelevel · behind · ahead · a man down · latePLAYER RANKINGwhat he tried · won · controlled, by stateTEAM ZONES COMPUTEa zone is the players who occupy itTeam v team statswhat they do, what they concedeManagerial edgehis own ranking, from his historyPredictoronly what passes the gate

Controlled, not touched

A touch counts deflections, blocks and miscontrols, which say nothing about where a player operates. What matters is where he had the ball and did something deliberate with it.

State includes the man count

A red card changes a match more than most goals do. Every event carries the scoreline and the man count at that minute, so how a side plays with ten becomes measurable.

Intent, reported honestly

How often a player tried is the mental signal — but attempts alone would crown the wasteful, so attempt rate and success rate are published as two numbers, never blended into one that hides which half is doing the work.

Game state, without the trap

Weak teams are behind constantly, so raw “performance while losing” rewards being bad. Everything is measured per minute spent in that state and against the player's own baseline: never who was losing, but who changed when it got hard.

Zone contributions are fitted, not assumed

Today's zone importance weights were a workaround for not knowing which player an action belonged to. With names on every event that crutch goes — but a flat sum would be just as much a guess, since the fitted channels already came out wildly unequal. The contributions get measured.

Fitted on the residual, so nothing is redundant

Zones and chance quality are computed from the same matches, so they overlap by nature. Zones and player ratings are therefore fitted against what the chance-quality baseline gets wrong — they can only earn weight for information it does not already contain. Redundancy is excluded by arithmetic, not by hope.

The manager is ranked, not inferred

He gets his own record the way a player does, from his history rather than this squad's zones: what his teams do level, behind and a man down, whether leads are held or retrieved, discipline, results against chances created — across every club he has managed, which is what separates the manager from the squad he inherited. Every match records who was in charge, so his spells are derived rather than collected: first match to last, club by club.

Opponent-adjusted, with minimum samples

A winger who spent a season against the league's worst full-backs would read as elite without correcting for who he faced. And splitting by zone, state and game phase fragments the data fast, so every cell carries a minimum sample before it is shown.

None of it moves a prediction until it passes the same gate as everything else, and the baseline stays deliberately blind to all of it — a metric cannot be validated against a model that already contains it. Published as analysis, withheld from the forecast: those are two different standards of proof, and conflating them is how a dashboard starts calling itself a model.