While a big part of what I do with football data is predictive, I wanted something that neutrally describes what’s actually possible (and impossible).

I’ve written some code that runs through every possible combination of results from a given round of matches and works out what the league table would look like for each one. It then aggregates these to show what the highest and lowest positions attainable by each club are and how many ways there are of achieving each, to set some expectations around how much the table can change in a given week.

Because I’m interested in what’s genuinely possible (and impossible), I’ve ignored goal difference and just considered three possibilities for each match: home win, draw and away win. This is probably just as well, given that even having just those three possible outcomes for each of the 12 matches in one division represents 3^12 = 531,441 different combinations for my modestly-specced laptop to crunch through.

If I wanted to look at individual scorelines then the numbers quickly become obscene. Even if I only wanted to sim every possible result between 3-0 and 0-3, I’d be looking at a completely unmanageable 16^12 = 281,474,976,710,656 different combinations to simulate per division each weekend.

Here’s what a typical week’s graphic looks like:

CH permutations 2015-10-24

The green blob is the highest position a club can possibly rise to and the red is the lowest they can sink for the round of matches in question. Grey blobs – both the small ones and the larger numbered ones – indicate a club’s current position.

The range of possible positions will start out wide at the beginning of a season, narrowing as time goes on and three points starts to represent an increasingly small percentage of the average club’s total. We should also see some patterns as clubs start to cluster into groups and gulfs start appearing in the table.