# Does sacking the manager bring a bounce?

Source: https://www.footballdatascience.co.uk/myth-or-maths/new-manager-bounce
Published: 2026-10-02

> "New manager bounce." Across 80 Scottish Premiership changes since 2001/02, results did jump after the manager went, from 0.83 to 1.39 points a game. Sides with the same bad run that kept their manager jumped just as far.

**On the terraces:** Sack the manager and the results pick up. They do, but they'd have picked up anyway: sides on the same bad run that kept their man improved just as much. This piece shows why the bounce isn't the new manager.

## The claim

**"Sack the manager and you'll get a bounce."**

A new face in the dugout, a lift in the dressing room, and the results turn. Boards sack managers expecting it, and pundits point to it every time a new man wins his first game.

## Why people believe it

Because it happens. A side that's been losing changes its manager and starts picking up points. You see it at your own club, and you see it every season somewhere in the league.

What you don't see is the other half of the comparison: what would have happened if the club had kept him.

## The data

- **Every in-season managerial change** in the Scottish top flight from 2000/01 to 2025/26, taken from the "managerial changes" table on each season's Wikipedia page; most rows cite a BBC Sport report. That's 131 changes. The 2010/11 page has no table, so that season is missing.
- **102 of them** were the club's decision or followed bad results: sacked, resigned, left by mutual consent or contract terminated. Managers poached by another club, retirements and the end of interim spells are left out.
- **Every league result** from [football-data.co.uk](https://www.football-data.co.uk/scotlandm.php).

The compiled list is published as [manager-changes-spfl.csv](/static/data/manager-changes-spfl.csv), with the source for each change.

## The method

Take every change with **six league games either side** in the same season: 80 of them from 2001/02 on (2000/01 is left out because the comparison needs the previous season). Compare points a game before and after.

Then build the comparison nobody sees: **sides that had exactly the same points from their last six games, and were about as strong the season before, but kept their manager.** Every such six-game spell in 25 seasons counts, as long as no manager left within six games of it. Whatever those sides did next is what you'd expect from a changer if the change made no difference.

A gap between the two is only real if it's bigger than the luck margin, worked out here by resampling the 80 changes 4,000 times.

## The evidence

### The bounce is real

In the six games before the manager went, the 80 sides averaged **0.83 points a game**. In the six after, **1.39**. That's a jump of 0.56 a game, about three and a half points over six games, and it's exactly what fans and boards remember.

### Sides that kept their manager bounced too

The sides with the same run of results and similar strength that **kept** their manager went from **0.83 to 1.39** as well:

<figure class="rank-chart">
<div role="img" aria-label="Points a game in each of the six league games before and after a manager left. Changed manager, from six games before to the last game before: 1.14, 1.04, 0.72, 1.09, 0.68, 0.31; then 1.41, 1.32, 1.34, 1.50, 1.23, 1.55. Kept manager with the same run: about 0.83 in each game before, about 1.39 in each game after.">

</div>
<figcaption>Both groups start on the same run and finish in the same place. The changers' run slides into the sacking, with 0.31 points in the last game before it; the sides that kept their manager recover just as far without one.</figcaption>
</figure>

The extra from changing manager: **0.00 points a game**, with a luck margin of −0.13 to +0.13. Whatever the new man brings, it doesn't show up in the next six games.

### Why the bounce happens anyway

A run as bad as 0.83 points a game is partly the side's level and partly bad luck: the deflections, the penalties, the late goals. The luck doesn't carry on, so results drift back towards the side's real level whoever is in charge. That's [regression to the mean](/learn/where-priors-come-from), the same pull that makes [form fade](/myth-or-maths/form-vs-underlying).

Clubs also tend to act at the very bottom of a run. The game before the change averaged **0.31 points**: the sacking usually follows a defeat. Starting the clock from the worst point makes any recovery look like the new manager's work.

### Why strength matters

Match on the run alone, ignoring how strong the side was, and the change seems to add **0.13 points a game** (luck margin −0.02 to +0.28). That's because the sides that sack managers after a bad run are often better sides than the usual owners of such a run, so they would bounce further anyway. Compare them with sides of similar strength and the extra disappears.

### Every window says the same

| Games (changes) | Extra | Luck margin |
|---|---|---|
| 4 (87) | +0.04 | −0.10&nbsp;to&nbsp;+0.18 |
| 6 (80) | 0.00 | −0.13&nbsp;to&nbsp;+0.13 |
| 8 (71) | 0.00 | −0.12&nbsp;to&nbsp;+0.12 |
| 10 (53) | +0.02 | −0.11&nbsp;to&nbsp;+0.16 |

Extra points a game from the change, matched on run and strength.

## Verdict

**Not supported.** The bounce is real: results do pick up after a manager goes. But sides with the same bad run that kept their manager picked up just as much. On average, the new manager isn't the reason for the bounce; luck evening out is. For one club's change judged on its own, see [is the new manager really better?](/learn/new-manager-better)

## Caveats

- **On average, not every time.** Some appointments clearly worked and some clearly didn't; this says the typical change adds nothing you can see in six to ten games, not that managers don't matter.
- **The luck margin is ±0.13 points a game.** A real effect smaller than that, about three-quarters of a point over six games, could hide inside it.
- **Matching can't see everything.** A club might sack a manager over a dressing-room problem the results don't show yet, and that would favour the change.
- **Interim managers count as "after".** The six games after a sacking often include a caretaker.
- **One season is missing** (2010/11 has no table), and the dates are as Wikipedia records them. A spot-check of eight against their sources: six matched, one date was a day out, and two cited a report about the successor rather than the departure (neither of those two is in the analysis).
- **Longer-term effects aren't measured.** A new manager's signings and system take longer than ten games to show.

## Reproduce the analysis

Download the Scottish Premiership files (SC0) for 2000/01 to 2025/26 from [football-data.co.uk](https://www.football-data.co.uk/scotlandm.php), saved as `SC0_0001.csv` and so on; they aren't rehosted on this site. Download [manager-changes-spfl.csv](/static/data/manager-changes-spfl.csv) into the same folder. It runs in a couple of seconds:

```python
import csv
import random
from collections import Counter, defaultdict
from datetime import datetime

seasons = [f"{y % 100:02d}{(y + 1) % 100:02d}" for y in range(2000, 2026)]
PUSHED = ("Sacked", "Resigned", "Mutual consent", "Contract terminated")  # not poached, retired or the end of an interim spell

games = defaultdict(list)  # (season, club) -> points from each league game, in date order
for s in seasons:
    with open(f"SC0_{s}.csv", encoding="latin-1") as f:
        rows = [r for r in csv.DictReader(f) if r.get("FTR") in ("H", "D", "A")]
    for r in rows:
        date = datetime.strptime(r["Date"], "%d/%m/%Y" if len(r["Date"]) == 10 else "%d/%m/%y")
        x, y = int(r["FTHG"]), int(r["FTAG"])
        games[(s, r["HomeTeam"])].append((date, 3 * (x > y) + (x == y)))
        games[(s, r["AwayTeam"])].append((date, 3 * (y > x) + (x == y)))
points = {key: [p for _, p in sorted(g)] for key, g in games.items()}
dates = {key: sorted(d for d, _ in g) for key, g in games.items()}

def strength(s, club):  # last season's points a game, in bands of 0.4; promoted sides form their own group
    last = points.get((seasons[seasons.index(s) - 1], club))
    return "promoted" if not last else min(int(sum(last) / len(last) / 0.4), 5)

with open("manager-changes-spfl.csv", encoding="utf-8") as f:
    changes = list(csv.DictReader(f))
at = defaultdict(list)  # (season, club) -> how many league games had been played at each change
for c in changes:
    key = (c["season"][2:4] + c["season"][5:7], c["club"])
    at[key].append(sum(d <= datetime.fromisoformat(c["date"]) for d in dates[key]))
print(f"{len(changes)} in-season changes, 2000/01 to 2025/26 (no table for 2010/11); "
      f"{sum(c['left'].startswith(PUSHED) for c in changes)} sacked, resigned, by mutual consent or contract terminated")

def study(n, match_strength=True):
    """Each change with n games either side, and sides with the same run of points (and strength) that kept their manager."""
    pool = defaultdict(list)  # (points in last n, strength) -> the 2n games around every spell with no change near it
    for (s, club), pts in points.items():
        if s == seasons[0]:
            continue  # strength needs last season
        for i in range(n, len(pts) - n + 1):
            if all(abs(i - j) > n for j in at[(s, club)]):
                pool[(sum(pts[i - n:i]), strength(s, club) if match_strength else 0)].append(pts[i - n:i + n])
    cases = []
    for c in changes:
        s, club = c["season"][2:4] + c["season"][5:7], c["club"]
        i, pts = sum(d <= datetime.fromisoformat(c["date"]) for d in dates[(s, club)]), points[(s, club)]
        key = (sum(pts[i - n:i]), strength(s, club) if match_strength else 0)
        if c["left"].startswith(PUSHED) and s != seasons[0] and i >= n and len(pts) - i >= n and pool[key]:
            kept = [sum(spell[k] for spell in pool[key]) / len(pool[key]) for k in range(2 * n)]
            cases.append((pts[i - n:i + n], kept))
    return cases

def ppg(cases, part, n):  # points a game before or after, for the changers and for the matched sides that kept their manager
    sl = slice(0, n) if part == "before" else slice(n, 2 * n)
    return (sum(sum(c[sl]) for c, _ in cases) / (n * len(cases)), sum(sum(k[sl]) for _, k in cases) / (n * len(cases)))

def extra(cases, n, draws=4000, seed=1):  # after: changers minus matched sides, with a 95% range by resampling the changes
    one = lambda cs: sum(sum(c[n:]) - sum(k[n:]) for c, k in cs) / (n * len(cs))
    rng = random.Random(seed)
    boot = sorted(one([cases[rng.randrange(len(cases))] for _ in cases]) for _ in range(draws))
    return one(cases), boot[int(0.025 * draws)], boot[int(0.975 * draws)]

cases = study(6)
(b, kb), (a, ka) = ppg(cases, "before", 6), ppg(cases, "after", 6)
e, lo, hi = extra(cases, 6)
print(f"\nSix games either side, {len(cases)} changes (2001/02 on), matched on run and strength:")
print(f"  changed manager: {b:.2f} points a game before, {a:.2f} after, a bounce of {a - b:+.2f}")
print(f"  kept manager:    {kb:.2f} before, {ka:.2f} after, a bounce of {ka - kb:+.2f}")
print(f"  extra from the change: {e:+.2f} points a game (95% range {lo:+.2f} to {hi:+.2f})")
print("  game by game, changed / kept: " + ", ".join(
    f"{k - 6 if k < 6 else k - 5:+d}: {sum(c[k] for c, _ in cases) / len(cases):.2f}/{sum(kk[k] for _, kk in cases) / len(cases):.2f}"
    for k in range(12)))

print("\nOther windows, and matching on the run alone:")
for n in (4, 6, 8, 10):
    for both in (False, True):
        cs = study(n, both)
        e, lo, hi = extra(cs, n)
        (b, kb), (a, ka) = ppg(cs, "before", n), ppg(cs, "after", n)
        print(f"  {n:2} games, {'run and strength' if both else 'run only        '}: {len(cs)} changes, {b:.2f} -> {a:.2f}; "
              f"kept {kb:.2f} -> {ka:.2f}; extra {e:+.2f} ({lo:+.2f} to {hi:+.2f})")
```

## Further reading

- [Regression toward the mean](https://en.wikipedia.org/wiki/Regression_toward_the_mean), Wikipedia. Why extreme results tend to be followed by less extreme ones.
- [2023–24 Scottish Premiership](https://en.wikipedia.org/wiki/2023%E2%80%9324_Scottish_Premiership), Wikipedia. One of the season pages the changes were taken from; its "managerial changes" table cites a BBC report for each.
- W. A. Bruinshoofd and B. J. ter Weel (2003), "Manager to go? Performance dips reconsidered with evidence from Dutch football", *European Journal of Operational Research*. Twelve seasons of the Dutch top flight, a control group, and the same conclusion: results recover after a sacking, but they would have anyway.
