Does form matter more than underlying performance?
"Forget the stats, look at the form." Over 26 Scottish Premiership seasons, a side's shot difference predicted its next six games better than its recent points did, and a gap of eight points in form shrank to under one.
Intermediate
Contents
The claim
"Forget the stats. Look at the form."
Form is the first thing anyone checks before a match: the little row of Ws, Ds and Ls next to each team's name. A side on a winning run is confident and hard to beat. A side on a bad run is in trouble, whatever the numbers say about how well it's playing.
Why people believe it
Form is results, and results are what count. Points win leagues, not shots. It also feels like it captures something the numbers miss: confidence, momentum, a dressing room that's together. When a side keeps winning, it's natural to believe it has found something, and when it keeps losing, that something has gone.
The data
Every Scottish Premiership match from 2000/01 to 2025/26 that records shots: 5,877 matches, from football-data.co.uk. Each team's season was cut into spells of six games, giving 1,546 pairs of a six-game spell and the six games that followed it.
The method
For each spell, measure two things:
- Form: the points the side took from those six games.
- Underlying performance: its shot difference over the same six games, shots taken minus shots faced.
Then ask which one better predicts the points it takes from the next six games. If form matters more, the points should win.
The evidence
Shot difference predicts better
Each number is a correlation: 0 means no link, 1 a perfect one. Recent points are the weakest of the four. Shot difference is the strongest, and the gap between them is too consistent to be chance: across 2,000 resamples of the data, shot difference beat points in 1,998 of them, typically by between 0.03 and 0.10.
Put both into the same prediction and shot difference does about twice as much of the work as recent points.
Hot form, poor football
The clearest test is where form and performance disagree:
| Last six games | Spells | Points then | Points in the next six |
|---|---|---|---|
| Hot form (12+ points), but outshot | 60 | 13.1 | 8.4 |
| Poor form (6 or fewer), but outshooting | 96 | 4.7 | 7.6 |
A gap of more than eight points in form shrank to less than one over the next six games. Both groups ended up close to the league average of 8.3 points per six games. The hot side's run was mostly luck, and so was the cold side's slump.
In plain football
- A side taking 13 points from six games while being outshot is winning more than its football deserves. Expect that to stop.
- A side taking 5 points from six while outshooting its opponents is playing better than its results. Expect that to turn.
- Six games is a short run. A couple of deflections, a missed penalty or a red card can swing it, and they don't carry over.
This is regression to the mean: extreme runs of results are partly luck, and luck doesn't last, so what comes next is usually closer to average. Form or luck? lets you see how long a streak pure chance can produce.
Verdict
Not supported. Recent form does predict the next few games, but less well than how a side has actually been playing. When form and performance disagree, back the performance. A winning run while being outshot is a warning sign, and a losing run while outshooting everyone is usually about to end.
Caveats
- Shots are a rough measure of performance. Expected goals (xG) would be better, but these files don't include it. Shots still did better than points.
- The correlations are all modest. Six games is a small sample of anything, so none of these measures predicts the next six games well. Shot difference is just the least bad.
- Confidence and momentum might still exist. This shows that form adds less than shot difference; it doesn't prove that form adds nothing. In a model with both, recent points still carry some weight.
- Scotland's top two win most games and outshoot most opponents, which strengthens every one of these links a little.
Reproduce the analysis
The results files are published by football-data.co.uk. Download the Premiership file (SC0) for each season and save each under its own name, such as SC0_2425.csv; they aren't rehosted on this site. Then:
import csv, glob, statistics
from datetime import datetime
form, shot_diff, next_points = [], [], []
for path in glob.glob("SC0_*.csv"):
games = {}
with open(path, encoding="latin-1") as f:
for r in csv.DictReader(f):
if not all(r.get(c) for c in ("FTHG", "FTAG", "HS", "AS")):
continue
day = datetime.strptime(r["Date"], "%d/%m/%Y" if len(r["Date"]) == 10 else "%d/%m/%y")
hg, ag, hs, as_ = (int(r[c]) for c in ("FTHG", "FTAG", "HS", "AS"))
for team, gf, ga, sf, sa in ((r["HomeTeam"], hg, ag, hs, as_), (r["AwayTeam"], ag, hg, as_, hs)):
games.setdefault(team, []).append((day, 3 if gf > ga else 1 if gf == ga else 0, sf - sa))
for rows in games.values():
rows.sort()
for start in range(0, len(rows) - 11, 6): # six games, then the next six
spell, after = rows[start:start + 6], rows[start + 6:start + 12]
form.append(sum(g[1] for g in spell))
shot_diff.append(sum(g[2] for g in spell))
next_points.append(sum(g[1] for g in after))
print(len(form), "spells")
print(f"form: {statistics.correlation(form, next_points):.2f}")
print(f"shot difference: {statistics.correlation(shot_diff, next_points):.2f}")
Spotted a flaw in the method, or have a football claim you'd like tested? Suggest it on LinkedIn, where discussion of these articles happens.