Data doesn’t tell you what happened — it tells you what got recorded, from one particular way of watching a match. I’ve spent over a decade looking at spreadsheets for football scouting and analysis, and the biggest shift in how I work wasn’t a new model or a new dataset — it was realising that every number carries a point of view. An xG value is a judgement, not a fact. A pass completion rate hides who took the risk and who didn’t. Treating data as evidence to argue with, rather than a verdict to accept, is the starting point for everything else here.
That’s why uncertainty isn’t an afterthought — it’s built into the output. A player who put up a strong score across five matches means something different from the same score over twenty-five, and a report that hides that difference isn’t doing its job. Wherever it’s useful, a finding comes paired with a sense of how much to trust it: how much data it rests on, how stable the pattern actually is, and where the signal could just be noise.
In practice that means building things properly rather than quickly: pipelines that turn raw Opta and StatsBomb event data into the same clean structure every time, models that are calibrated and checked rather than just plausible-looking, and reports that lead with what changed and why. Most of the findings worth publishing started out as bugs I didn’t trust — the discipline is in checking a result twice before believing it, not in how fast it can be produced.
The process
Every project still follows the same four steps, whether it’s a one-off analysis or a season-long engagement:
- Ingest — Opta and StatsBomb event data is parsed and validated into a consistent match and season structure.
- Model — features are engineered and scored (xG, set-piece value, player roles) with calibrated models, not rules of thumb.
- Report — findings are written up in a consistent house style: one accent color, a finding as the headline, a source line on every page.
- Decide — reports and dashboards land with coaches, scouts or analysts in time to inform an actual decision.
Built with Python, Opta/StatsPerform and StatsBomb event data, XGBoost, pandas, matplotlib, and the Meridian house style used across every report.