About Fulltime Stats
Fulltime Stats publishes statistical football predictions in plain English. For each match we show a win / draw / win probability split, the most-likely scoreline, and a "fair odds" figure — all produced by our own model from the results of past matches. The site carries no bookmaker odds and no gambling-affiliate content.
What follows is the whole method, in the order the numbers actually travel, including the parts that do not work. If you want to know why this site thinks a match is 62/22/16 rather than something else, everything you need is on this page.
If you want the shorter question first — why we publish any of this, and what we do with a prediction after the match is over — that is on our mission page.
The short version
Predictions come from our own Poisson / Dixon-Coles model — not from a third party, and not from any bookmaker's prices. The pipeline is five steps:
- Estimate every team's attack and defence rating from its goals over this season and the last, recent matches counting more, adjusted for how good its opponents were.
- Anchor those ratings to a starting point, so a short, one-sided sample cannot produce a confident prediction.
- Level them across leagues and divisions, so a Danish side and a Portuguese side can be compared at all.
- Turn the two teams' ratings into expected goals for this specific fixture, using that competition's own goal level and home advantage.
- Convert those into a probability for every scoreline, then add the scorelines up into 1/X/2 and the derived markets.
Step 1 — Attack and defence, adjusted for who you played
A team's raw scoring rate is a poor rating because it says as much about the fixture list as about the team. Four goals against the division's worst defence is not the same evidence as four against its best.
So the ratings are solved rather than averaged. Every team starts at 1.00 — exactly league average — and we repeat the following twenty-five times: each team's attack becomes the goals it scored divided by what an average attack would have scored against the defences it actually faced; its defence becomes the same calculation from the other side. After each pass the whole league is renormalised so the mean is 1.00 again. The ratings settle into a set where every team's number is expressed net of the opposition it happened to meet.
The evidence is a team's league goals over the current season and the whole of the previous one, every match weighted by its age: a match loses half its weight every 120 days, so last weekend counts in full, a match from six months ago about a third, and one from a year ago about an eighth. Until 22 September 2026 the window was the last six matches, measured in expected goals, and that turned out to be too short — three bad weeks could erase a title-winning season. Replayed on 1,526 of our own settled predictions, the longer memory together with the anchor in step 2 raised the share of correct 1/X/2 calls from 45.9% to 47.9%, with a log-loss improvement whose interval sat entirely below zero. Actual goals rather than expected goals, because over a season and a half goals are a well-sampled measure on their own, and the provider's expected-goals feed covers only part of the competitions we follow.
Three gaps are handled explicitly. A competition with too little football for that calculation — fewer than twenty matches in the window, which in practice means one that has only just started — falls back to the older six-match estimate. A team no tracked league gave us a rating for (a cup entrant from a division we don't cover) is rated from its own recent goals with no opponent context, then regressed hard: we keep only 40% of that estimate and mix in a deliberately below-average newcomer prior. An unadjusted lower-division scoring rate would otherwise walk into a top flight looking like a title contender. National teams are rated differently again; that is described under the weaknesses below, because it is the weakest part of the model.
Step 2 — The anchor, and why the model refuses to be certain
A handful of matches is not much football. A side that has kept four clean sheets in a row has a raw defensive rating near zero, and a model that believes it will happily print a 90% probability — we have watched it try. Two things stop that.
Every rating is pulled toward a starting point by six expected goals' worth of evidence: a team's attack is its goals plus six times its starting attack, divided by what an average side would have scored against the same defences plus six. With a few matches behind it the starting point dominates; over a season and a half the team's own record does. The starting point is not the same for everyone. It is set by the club's UEFA coefficient — its record in European competition — so a club with a long European record starts somewhat above its league's average and one with none starts somewhat below. How much a coefficient is worth was fitted on the previous season's results, not chosen. Then both ratings are capped to the band 0.55–1.75, a backstop for the extreme tail rather than the main mechanism. Until 22 September 2026 this step was a flat pull of every rating to 35% of its distance from league average, plus a capped bonus for European pedigree; the anchor replaced both.
This is the single biggest reason our probabilities look less decisive than some competitors'. It is a choice, and we think it is the honest one: a confident number that is confidently wrong is worse than a hedged number that is right about its own uncertainty.
Step 3 — Comparing teams from different leagues
Ratings are normalised within a league, which means an average Bulgarian side and an average Spanish side both rate 1.00. That is fine until they meet in a European tie, at which point the model would call it even.
So each country gets a level multiplier derived from its UEFA coefficient, compressed by a power of 0.4 and anchored so that a top-five European league sits at about 1.00, with the result bounded to 0.50–1.06. A team's attack is multiplied by that level and its defence divided by it. Because both sides of a domestic fixture carry the same multiplier, it cancels exactly and domestic predictions are untouched; it only bites when two leagues meet.
A coefficient describes a country's top flight, though, and we also cover lower divisions. Until 22 August 2026 they ran through the same country multiplier as the division above them, so England was simply England: an average Championship side and an average Premier League side leveled to identical numbers. Because the factor cancels inside a league this looked harmless, and inside a league it was — but a promoted club carries its rating across the two, and that is where the cancellation stops. On the opening weekend it made newly-promoted Hull City a 47% home favourite against Manchester United. A second division now carries a further multiplier of 0.70 against its own top flight, a third division 0.53 and a fourth 0.46. The 0.70 is the midpoint of two independent readings of the Championship-to-Premier-League step: what promoted sides have gone on to do suggests about 0.65, and the Elo gap between mid-table clubs about 0.75. The third and fourth were measured on three seasons of English cup ties between clubs of different divisions, the one place those divisions meet; the same measurement put the second-division step at 0.62, with an interval that still contains 0.70, so 0.70 stayed. One set of numbers covers every country, because we have no measurement that would justify claiming to know how Serie B differs from Ligue 2.
European club competitions get two further adjustments, used for those matches only. The first is a ceiling set by the league: winning week after week in a mid-ranked league says less than the same record in one of the strongest, so before a club's rating enters a Champions League, Europa League or Conference League prediction it keeps only part of its distance from its own league's average. That part shrinks with the country's UEFA coefficient, by a power of 0.75, and a club from a top-five league keeps all of it. In the same step the country level uses a power of 0.44 and has no upper bound, so the strongest leagues are no longer pressed onto a single number. The second is that European results count: a club's earlier matches in the three UEFA competitions, this season and last, scale its attack and defence by how far it scored and conceded above or below what its rating expected, pulled toward no change by 30 goals' worth of evidence. Both were fitted on the 2024-25 European season and checked on 2025-26 and the current season, which the fit had not seen.
Leagues outside UEFA — from Brazil and Argentina to Japan, Saudi Arabia and Australia — have no UEFA coefficient, and for a long time they fell through to the neutral 1.00, meaning the model quietly rated the Argentine top flight as the equal of the Bundesliga. They now carry estimated UEFA-equivalent coefficients that run through the same formula, placed on results between confederations such as the Club World Cup and revisited after them. A real UEFA coefficient always wins, so this can never override the published ones.
Placing a division correctly is not the same as trusting a rating that crosses one, and two clubs a season go each way. So a rating carried into a different division is blended halfway toward the seam between the two — the geometric mean of their levels, which is where a promoted or relegated club sits by construction, being the top of one division and the bottom of the other. Not toward the new division's average: that would drag a promoted club up toward mid-table, which is the opposite of what promotion means. The downward crossing is the one that needed this most: a relegated club's rating is flattered by the pull toward its old league's average, and that flattering estimate is the one carried into a division whose average is 30% lower.
One implementation detail is worth stating because it caused a real bug: the 0.55–1.75 band has to be scaled by the league level too. Clamping a levelled rating against the unlevelled band re-broke the cancellation, and in weak leagues it pinned half the division to the floor — teams that the model could then no longer tell apart. The band moves with the level, and the only guard left against an absurd cross-league projection is a hard ceiling of five expected goals for one side, which nothing on the current board comes near.
Step 4 — Expected goals for this fixture
With ratings in hand, each side's expected goals is a product (the multiplicative form Maher set out in 1982):
λhome = league average × home attack × away defence × √(home advantage)
λaway = league average × away attack × home defence ÷ √(home advantage)
Home advantage is split between the two sides — the home figure multiplied by its square root, the away figure divided by the same — so the ratio between them is exactly the stated advantage while the total goals expected in the match are left alone. Since 22 September 2026 both numbers are measured per competition: the league average from that competition's goals over its last two completed seasons plus the current one, set against the average of every league we cover, and home advantage as home goals over away goals in the same matches. Across our domestic leagues home advantage averages about 1.24, from close to 1.00 in leagues where the home side barely benefits to well above that in others. A competition with no history yet uses flat values of 1.4 and 1.35; national-team football uses 1.08 for qualifiers and the Nations League, 1.05 for friendlies, and exactly 1.00 for a World Cup played at a neutral venue.
The flat 1.35 was for a long time the most-corrected number in the model, and that history is in the next section.
Step 5 — From expected goals to probabilities
Goals in football are close to a Poisson process, so from the two expected-goal figures we compute the probability of every scoreline from 0-0 up to 8-8. Summing the cells where the home side scores more gives the home-win probability; the diagonal gives the draw; the rest gives the away win. Both teams to score and over/under 2.5 are sums over different regions of the same grid, which is why they can never contradict the 1/X/2 split.
Plain Poisson treats the two teams' scores as independent, and at low scores that is measurably false — 0-0 and 1-1 happen more often than independence predicts, 1-0 and 0-1 slightly less. The Dixon-Coles correction adjusts exactly those four cells, with a parameter currently set to −0.05.
One design choice on the displayed scoreline is worth flagging, because it surprises people. We show the most likely exact score within the predicted result, not the most likely score overall. The global mode is very often 1-1, which would mean a page headlined "62% home win" illustrated by a draw. Agreeing with our own headline seemed more useful than being technically the modal cell.
Season projections
The projections on our Tables and Title Races pages play out every remaining match of a league 10,000 times with the same team ratings the match predictions use that day, and count how often each club finishes in each position. One thing is added in the club leagues, because a projection answers a longer question: a rating is an estimate, not a fact, so the 10,000 seasons are played in a hundred batches and each batch redraws every team's attack and defence around its rating first. A strong start therefore counts, but not as proof that a team will keep it up for thirty more rounds. We chose this over our earlier method after replaying both on 316 finished league seasons from the seventh, twelfth and nineteenth round: the earlier one was too sure of early leaders, and this one called the champions, the top four and the bottom three better.
Fair odds explained
Alongside each probability we show a "fair odds" figure. This is simply the mathematical conversion of our model's probability into decimal-odds format: fair odds = 100 ÷ probability. For example, a 42% chance converts to fair odds of 2.38. It represents the break-even price for that outcome according to our model — the price at which backing it would, if our probability were exactly right, neither gain nor lose over the long run. These figures come entirely from our own statistical model. They are not odds offered by, quoted from, or linked to any betting operator, we do not compare them with anyone's prices, and this site carries no bookmaker advertising.
Reading a match page
Every match page carries the same charts, each with its own figures. What they show, and how to read them, is explained once here rather than under every chart.
Team comparison
Each bar shows a side's share of the two-team total for one measure, built from the model's attack and defence ratings and the expected goals for that fixture. A 60–40 split means the first side has three-fifths of the combined figure, not a 60% chance of winning.
How the probability is built, step by step
The steps start from two average sides on neutral ground and add one input at a time: each side's level, home advantage, attack and defence. Each step adds one input to the step before. In another order the steps would differ in size; the end point would not.
Likeliest scorelines
Each bar is the model's probability of that exact result, drawn against the likeliest one. The scorelines not shown share the rest of the probability. Scores always read home side first.
Recent form
The last results before kick-off, most recent first. The model does not rate a side on these results alone: it uses its goals over this season and last, adjusted for the opposition, so recent form is context for the number rather than the number itself (see Step 1 above).
Next matches
Each side's next matches on our board after this one. The colour is how strong the opponent is, from easier to harder: its model rating ranked among the teams of that competition, in fifths, so bright red is the top fifth whoever is playing it. The win figure is that side's own chance in that match, which is where venue and its own level come in. A match already on our board links to its own prediction; the rest follow as their week comes up.
What's at stake
From our season simulation of that competition, played out thousands of times by the same model as the prediction. Each figure is a side's chance of a final position once this match ends in a win, a draw or a defeat for it, with every other match still left to the model. The positions are places in the table, not competition rules: what a place is worth differs from league to league.
Season statistics
League matches only. Rates are per game, since the two sides have not always played the same number of matches; the tinted figure is the better one, where better is not a matter of taste. Source: API-Football season statistics, refreshed after each league match.
When the goals come
Each cell counts the league goals that went in during a 15-minute window. Each side's goals sit above the goals its opponent has let in over the same minutes; the darker the cell, the more goals in that window. Stoppage time counts in the last window of its half. Own goals are not always counted on the same side as in the table, so a row can be a goal off it. It is context, not a prediction.
Goal trends
The outer rings show how often each side's recent games before kick-off went over a goal line; the count of games is under each ring. The middle ring is the model's own probability for this match, from the same expected goals as the prediction. Past matches are context; the middle ring is the estimate. None of it is betting advice.
Position by match
Each side's league position, rebuilt from the season's results after each of its matches (the x-axis is that side's match number). Ties are split on goal difference, then goals scored, so a position can differ by a place from a table that uses head-to-head first.
Leading scorers
The top scorers by league goals this season. Player availability is not part of the model: injuries and suspensions are a planned improvement.
Where the model is wrong
A methodology page that only lists strengths is marketing. These are the known weaknesses, in rough order of how much they matter.
It was under-calling home wins, and no longer is. Measured in July 2026 across 173 settled pre-match predictions, the model gave home sides 41.7% while they actually won 51.4% of the time. Home advantage was raised twice in response, 1.15 → 1.30 → 1.35, both deliberately as half-steps: the value that would have closed the gap in one jump was around 1.56, but on a paired bootstrap its improvement could not be distinguished from noise, while 1.35 could. Re-run in August on 942 settled predictions — five times the evidence, and a month of league football rather than a week of summer qualifiers — the model gave home sides 46.8% against 47.2% observed. Since 22 September each competition carries its own measured home advantage instead (step 4), and the flat 1.35 survives only where a competition has no history. We are recording this because a methodology page that only ever lists open problems is telling you as little as one that lists none.
It predicted too many goals, and the fix has not yet been re-measured. Across 1,395 settled pre-match predictions made on the parameters of early September it expected 3.16 goals a game and got 2.89 — about 9% too many. Until 6 September 2026 this page quoted a harsher figure, 3.24 against 2.82 on a 942-match sample; the direction was right and the size was not, so we corrected it rather than leaving the more damning number up. The likeliest cause was that every competition was priced at the same goal level, while real leagues differ widely. Since 22 September each competition's goal level is measured instead (step 4); replayed on our settled predictions, that improved the over-2.5 forecasts with an interval below zero. A check of the live log in late September — most of it made before the change — still found the over-2.5 figure too sure of itself above 60%, and both-teams-to-score no better than quoting a league's own rate. So this stays on the list until the log made after the change says otherwise. These are the figures it touches directly: the over-2.5 and both-teams-to-score numbers are read straight off the goal level.
It backed away favourites too hard, and on domestic football no longer does. When the model made the away side the favourite it gave the home team 19–20% while the home team won 32–34% of those matches: a 13-point miss, and the largest single calibration error we could measure in our own log. On 27 August we wrote that this had been measured on the old model, that it had not been re-measured on the current one, and that we would not claim it fixed until it had been. It has now been re-measured. Of the settled predictions in the log, the 125 made on the old parameters give the home side 25.0% where it went on to win 39.2% of the time — a 14-point miss. The 354 made since give 27.3% against 29.1% observed, a miss of 1.8 points. Split by competition the closure is not even: domestic leagues account for it (288 matches, 0.8 points), while European ties still show a 6-point gap across 66 matches, which is too small a sample to call in either direction. So it is closed where we can see it and open where we cannot yet, and we would rather say that than round it to fixed.
It knows nothing about players. No injuries, no suspensions, no rotation before a European tie, no manager change, no red card in the first ten minutes. Match pages list the absences the data provider reports, but they do not enter the numbers: a team is rated the same the week its first-choice forward is ruled out. This is the largest single piece of information the model does not use, and adding it is the clearest improvement available to us.
Its evidence is uneven. A club with years in its division has a season and a half of matches behind its rating; a club promoted this summer has a handful in its new division, and leans on its starting point and the division leveling in step 3. Some of the competitions we cover are new to the site and have a shorter history of their own. Early in a season every rating in a league is short of data at once, which is when the anchor in step 2 is doing most of the work and our probabilities are at their flattest — correctly so.
International football is the weakest case. National-team competitions are played in divisions and groups whose teams never meet outside them — in the Nations League, League A plays only League A and League D only League D. That is not a thin sample, it is a disconnected one: the ratings graph falls into pieces with no result linking them, and our estimator centres each piece on the same average, so a League D side comes out looking like a League A side. No volume of results repairs it, because the information is not in the results. Since 7 September 2026 a national side's rating is pulled instead toward the strength implied by its FIFA World Ranking points — the release of 20 July 2026 — which is the only measurement of these teams that comes from outside the competition, and it is the same number shown in the FIFA column on their tables. Since 2 October 2026 a country's recent results are also judged against the ranking of the side they came against, so a 7-1 over San Marino no longer counts the same as a 1-1 with France; replayed on 2,200 past international matches, that called more results correctly and improved log-loss, with intervals clear of zero. The constants that turn ranking points into a strength are declared, not fitted: our settled-prediction log still holds too few national-team matches to fit against. And one problem is found and not yet fixed: a country rated through the World Cup carries that tournament's own scale rather than the ranking's. So these predictions are uncalibrated, we will keep saying so until the log is large enough to test them, and the fixtures remain sparse enough that a rating rests on games months apart.
And the base rate is humbling. Even a good football model is right about the outcome somewhere near half the time and names the exact scoreline in about one match in ten. Our running record is in that range. Anyone quoting a much higher figure is either counting differently or not counting.
How we check ourselves
Every prediction is written to a log before kick-off and never edited afterwards, together with the expected goals and the parameter values that produced it. That last part matters: without freezing the parameters, a later change to home advantage would silently rewrite history and make every past prediction look like something the model never said.
The log is then scored against results — how often the 1/X/2 call was right, how often the exact scoreline was, and how the probabilities perform under proper scoring rules that reward being well-calibrated rather than merely confident. The comparison that matters is not against zero but against a model that learned nothing. A change to the model is accepted only after it has been replayed on matches that were already played and its improvement survives a paired bootstrap; every change on this page since September went through that. The running record is on our track record page.
What our predictions are — and are not
Who runs this site
Fulltime Stats is an independent site, written and edited by Leo Tempo — a pen name, used on purpose. The same person runs the model, the data pipeline and the pages, and answers for every number on them. No club, league, data provider, betting operator or tipster is behind it. Questions and corrections go to contact@fulltimestats.com, or see the contact page.
Advertising on this site
Fulltime Stats is supported by standard display advertising, kept clearly separate from the predictions and analysis. We have no commercial relationship with any team, competition, or gambling operator.
Data sources
Fixtures, results, live scores, standings, expected-goals and player data come from API-Football (api-sports.io). The data is refreshed automatically several times a day; live scores reflect the most recent refresh. UEFA country coefficients are the published ones. The prediction model, the ratings, the levelling and all editorial framing are our own, and no part of any prediction on this site comes from another forecaster.
Corrections
When we find a mistake in the model we change it and say so on this page rather than quietly re-running the numbers. The home-advantage correction described above is the first entry; it will not be the last.
29 October 2026 — European ties leaned too hard on domestic form. AEK Athens at home to Real Madrid came out close to even, because AEK's rating rested on its run in the Greek league and nothing in it counted the European matches it had lost heavily. Replayed on 1,075 matches from the three UEFA club competitions, the two adjustments now described in step 3 gave better probabilities on the 2025-26 season, which the fit had not seen, and on the current one. Domestic predictions are unchanged, and predictions published before this date stay in the accuracy log exactly as they were made.
8 October 2026 — the 29 August correction went too far, and has been eased. On 29 August we flattened every match's home, draw and away split, because the model had been too sure of itself. Read on its own, the record since then shows the opposite problem: when the model gave one result 60% or more, it averaged 64% and that result came up 83% of the time. The earlier finding came from a track record that pooled predictions made before the correction with predictions made after it, and the two cannot be read as one. We re-fitted the correction on the 1,803 predictions made since 27 August only, with the earlier correction removed from each first, and tested it on the most recent of them, which the fit had not seen: the correction is now less than half as strong as before, and that scores better. It never changes which result the model favours, so the share of results it calls right is unaffected; what changes is how strongly it says so. Each prediction in our log now records the correction it was published with, the 90-minute score is what a prediction is scored against when a cup tie goes to extra time, and the accuracy page reads the strongest calls period by period instead of across the change.
2 October 2026 — title odds were too sure of early leaders. After seven rounds our projection gave Barcelona a 91.6% chance of the title, five points clear. Two things made it that sure. It rated teams on the current season alone, so seven rounds in, its long view of each side rested on seven matches — shorter than the memory the match predictions themselves use — and it read a slow start as a team's level for the rest of the season. And it replayed every simulated season on the same ratings, so the only uncertainty it allowed was in the scorelines. We replayed the old method and the new one on 316 finished league seasons. After the seventh round the old one gave its favourite about 93% in the few cases where it was that sure, and the favourite won two of those three; the new one, described under Season projections above, called the champions, the top four and the bottom three better, each with an interval clear of zero. The same day the movement figures on Title Races stopped comparing across the change for one update, because the difference between two methods is not something that happened on a pitch.
2 October 2026 — national teams' form now counts who it came against. Described under the weaknesses above. The trigger was Sweden against Romania, where a recent 7-1 over San Marino had made Romania the favourite against the FIFA order.
22 September 2026 — the ratings got a memory, and each competition its own goal level and home advantage. Described in steps 1, 2 and 4. The trigger was Brest against PSG, which the model had made Brest's to win because three weeks of PSG's form outweighed a title-winning season. Replayed on 1,526 settled predictions, the share of correct 1/X/2 calls rose from 45.9% to 47.9%. Predictions published before the change were scored against the numbers the model actually gave at the time, and we have not rewritten them.
6 September 2026 — the away-favourite gap has closed on domestic football, and one of our published weaknesses was overstated. Two figures on this page were measured in August and had not been re-checked since. Both were re-run against the log as it stands today, and both moved in our favour, which is the direction that most needs saying out loud. The away-favourite gap — the error this page called the largest it could measure — is 1.8 points on the 354 settled predictions made since the current parameters were adopted, against 14.2 points on the 125 made before them; the closure is carried by domestic leagues, and European ties still show a 6-point gap on 66 matches. And the goal level, which this page said was about 13% too high, is about 9% too high on 1,395 matches, needing a scaling nearer 8% than 13%. We are recording an entry for a correction that flatters us for the same reason we record the ones that do not: a page that only updates its numbers when they get worse is not being audited, it is being curated. Neither weakness has been deleted from the list above — the old figures are still there beside the new ones, because the path is the documentation.
27 August 2026 — home advantage was adding goals to every match. The formula above
multiplied only the home side’s expected goals by the home advantage, with nothing on the other side to
balance it, so every fixture asked for league average × (1 + 1.35) goals instead of
league average × 2. Measured across 1,031 settled matches, the model expected 3.31 goals a game
where 2.82 were scored — 17% too many. It showed up where you would expect: over 2.5 goals was published at
61.8% against a real 53.8%, and both teams to score at 59.4% against 51.9%. Splitting the advantage across
the two sides, as described in step 4, leaves the ratio between them untouched and brings the goal level to
2.80 against an observed 2.79. Two independent checks agreed the formula was the cause before it was changed:
the arithmetic predicts a 17.5% excess and the data showed 17.4%, and a fit that sees only which result
occurred — nothing about goals — recovered the exact correction the goal counts imply.
27 August 2026 — the model was too sure of itself. When it put an outcome above 65% it was right 59% of the time; when it put one below 10% that outcome still happened 18% of the time. Those are one error seen from two ends, not two errors: the three probabilities in a match add to 100 and exactly one result occurs, so every point handed to a favourite is a point taken from an underdog. The cause was the shrink in step 2 — ratings were left too far apart — and it has moved from 0.65 to 0.35, which is the value that best fits our own settled predictions and still fits them when tested on matches it was not fitted on. Two consequences we would rather state than have found. Predictions published before today were scored in the accuracy log against the numbers the model actually gave at the time, and we have not rewritten them, so the track record on our accuracy page covers two different models and will show a step where they meet. And the away-favourite gap described above was measured on the old model; it has not yet been re-measured on this one, and we will not claim it is fixed until it has been.
22 August 2026 — home advantage re-checked, and left alone. Not every entry here is a change. The 1.35 figure was set in July on 173 summer matches, which is thin evidence for the single largest multiplier in the model, so it was re-run against 942. It held, and the home-win gap it was raised to close is now closed. The same run showed the model's breakdown by competition type suggesting one home advantage for domestic leagues and a much larger one for European ties; that split was tested on matches it had not been fitted on, performed worse than the single value, and was not adopted. We are recording the check because "we looked and changed nothing" is a result, and a page that only reports the changes would imply the rest went unexamined.
22 August 2026 — second divisions were rated as though they were top flights. Described in step 3 above. The visible symptom was the opening-day Hull City vs Manchester United page, which gave a promoted side a 47% home win; the cause was that our cross-league leveling knew about countries and not about divisions. Predictions between two clubs in the same division were never affected. Those involving a promoted or relegated club were, in both directions: promoted sides were rated too highly, and relegated sides visiting their new division were rated too low. Pages published before this date were scored in the accuracy log against the numbers the model actually gave at the time, and we have not rewritten them.