Three tiers of data.
SportsMonks API v3
114 processed fixtures across three seasons. 44 match statistics per team per match - shots, tackles, passes, possession, interceptions, key passes, big chances, and more. Also: lineups, formations, ball coordinates, goals, and scores.
Understat
Match-level xG: all 114 fixtures across three complete seasons. Per-shot records with coordinates: 106 fixtures - full Klopp and Slot Y1, plus the first 30 of Slot Y2. Enables xG/match, xG/shot, and open-play vs set-piece breakdown.
FBRef
PPDA (passes allowed per defensive action) per match - a more precise pressing intensity proxy than tackle counts. Integration in progress; current pressing analysis uses SportsMonks tackle and interception data.
Raw data is not published. Analysis code is available in the GitHub repository. All data used under respective providers' terms.
How findings are tested and labelled.
Confirmatory analysis (Klopp 2023–24 vs Slot Y2 2025–26): Mann-Whitney U tests with Bonferroni correction across a family of 44 statistical metrics (α/44 ≈ 0.00114). Mann-Whitney U is a non-parametric rank-based test - appropriate for match statistics, which are bounded and often skewed. The original notebook analysis used Welch's t-test; the confirmed findings below hold under both approaches. Only findings that survive the Bonferroni threshold are reported as confirmed. Full-season data used: 38 Klopp matches, 38 Y2 matches.
Exploratory analysis (Slot Y1 vs Y2): Y1-vs-Y2 comparisons report effect sizes and directional signals only. These are clearly labelled as directional. Nominal p-values are noted but not treated as sufficient on their own.
Effect sizes: All findings include Cohen's d (standardised mean difference). d = 0.2 is small, d = 0.5 is medium, d = 0.8 is large. The confirmed findings range from d = 0.89 to d = 1.06 - large to very large effects.
House style: Observed = descriptive data trend from a single source. Confirmed = survived Bonferroni-corrected statistical testing. Directional = suggestive, exploratory, or not corrected for multiple comparisons.
What survived the strictest test.
Klopp 2023–24 vs Slot Y2 2025–26. Mann-Whitney U, Bonferroni-corrected across 44 metrics.
What this analysis cannot claim.
No causation. This analysis documents associations between seasons - it does not establish that any specific change (manager tactics, player departures, injuries, fixture difficulty) caused the observed declines. Where timing is noted (e.g. set-piece xG and Trent Alexander-Arnold's departure), it is presented as consistent with the data, not proven by it.
No opponent adjustment. All metrics are raw - they do not adjust for opponent strength. A tackles-per-match average of 13.0 means different things against different opposition. Opponent-adjusted metrics are planned but not yet complete.
Y2 sample. Slot Y2 is a complete season - 38 of 38 matches played (final match: Brentford away, May 24, 1–1). Match-level xG covers all 38 matches. xG/shot and set-piece xG are from the original 30-match Understat shot-level pull and are labelled accordingly.
Mixed shot-level sample. The shot volume (15.5/match) and xG/shot (0.118) figures come from the first 30 matches of Y2 (original Understat shot-level pull). Match-level xG covers all 38 matches. These two samples are clearly distinguished throughout the analysis wherever shot-level figures appear.
Running the analysis.
The full pipeline - data collection, processing, and analysis - is available in the GitHub repository. Requires Python 3.11+, Poetry, and a SportsMonks API key.
Analysis scripts in scripts/analysis/ run end-to-end and reproduce all 26 charts.
Statistical helpers (Mann-Whitney U, Cohen's d, Bonferroni correction) are in
src/liverpool_strategy/analysis/notebook_helpers.py.
Raw and processed data are not published in the repository. Aggregate outputs and methodology are fully documented in the code.