Fixture probabilities, computed and then explained
Can a language model price a football match?
python3 predict.py
The whole study is the difference between two tables
Bucket away results by how far the side travelled and you find an effect. Compare the same matches against what the market charged for them and it disappears. Both readings are correct; only one of them is news.
Points per game falls from 1.25 to 1.15 as the journey grows. Goals conceded rise from 1.54 to 1.60. There is the travel effect.
Against the price the gap moves 1.8 points in total, inside noise of 4.3. The pale band is that noise. Every bar sits within it.
Why the naive reading is wrong
Long trips happen to weaker sides
Distance is not randomly assigned. In any league the clubs at the geographic edges travel most, and travelling sides are on average the weaker ones in the fixtures that produce long journeys. Bucket by distance and you have measured the fixtures.
The price already knows everything
A kickoff price contains form, injuries, rest, motivation and whatever the market believes about the journey. Comparing the outcome against the implied probability removes all of it in one step. What is left is only what the market got wrong.
A flat line is a result
Nothing here is a failed run. A liquid market pricing travel correctly is exactly what should happen, and it is worth knowing the next time somebody sells a travel angle. The finding is that the obvious edge is not there.
Three more ways to look for it
If travel were mispriced anywhere, it would most likely be for a particular kind of side, after a short rest, or both at once. None of them beat their own noise.
What it needed from the archive
Three fields. The first two are the reason this study is possible here and awkward anywhere else.
/v1/matches
Results and prices, walked by cursor
680,916 matches
/v1/teams/{id}/match-stats
Corners, cards and fouls per club
/v1/standings/{id}/{season}
Position and games played
away_travel_km
How this club fares on trips this long
556,507 matches
Bands were fixed before any result was looked at. Bands chosen afterwards are how a flat line becomes a finding, and it is the easiest way to fool yourself here.
Check it yourself
Every figure on this page comes from public endpoints. The script is forty lines of arithmetic over a walk of the archive, and it prints its own working.
python3 predict.py
View the repository
A free key reads yesterday, as one whole day, so the script says which key it ran on before it starts. The numbers above are from a full key. Get a free key · The PHP client