Start with the question
A technically impressive model is useless if nobody knows what decision it supports.
Projects and writing
This is where I try new methods outside work. The aim isn't to make football look scientific. It's to use evidence well, be honest about uncertainty and still leave room for the game itself.

Publication · 500+ subscribers
An Arsenal publication that started with data-led player analysis and grew into modelling, economics, tactics and long-form writing.
The analysis uses football-data.org, FBREF and reproducible Python workflows. Recent expected points work combines weighted rolling form, Poisson goal models, a Bayesian layer and 10,000-season Monte Carlo simulations. Recruitment pieces use K-means similarity and Random Forest regression, and always spell out the limitations.
Poisson, weighted rolling averages, Bayesian updating and Monte Carlo, explained for football people.
↗ Expected points · 2026Why a probabilistic view of team strength tells us something the league table can't.
↗ Recruitment · 2025A Random Forest model for projecting goal contributions and testing shortlists.
↗ Long-form · 2026A personal essay on fandom, narratives and what statistics can't settle.
↗
Football analytics blog
A long-running football data science blog on how data can reveal player roles, performance and positional fit.
It started with one question: can machine learning find a better position for a player? That turned into a practical curriculum in sourcing data, scraping FBREF, working with StatsBomb event data, building repeatable visualisations, clustering player roles and measuring similarity.
K-means and player profiles applied to scouting, squad building and performance evaluation.
↗ Clustering · 2024Grouping players by how they actually play rather than their listed position.
↗ Data engineering · 2024A practical pipeline from public football data to analysis-ready datasets and charts.
↗
End-to-end machine learning
A tournament forecast built from historical international results and FIFA ranking data.
Feature engineering, scikit-learn and XGBoost feed a Monte Carlo simulation. Instead of one bracket, repeated tournament runs show the distribution of possible outcomes.

Earlier experiment
A music discovery app that uses Spotify's API and machine learning to turn listening history and audio features into recommendations.
An early end-to-end project in API integration, data preparation, similarity logic and lightweight delivery through Streamlit.
How I build
A technically impressive model is useless if nobody knows what decision it supports.
Probabilities, assumptions and model limits belong in the output, not in a footnote.
The method matters, but the explanation is what lets other people check it and use it.
Contact
For conversations about data, risk modelling or statistics, or anything on this site.
Contact ↗From CannonIQ
Questions about a post, a correction, or an idea for a future piece.
Get in touch ↗