Sports Dashboard

MI Bivariate Poisson + Dixon-Coles + Elo

← Back to Blog
|Signal Test|REJECTED

Testing Manager Change Windows: Why the Rolling Lookback Already Handles It

We tested whether truncating xG histories at mid-season manager changes improves variance regression. Built the infrastructure, loaded 877 changes across 101 teams, ran the 10-gate approval. Result: zero marginal ROI. The 10-match rolling lookback already ages out old-manager data naturally. The system was self-correcting all along.

Testing Manager Change Windows: Why the Rolling Lookback Already Handles It

When a team fires its manager mid-season, everything changes — pressing triggers, defensive shape, passing networks. The xG profile under a new manager can look completely different from the previous regime. So we asked: does the variance regression filter work better if we only feed it post-change data?

The Question

Our variance regression filter uses the last 10 matches of xG data to detect teams over- or under-performing expectations. When a team changes managers, those 10 matches could mix two completely different tactical systems — a gegenpressing manager's xG alongside a deep-block manager's xG. That's noise, not signal.

The hypothesis: explicitly resetting team xG history at manager change boundaries should produce cleaner variance signals and better bet selection.

What We Built

We loaded 877 manager changes across 101 teams from Fotmob's coaching history (529 of those mid-season changes). For each mid-season change, we estimated the match number where the new manager took over from the outgoing manager's games played.

The implementation resets a team's xG history when a mid-season change is detected. Instead of carrying forward 10 matches of mixed-manager data, the team starts fresh. The first few matches under the new manager build up from zero — no old-system contamination.

This is a data-windowing change, not a filter. The rest of the pipeline (Ted filters, market evaluation, sizing) runs identically. One variable isolated.

What We Found

MetricStandardManager WindowDelta
Bets6,6066,397-209
CLV+11.2%+11.2%+0.0pp
ROI-3.0%-3.0%+0.0pp
P&L-195.9u-188.8u+7.1u

Zero marginal ROI. The window changes which bets are selected — 489 new bets appear that weren't in the base, 698 existing bets disappear — but the net effect on the portfolio is nothing.

The directional read is mildly encouraging: added bets are +0.7% ROI, removed bets are -0.5% ROI. The mechanism is doing what we expected at the individual-bet level. But the magnitude is too small to matter.

The Nuance

Per-league results are all over the map. Portuguese Liga improved +6.7pp, Serie A +4.7pp, Argentina +4.5pp. But Bundesliga degraded -6.7pp, EPL -3.0pp, La Liga -2.1pp. No consistent geographic or tier pattern.

Walk-forward was unstable. Only 2 of 4 season folds were positive (2022: +1.3%, 2023: -0.0%, 2024: -3.9%, 2025: -9.9%). The signal gets worse over time, which is the opposite of what you'd want.

The 10-gate approval returned 5/10. Failed gates: Marginal ROI (0.0%), Bootstrap significance (p=0.503), Suspicious N (standalone pool identical to 12 other non-filter signals), Practical significance (0.0pp < 0.5pp threshold), Walk-forward (2/4 folds).

Why It Doesn't Work

The answer is elegant: the system is already self-correcting.

The variance filter uses a rolling 10-match window. When a manager changes mid-season, the old manager's data doesn't persist forever — it rotates out as new matches are played. After 10 matches under the new manager, the window is entirely clean. The explicit reset only affects matches 1-9 post-change.

And in those first 9 matches, the variance filter already struggles. It requires 10 matches of history to detect regression candidates (if (hist.matches.length < VARIANCE_LOOKBACK) return false). So for most post-change windows, the team is already being skipped by the variance filter — exactly the right behavior.

We built an explicit mechanism to handle something the rolling window handles implicitly.

What This Means

Signal shelved. No code deployed. The infrastructure we built (lib/backtest/manager-window.ts, buildTeamHistoriesXGManagerWindow in the data loader) is available if a future signal needs manager change detection, but the xG windowing hypothesis itself is dead.

What's Next

The manager change data could be useful for a different hypothesis: a simple skip-filter that avoids betting on teams within N matches of a manager change (where N < 10, before variance stabilizes). The added/removed bet analysis hints there might be something there at very low N. But the marginal would need to exceed +0.5pp, and with only ~200 mid-season changes in the backtest window, sample size is tight.

REJECTEDSignal: manager-change-xg-window|2026-03-19