Projects and writing

Independent 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.

CannonIQ artwork
Arsenal · data · economics · opinion

Publication · 500+ subscribers

CannonIQ

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.

Methods
Poisson · Bayesian modelling · Monte Carlo · K-means · Random Forest
Subjects
Expected points · recruitment · tactics · football finance · fan culture
Approach
Explain the maths in plain English, and never present a probability as a certainty.
Read CannonIQ ↗
Pitch IQ mark
Learning in public since 2022

Football analytics blog

Pitch IQ

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.

Data
FBREF · StatsBomb open data · football-data.org
Techniques
Web scraping · K-means clustering · player similarity · radar charts · event maps
Purpose
Make football analytics approachable without pretending the data is complete.
Visit Pitch IQ ↗
Decision tree illustration for the EURO 2024 project
Tournament forecasting

End-to-end machine learning

UEFA EURO 2024 Predictor

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.

XGBoostscikit-learnMonte CarloPython

View the repository ↗

Spotify recommendation project interface
Recommendation systems

Earlier experiment

Spotify Recommendation Engine

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.

Spotify APIPythonMachine learningStreamlit

Open the app ↗

How I build

Three rules for independent work

Start with the question

A technically impressive model is useless if nobody knows what decision it supports.

Show uncertainty

Probabilities, assumptions and model limits belong in the output, not in a footnote.

Write for people

The method matters, but the explanation is what lets other people check it and use it.

Contact

Get in touch

For conversations about data, risk modelling or statistics, or anything on this site.

Contact ↗

From CannonIQ

Read something you want to talk about?

Questions about a post, a correction, or an idea for a future piece.

Get in touch ↗