Sign in

Nils Mackay

@nilsmackay.bsky.social
3.4K followers 70 following 143 posts

Data Science at Opta

PostsRepliesMedia
Nils Mackay @nilsmackay.bsky.social · 24/07/2026
Looks like: "We optimised this weighting to maximise the predictive performance of our Elo ratings on future games, which results in our algorithm taking 80% of the Elo change from the actual scoreline and 20% from xG (when available)."
130
Reposted by Nils Mackay
cata @catabush.com · 23/07/2026
The newsletter may be a day late, but it's here. In this edition of The Post-Match Report, alongside the updates, we're looking at momentum (with a more level-headed approach this time). Where does it come from? What does it mean? Who did it first??
post-match-report.leaflet.pub
July 23: Momentum
Plus some fun research papers
12116
Reposted by Nils Mackay
John Muller @johnspacemuller.com · 17/07/2026
Yeah @eliotmckinley.com has been doing these for a while www.americansocceranalysis.com/home/2018/10... But I think this Hungarian one from 1927 still wins
2132
Nils Mackay @nilsmackay.bsky.social · 17/07/2026
Ha yeah maybe a bit naive from my side. At least I learned some cool stuff from it! Popularized by Opta would maybe be a more accurate assessment, specifically saying 'Opta' as that's more to the credit of the sales people at Opta for getting it on TV and then Fotmob and then FIFA World Cup.
120
Nils Mackay @nilsmackay.bsky.social · 17/07/2026
As ever, from the replies it's humbling to see you are _never_ the first one to do anything. Apparently: - @unravelsports.bsky.social was doing these around the same time in 2018/2019 - @visualisingdata.com was making these for Wenger in 2016 - Charles Reep (who else) already made these in the 1800s
2121
Nils Mackay @nilsmackay.bsky.social · 17/07/2026
I got you 😎
x.com
Nils Mackay (@NilsMackay) on X
Amazing scenes at Anfield yesterday. Liverpool dominating the start of both halves, and they made it count. Barcelona definitely had their opportunities though. And then just when Liverpool started...
120
Nils Mackay @nilsmackay.bsky.social · 17/07/2026
For those interested, here's the first Momentum graphic ever created:
x.com
Nils Mackay (@NilsMackay) on X
Even though the scoreline suggests otherwise, Liverpool really had the upper hand during most of the match last week against Barcelona. The second goal was completely against the run of the game at th...
220
Nils Mackay @nilsmackay.bsky.social · 17/07/2026
Talked a bit about the origin story of the "Momentum" graphic you might have seen during this World Cup with the @sport.nos.nl (Dutch). Got to be honest, when we made this in 2019 I _really_ didn't expect this to become a 'thing' ha.
nos.nl
Wat is dat 'match momentum' dat we tijdens het WK telkens in beeld zien?
Hoe wordt nou bepaald welk team het ongrijpbare 'momentum' heeft? En spelen de drinkpauzes tijdens het WK hierin nog een rol?
3116
Nils Mackay @nilsmackay.bsky.social · 15/07/2026
Lads its England
030
Nils Mackay @nilsmackay.bsky.social · 25/05/2026
You have to let us know how your FPL season finished man I'm too invested
120
Reposted by Nils Mackay
Pieter Robberechts @probberechts.bsky.social · 22/05/2026
What if you could simply “prompt” a model with a few shots and get accurate xG predictions? #TabPFN is making waves on academic benchmarks. We tested how it handles a real-world sports analytics problem. w/ Timo Martens & @jessejdavis.bsky.social dtai.cs.kuleuven.be/sports/blog/...
dtai.cs.kuleuven.be
Tabular Foundation Models for xG: Can TabPFN Score Without Training?
For years, the answer to “what’s the best model for expected goals (xG)?” has been boringly consistent: a carefully tuned XGBoost model…
0208
Nils Mackay @nilsmackay.bsky.social · 29/01/2026
Just need to figure out how to get all teams into Conference League and we should be fine!
020
Nils Mackay @nilsmackay.bsky.social · 29/01/2026
In each simulation where 🇳🇱 Netherlands retains 6th, you have: 🔹 At most 1 Portuguese team making the quarter-final 🔹 Feyenoord & AZ both making the quarter-finals Nothing is impossible, but we are currently saying this is about a 1 in 1000 possibility.
120
Nils Mackay @nilsmackay.bsky.social · 29/01/2026
🇳🇱 Netherlands is going to drop to 7th, losing a Champions League ticket to 🇵🇹 Portugal. While technically they are still ahead, League Stage bonus points will change this. 🇳🇱 will likely see 5/6 (!) teams eliminated in the group stage, 🇵🇹 instead, will see 4/4 teams qualify.
181
Nils Mackay @nilsmackay.bsky.social · 22/01/2026
Just to drive home what a great format the new Champions League is — with 1 game to go 30 out of 36 teams still have something to play for.
182
Reposted by Nils Mackay
Daniel Dinsdale @dannydinsdale.bsky.social · 16/01/2026
A great opportunity to showcase your skills to the wider sports analytics industry! We've had multiple recent presenters go on to join the Opta data science group. ⚽📐🐍
012
Reposted by Nils Mackay
Martin Eastwood @martineastwood.co.uk · 08/01/2026
Bayesian goal models are back in penaltyblog v1.8.0 - and this time, they’re dependency-free! ⚽️📈
A dark-themed code editor window showing Python code using the penaltyblog library. It demonstrates initializing a HierarchicalBayesianGoalModel with home/away goals and teams, fitting the model using MCMC sampling with parameters like 2000 samples and 4 chains, and finally predicting match probabilities for an Arsenal vs. Manchester City fixture
1133
Nils Mackay @nilsmackay.bsky.social · 28/12/2025
Will you remember us when you win the whole thing?
150
Reposted by Nils Mackay
Nils Mackay @nilsmackay.bsky.social · 16/12/2025
We are hiring! Are you a data scientist and looking for a career in football? Come work in our Data Science team at Stats Perform: tinyurl.com/statsperformds (India-based only for now, EU-people stay tuned)
tinyurl.com
Data Scientist II
Overview Stats Perform is the market leader in sports tech. We provide the most trusted sports data to some of the world's biggest organizations, across sports, media, and broadcasting. Through the la...
165
Nils Mackay @nilsmackay.bsky.social · 16/12/2025
If you have any questions, feel free to DM me and I'll try to answer when I have a moment.
010
Nils Mackay @nilsmackay.bsky.social · 16/12/2025
We are hiring! Are you a data scientist and looking for a career in football? Come work in our Data Science team at Stats Perform: tinyurl.com/statsperformds (India-based only for now, EU-people stay tuned)
tinyurl.com
Data Scientist II
Overview Stats Perform is the market leader in sports tech. We provide the most trusted sports data to some of the world's biggest organizations, across sports, media, and broadcasting. Through the la...
165
Reposted by Nils Mackay
Michael Cox @zonal-marking.bsky.social · 14/12/2025
The Oxford word of the year is RAGE BAIT. After calming myself down, I tried to work out what the football word of the year would be, 2000-25. www.nytimes.com/athletic/687...
nytimes.com
The football word of the year, 2000-2025: Park the bus, raumdeuter, prawn sandwich brigade
With 'ragebait' the Oxford English Dictionary word of the year, here's a look at what footballing equivalents might have been since 2000
5285
Nils Mackay @nilsmackay.bsky.social · 10/11/2025
As someone who's had to write code around MLS competition format, I can attest that best-of-3 is the worst thing in the history of football and MLS should be banned by FIFA as a fair punishment.
091
Nils Mackay @nilsmackay.bsky.social · 23/10/2025
Great article. My main question with an approach like this is how valuable is it really for clubs if most transfer targets will have taken relatively few shots? E.g. how many seasons of data do we need to make a judgement? Or how many shots? I imagine for most players it's indistinguishable from 0
120
Nils Mackay @nilsmackay.bsky.social · 02/10/2025
Champions League update! 🔹 Arsenal still on top! PSG joins the fight for first after an away win at Barca. 🔹 Qarabağ with 2 wins! Now 75% likely to make the next round. 🔸 Both Dutch teams in bottom 6 teams — heading towards elimination. 🔸 Athletic Club with 2 losses heading towards an early exit.
092
Nils Mackay @nilsmackay.bsky.social · 26/09/2025
Had a chat with @sport.nos.nl about the dire start of the European season for the Netherlands, and how it affects their chances of maintaining 6th on the UEFA Coefficients ranking.
010
Nils Mackay @nilsmackay.bsky.social · 26/09/2025
Battle for Top 10, good for direct UCL ticket: 78% —🇹🇷 Turkey (-12%) 60% —🇵🇱 Poland (+5%) 36% —🇨🇿 Czechia (-1%) 26% —🇬🇷 Greece (+8%) Battle for Top 15, good for 1 extra European ticket: 51% — 🇨🇾Cyprus (+18%) 37% —🇦🇹Austria (-13%) 8% —🇨🇭Switzerland (-7%) 5% —🏴󠁧󠁢󠁳󠁣󠁴󠁿Scotland (-2%)
030
Nils Mackay @nilsmackay.bsky.social · 26/09/2025
🇩🇪 Germany climbing up the ranks of the yearly Coefficients ranking — good for a bonus Champions League ticket. Two wins this week sees them rise from 5th to 3rd most likely to grab a ticket. England and Italy still favourites.
040
Nils Mackay @nilsmackay.bsky.social · 26/09/2025
Here's the consequences for 🇳🇱 the Netherlands after 5 losses in 5 games. 🔹 From 80% of 6th down to almost 50%. 🔹 Even chances of dropping below Belgium, up from <0.1% to now 1.7%. All that while the Netherlands still have 6/6 teams, while Portugal have lost 1 and Belgium already lost 2!
061
Nils Mackay @nilsmackay.bsky.social · 15/09/2025
Congrats Sam!
010
Nils Mackay @nilsmackay.bsky.social · 04/09/2025
Probably not France, but definitely for Portugal and the Netherlands. Dependent on how this season goes, they might start the season in 6th even!
020
Nils Mackay @nilsmackay.bsky.social · 04/09/2025
Clearly putting more effort into the offensive run!!
010
Nils Mackay @nilsmackay.bsky.social · 02/09/2025
That said, a 6 point gap is not nothing. Things will have to go quite bad for Germany and vice versa for France to make this a reality. Still, it's the closest a country has been to breaking into Top 4 since 2014. Last year the gap was 13 points, and ±20 points the years prior.
030
Nils Mackay @nilsmackay.bsky.social · 02/09/2025
New year, new coefficients simulation! ⚠️This year is the first time I've seen where the Big 4 might actually be challenged, as 🇫🇷 France _could_ overtake 🇩🇪 Germany. Being Top 4 gives you 4 direct UCL spots, which are now at risk for Germany, after some poor seasons in Europe.
2143
Nils Mackay @nilsmackay.bsky.social · 02/09/2025
That's fair. Truth is the model does a simulation and there's some noise involved, and especially with very low numbers like Marseille ending 1st this can lead to some weird looking results. The 0.2% ending 1st for them is likely a fluke of this specific simulation.
010
Nils Mackay @nilsmackay.bsky.social · 01/09/2025
Finally, here's our Conference League predictions. Again an English team favourites to win the League Stage — just like Chelsea was last year. Top 24 achievable for all, even lowest rated teams Shelbourne/Aberdeen with a ±20% chance!
071
Nils Mackay @nilsmackay.bsky.social · 01/09/2025
In the Europa League, English teams are once again favoured to make an impression. Here's how we estimate each teams' likelihood of Top 8 and Top 24 in the League Stage.
0101
Nils Mackay @nilsmackay.bsky.social · 01/09/2025
A new #ChampionsLeague season is upon us! Here's each team's likelihood of qualifying for Top 8 or 24, according to our predictions:
1247
Nils Mackay @nilsmackay.bsky.social · 15/05/2025
First place is lava!
3151
Nils Mackay @nilsmackay.bsky.social · 02/05/2025
Nice writeup! Any reason you didn't go with actual game results (instead of simulated ones) for the final test?
110
Reposted by Nils Mackay
Lorenzo Cascioli @lorenzocascioli.bsky.social · 24/04/2025
🚨The third and final blog post in our series on possession value models design decisions🔍: Can the features chosen to represent the game state inadvertently bias player ratings? w/ @probberechts.bsky.social @jessejdavis.bsky.social Lode Van Tente dtai.cs.kuleuven.be/sports/blog/...
dtai.cs.kuleuven.be
An experimental analysis of possession state value models: part 3
Conceptually, possession value approaches such as VAEP, PV, OBV, and g+ are all identical: they estimate the chances of scoring (and…
2166
Nils Mackay @nilsmackay.bsky.social · 19/04/2025
I love using em dashes (—) whenever I write something, but now it seems people will just think I'm using an LLM. 💀
050
Nils Mackay @nilsmackay.bsky.social · 11/04/2025
Yes, then 6 Spanish teams will be in UCL next year.
110
Nils Mackay @nilsmackay.bsky.social · 11/04/2025
I never realized it can be used in two different ways and now I will forever doubt if I'm using it correctly, thanks John.
130
Nils Mackay @nilsmackay.bsky.social · 11/04/2025
Not many changes on the coefficients table: 🇳🇴 Bodo/Glimt win means Norway overtakes Greece 🇵🇱 Both Polish teams lose, and 🇦🇹 Rapid Wien with a win, which means places 13-15 look mostly set. 🇸🇪 Djurgården lose and thus Sweden less like to overtake Croatia or Cyprus.
050
Nils Mackay @nilsmackay.bsky.social · 11/04/2025
After Lazio's 2-0 loss last night, the battle for the Champions League bonus ticket is just about over. 🏴󠁧󠁢󠁥󠁮󠁧󠁿 England's #5 is guaranteed a CL ticket 🇪🇸 Spain's #5 is 99.8% sure For 🇩🇪 and 🇮🇹 having 8 teams didn't help, but in the end they also didn't perform at the level needed.
172
Nils Mackay @nilsmackay.bsky.social · 10/04/2025
Yeah that's a pain for sure haha. Good luck!
020
Nils Mackay @nilsmackay.bsky.social · 10/04/2025
Yeah that looks about right. With AH you have to take into account both the probability and the spread of the given AH odds, if you're not doing that already.
110
Nils Mackay @nilsmackay.bsky.social · 10/04/2025
From the goal line you can find the poisson rate which matches the over/under. That gives the total goals expectation. From the AH odds you can do a similar thing, dividing the total goals in a way which matches the AH spread and odds. Both can be found e.g. with scipy.optimize.
100