Form Is a Rumor: Your Team's Last Three Games Can't Forecast Its xG
A new peer-reviewed study asked a question every modeler has quietly wondered: can a team's xG history forecast its next match xG? The authors ran five forecasting strategies, from a simple rolling mean to XGBoost and a Temporal ConvNet, over 32,031 matches and 825,588 shot-level records with StatsBomb xG. Their answer: the mixed-effects model and XGBoost won, and recent xG history adds only limited incremental value once team-season and opponent-season context is in the model. Form, it turns out, is mostly noise wearing a narrative.
We ran the same question on our own feed. The result is even starker.
The experiment
Take every Premier League team after three games. Forecast game 4 and game 5 as the average of its last three xG figures, the way a form-based model would. Then check the forecast against what actually happened. Forty predictions, twenty teams, no peeking.
If recent form carried signal, the forecasts should track reality. They don't. The correlation between a team's rolling three-game xG and its actual next-game xG is 0.09. Between one game and the very next, it is -0.04. That is not weak signal. That is no signal.
Here is the uncomfortable part: simply guessing the league average (1.52 xG) for every team, every game, would have been closer than using recent form. Average error with the form forecast: 0.63 xG. Average error guessing the league average: 0.52. The form-based forecast beat the naive average in only 16 of 40 predictions. You would have done better ignoring form entirely.
Where form lied loudest
Form missed by more than a goal a game for Sunderland and Manchester United.
Average xG over the last three games against the next two, Premier League 2026/27, matchweeks 1-5, xG per game
| Team | Last-3 xG avg | Next-2 games avg | Miss |
|---|---|---|---|
| Manchester United | 2.43 | 1.30 | 1.13 |
| Sunderland | 1.47 | 2.69 | 1.22 |
| Chelsea | 1.85 | 0.87 | 0.99 |
| Hull City | 0.77 | 1.49 | 0.72 |
| Crystal Palace | 1.53 | 0.84 | 0.70 |
| Brentford | 2.25 | 1.57 | 0.68 |
| Fulham | 1.81 | 1.16 | 0.64 |
Source: Opta expected goals, 50 Premier League matches (Aug 21 to Sep 20, 2026), Dribble API, Oct 9, 2026
Manchester United carried the league's hottest rolling xG (2.43) into game 4, then produced 1.00 xG against Manchester City. Sunderland looked mid-table on rolling form (1.47) and then posted 3.57 against City. Brentford's 2.25 rolling average collapsed to 0.50 against Bournemouth, then bounced to 2.65 against Chelsea in the very next game. The matchup moved the number, not the momentum.
Why this happens
The paper's winning models didn't win by reading form better. They won by knowing who teams are and who they play: team-season and opponent-season effects absorbed almost everything recent history had to offer. A team's next xG is a function of its structural chance creation and the opponent's structural chance suppression, not of what happened last Saturday. Five games of our data can't fit their full machinery, but the raw phenomenon shows up anyway: context dominates, form decorates.
What to do with this
If you run a model, a spreadsheet, or even a group-chat prediction league:
1. Stop pricing off a 3-to-5 game rolling average. It feels rigorous and predicts nothing. Test it yourself: replace your form input with the league average for a month and see if your error gets worse. Our bet is that it won't.
2. Spend your modeling budget on matchup context. Team strength and opponent suppression, estimated over the season, are where the signal lives. That is what the paper's mixed-effects model and XGBoost were actually capturing.
3. Treat hot and cold xG streaks as scheduling artifacts first. A team's "improved attack" is often just two soft opponents in a row. Check who they played before you check what they created.
Honesty box: this is a replication in miniature, 40 predictions from 20 teams over 5 matchweeks, and the two predictions per team come from the same matches, so they aren't fully independent. The paper's 32,031-match study is the authority; ours is a check on our own feed. Our numbers use Opta xG, the paper used StatsBomb xG. Home and away are not separated here.
Where the numbers come from
Every figure is computed from Opta expected goals for 50 played Premier League 2026/27 league matches (matchweeks 1-5, Aug 21 - Sep 20, 2026), queried live from the Dribble API on Oct 9, 2026. Rolling forecasts use each team's prior 3 (or 2) games; the baseline is the league average of 1.52 xG per team-game. The study is "From Shots to Forecasts: One-Step-Ahead Prediction of Team-Level Expected Goals in Football" (MDPI Applied Sciences). No pundit vibes, no eye test.
Want the underlying data? The same xG feeds behind this piece, including the team-season and opponent-season splits the paper's winning models rely on, are available as BigQuery tables, API endpoints, and downloadable files. See plans and pricing