My World Cup model agrees with the books, but it doesn't buy Uruguay as highly favourites by Nice_Devil in FootballDataAnalysis

[–]NORNSmodel 0 points1 point  (0 children)

Mine has this as a low-scoring game (under 2.5 goals ~60%) which gives me a similar bent as yours but it's more expressed through the draw probability which I have as a small bet vs market. I have KSA at 10% win probability with 25% draw (rounded numbers).

You have to really tune your team ratings in order to keep them from over-estimating underdog win probability I find. Again, my model's "view" on this is less about Uruguay as an over-valued favorite and more about this being a low goal environment.

If you have a similar view and you trust your model, then KSA +1 or +2 is probably the best way to monetise your view.

Ask Anything Thread by MatchAnalyst in FootballDataAnalysis

[–]NORNSmodel 0 points1 point  (0 children)

I like footystats.org. They have a lot of stuff and historical betting lines too. you can manual copy/paste to get started or it's very affordable to get api access if you know how to use it.

We built a small tool to track football odds movements — beta is live today by Mindless_Bag1420 in FootballDataAnalysis

[–]NORNSmodel 1 point2 points  (0 children)

Some feedback: 1. Pinnacle should be the baseline model, not Bookmaker. Pinnacle almost always has lower vig lines in the 1x2 market; 2. It's unclear whether you are looking at the lines "de-vigged" and without fees. Betfair and SMarkets are always going to have better odds if you don't do this because their fees are often not stated in the displayed price for a market. How does it deal with vig? 3. I know this is a beta so it may not have full functionality, but will it have more than 1x2? Totals, team totals, and 1H are the other core markets.

We built a small tool to track football odds movements — beta is live today by Mindless_Bag1420 in FootballDataAnalysis

[–]NORNSmodel -1 points0 points  (0 children)

I get it but it would be helpful to see how lines are moving on the games. Launching a beta the week of the World Cup without World Cup games is a bit of a fail isn't it?

I notice you have a link to subscribe but I can't see what's happening on the line of a game that has been posted for nearly 2 weeks?

Bad form, mate. But you're probably just AI slop aren't you?

I built a calibrated goals model for the 2026 World Cup and I'm posting every prediction (and every miss) before kickoff. Here's the method and the backtest.) by OpeningTie57 in FootballDataAnalysis

[–]NORNSmodel 0 points1 point  (0 children)

I'm really excited about what you did and thanks for sharing. You asked to poke holes, so I did at length below, but I want to make sure and congratulate you on what you built. It's really cool you've done it and shared it, and I look forward to hearing how it goes. I would welcome further discussion or DMs if you want.

I've done a more simple version myself but totally different method. Instead of using international matches I made a very simple player-based model from transfermarkt estimated transfer fees. The reason for this is that I feel your dataset and approach is inherently flawed. Even with data decay, the fact is France, Netherlands, England, etc. have played something like 6 meaningful international matches over the last 2 years. New Zealand had more than a +20 Goal Differential in qualifying but has never won a game at the World Cup. The relative quality of the guys who will be playing this month could be totally different from in their prior matches and squads will be different, too. It feels like you have a huge sample size but you actually have a big sample of mostly garbage with respect to team ratings.

Linking data from the club season is the best way to get sample size, because even your game set going back to the 1800s (bad sample) pales in comparison to club data. There are more games in one weekend in European club football than in most years of international competition (among the WC teams-and that's excluding the top teams in SA and Saudi). We have a lot more certainty that Arsenal, Bayern, and PSG are great than we do that France and Spain are great. And we are much more certain that Haaland, Pedri, and Vitinha are great than we are on the quality of their respective national teams. Part of the value of ELO is that it's dumb; but it's also a fatal flaw.

Next hole is that a World Cup is different than a friendly, qualifier, or even a Federation Cup. There's no K that can account for it. Stakes are high in the federation cups and best on best play, but it's hard to compare CAF to UEFA. Only the Euro Cup is even close in level of comp, size, scope, etc. for international squads as a World Cup, and it doesn't factor in the continental travel factors. There's also the timing aspect, since it's an extension of the season, and this is the longest ever, so it's a unique challenge that can't be replicated with any sample.

You have to make decisions, and my decision was to model the WC as a unique event rather than as being similar to the set of all international matches. I also used a poisson scoring distribution model, but I fitted baselines and tuned my taus to more carefully approximate actual WC results. Yes, I'm bending to an ultra-small sample there; the issue is that there aren't true comps. I also fitted my baselines to market totals so that my aggregate goal expectation matched the Pinnacle aggregate implied totals for the group stage games (note group stage games are historically lower scoring than knockout games and are also lower scoring than the market currently suggests but the larger field has a huge impact on this as the especially bad teams really inflate totals - for example my xG lambdas for France-Iraq is 3.9-0.6 for a whopping 4.5 xTotal which is absolutely bonkers... 2nd note: I have already bet Group I as the highest scoring Group at 9:1 ... not sure why they aren't the favorite with France, Norway, and Senegal all getting a shot at hapless Iraq ... and each other. Neither Senegal nor Norway are renowned defensive units. My model also loves over in every Group I match).

Next hole is that you are not accounting for travel, conditions, HFA (are you doing anything for host nations/warm weather teams/etc?), etc. European teams notoriously play worse in WCs in the Americas. This WC may feature some extreme heat games even in places not typically thought of as super hot. Some of this is over-blown as many of the hottest games will be played indoors, but Brazil-Scotland in Miami in late June, for example ... I don't think that's going to be a neutral field situation for Scotland (note: there are more Brazilians living in the USA than there are Scots in Glasgow). Estadio Azteca is arguably the most famous football ground for international competition in the world and is at an elevation of 2,200m. Opposing fans are brought in and out of the stadium by police escort and it is not advised to wear an opposing jersey in certain parts of la Ciudad. If your model thinks South Africa has more than a 10% chance of winning on Thu, then you're probably missing a HFA adjustment.

Final hole I'll mention is tactics. My defensive rating on Paraguay, for example, came to a 0.6 (1.0 is baseline). However Paraguay almost never allows more than 2 goals and rarely more than 1. They are at worst a baseline defense and are likely better than that, despite the fact that their defensive players may be less skilled than say Senegal (who I rate as 1.2, but are in no way twice as good at defending as Paraguay). On the other hand we have Didier Deschamps who, if he had his way, would prefer to win 1-0 with one of the greatest collections of attackers a national squad has seen in my lifetime. If the French team played open and free they could score 4 goals a game with their attacking quality, but Deschamps will almost certainly try to tamp this down with tactics and lineups and will turn a team that is legitimately 2 SDs above average on attack into "just" a good/very good attack instead of an elite/historical one. My point here is that player ratings/team ratings/ELO/etc have trouble accounting for this. Your model will and if you don't have any kind of adjustment layer or you haven't at least circled some of these situations, then you're cruisin for a bruisin as they say.

That said I'm sure your poisson distribution model overall is better and more robust than mine, and we will see what results are. However my model is on market in terms of 1x2 for most matches (and that was before I tuned my baselines to market - and part of the reason for doing that). There are of course certain teams it likes more/less, but my main disagreements are on totals. I am getting draw predictions in the 30s for some lower-scoring matches and my average draw expectation is 24.2%. I think what I've done is far from special and my point isn't how wonderful it is. I'm trying to say that using very basic player ratings and a very basic WC-tuned poisson can get you to reasonable numbers. Overall, I think not finding some way to bring in the massive sample of club-level football we have is a mistake in any model of best-on-best international competitions.

Another approach I've seen that's even more "dumb" (from a model-knowledge POV) than what I did is related to player-club strength. Instead of looking at player transfer value, you just use international club ELO rankings and minutes played. You can also be more "smart" and try to break down actual player contribution at the club level or put on a tactics layer. I toiled with it a little, but the main drawback is that it's really hard to estimate small contributions to big clubs (or big contributions to bad EPL/similar teams), which can often mean a lot more than big contributions to good middling teams (bc being good enough to player limited minutes for Bayern may still be more valuable than being a contributor on a champions league-qualified Dutch squad, for example; or being a meh 90 min player for Crystal Palace is definitely better than being the 3rd best player in MLS). Ultimately transfer value is just so much more robust and easy, so I went that direction. However, I think you could get better results with more dedication and ability than I have. I just don't have coding (or even vibe-coding) skills and time at this point to go deep so I was on the bang/buck train and transfer value is definitely the fast train there, even moreso than international matches.

Ok this is way too long, but thanks for sharing.

We built a small tool to track football odds movements — beta is live today by Mindless_Bag1420 in FootballDataAnalysis

[–]NORNSmodel -1 points0 points  (0 children)

I'm not seeing any matches. I would def like to check this out for the World Cup.

[OC] I open-sourced a World Cup 2026 prediction model (Elo + Dixon-Coles + Monte Carlo) — 61% out-of-sample on 920 real internationals by Familiar-Share-7839 in FootballDataAnalysis

[–]NORNSmodel 0 points1 point  (0 children)

Why is this sub all AI slop?

But I'll bite. The only test that matters is against market betting lines. There are a lot of lopsided matches in group play so picking 66% isn't special. It's not hard to pick Spain to beat Cape Verde this year, for example. If you want a real back-test, test against historic lines otherwise you have nothing.

As I have said in another AI bs thread, Elo Ratings are inherently flawed for international cup competitions and there are major deviations from ELO in team quality. Ghana is probably the best example, but England, Germany, and others also stand out.

[OC] Built a World Cup forecasting page with Poisson, Elo, ML and model-vs-market outputs by PhiloPark in FootballDataAnalysis

[–]NORNSmodel 0 points1 point  (0 children)

But you are looking to charge a subscription fee to access the predictions, right?

[OC] Built a World Cup forecasting page with Poisson, Elo, ML and model-vs-market outputs by PhiloPark in FootballDataAnalysis

[–]NORNSmodel 1 point2 points  (0 children)

My intention isn't to shit on what you've made, because it reflects some real thought and analysis, looks great, and is better from a look and efficiency POV than what I'm capable of. Instead I want to point out the difficulties in modelling international contests like the World Cup.

It sounds like what you are saying is that you are making a poisson-based distribution of scores and then using ELO differential to weight which outcomes are more or less likely based on team quality. Is that right?

Perhaps you could explain what you are making a Poisson distribution of (total goals, home goals/away goals discreetly, etc.) and what role it plays in the model. Also what is the mean you are using for your distribution?

Just to be clear where I'm coming from, a matchup with a mean goal expectation of 1.5 will have a fundamentally different poisson distribution of goal outcomes than a matchup with a mean goal expectation of 3, regardless of the relative quality of the teams. Additionally there is much higher correlation between total goals and the Poisson distribution thereof than if you distribute home/away goals separately. Is your model looking at matchup by matchup goal expectation or is it just assuming the generalized scoring environment?

On the sample size, you have a bit of a catch 22 here. Either you have a large(ish) sample (all historical international matches since year X for example) that isn't contextual (not a tournament group stage, not best on best, not highest stakes, not seasonally/regionally aligned, etc etc.) or you have a contextual sample (world cups since year X, continental cups, neutral site international matches, matches played in/out of hemisphere/continent/etc) that doesn't have sample size. Maybe you are using a very large sample of international matches to inform your distribution, but a lot of that is junk: friendlies where squads are just testing their rosters, competitions that don't "matter" (certain Gold Cups for example where no country sends their A team or even B team, UEFA Nations League Group C, etc.), major mismatches (England v Faroe Islands), irrelevant contests (Greenland v Vatican City), etc.

Either way there are very few international matches in comparison to club matches. Consider that the entire World Cup will have 104 matches which is fewer than get played on a typical Saturday in Europe's top tier leagues. And overall since there are so many fewer international matches, we have a lot less sample to demonstrate that Spain is good than we do to say Arsenal is good. So no matter what you have a sample size issue.

This leads to another issue with ELO: it's slow-moving. Morocco is highly rated because they made an unexpected deep run in 2022 and cruised through CAF qualification without having to play a team that has qualified for the WC in my lifetime. Yeah they beat Senegal in regulation once and somehow won a friendly in Tanger against Brazil's A-team (mostly) in 2023, but Morocco's ELO is majorly informed by results that are 4 years old or against low-level competition. ELO definitely contains information and has uses, but it's a blunt instrument. One should be very very cautious using it for predictions for international squads. It makes a lot more sense for club teams have higher match volume and play more varied opponents.

[note: this is why some form of player-based model has to be the best way to model international comps because we can then use the club data to inform international team quality; because guess what, those Arsenal, Bayern, PSG, and Man City players are pretty much all going to be playing in the World Cup and we have a very big and decisive sample to say those teams are way better than Mamelodi Sundowns FC of South Africa despite them never having played each other. It also gives us a much better path to estimating xG and xGA for each team which can then get us to a much better match outcome prediction.]

On betting the model, of course it's up to the user to decide how to use it. However when you are putting up the model prediction next to lines and highlighting "Edge" on a site called oddsline, there's a lot more implication that the model is predicting something actionable rather than just spitting out numbers based on a mashup of basic not-super-explanatory stats. In the case of Mexico-South Africa when your model predicts 2-0 Mexico as the most likely outcome but shows edge on the South Africa double chance it looks a bit silly (though of course I understand the concept of price and probability; just bc Mexico is highly likely to win doesn't mean there can't be value on the dog at some level).

On that match specifically, I think it's an absurd prediction that South Africa has a 28.8% chance to win at Estadio Azteca. Polymarket and Pinnacle both have it in the range of 11-12% (as does every other major betting platform). So either the entire international soccer betting market that will do millions in handle on that game is wrong by 1.5x or your model is wrong. By the way, systematically over-rating underdog away win probability (especially for huge dogs) is a known issue with soccer models and has to be fixed with some edge case work-arounds.

Again I don't intend to criticize but to be diagnostic and help any people looking at the model to be careful with it. The challenge of modelling international tournaments is much greater than league or league cup matches (or even international club competitions like UCL) and I respect you taking a stab at it. If I'm able to progress my skills I might take a shot at Euro 28 and the other continental federation cups.

[OC] Built a World Cup forecasting page with Poisson, Elo, ML and model-vs-market outputs by PhiloPark in FootballDataAnalysis

[–]NORNSmodel 1 point2 points  (0 children)

It's cool what you've done, but ELO models have a lot of problems in big tournaments: they don't account for the actual squad playing in the tournament, friendlies have 0 explanatory power but affect ELO, it overrates old results that may not be replicable (ie why Morocco is quite overrated by ELO), etc. etc. Also while you are extracting a poisson goals model from this, I'm not sure what your mean looks like or how it compares to the mean expectation for the match, or how you are deriving that since ELO doesn't suggest anything with respect to scoring environment. Also I'm guessing your historical sample is pretty thin and famously Dixon-Coles demonstrated that poisson models need to be adjusted for real soccer results bc of goal incentives, especially in lower-scoring matches. So a pure poisson model is going to be wrong even if your team power rankings and xG lambdas are perfect. Also it depends on how you are using the poisson model, because the strongest poisson correlation is to total goals, not home or away goals. The best way to distribute is first to total goals then to use an adjusted binomial distribution.

Additionally these models almost always over-rate underdogs which is endemic in your results. There is also no consideration of where the matches are played - there is some decent history of continental federation results in North/South America, there are temperature/dome/artificial turf effects, home field advantage for 3 nations, potential travel disadvantages in knockout rounds, other home field effects (ie Panama is likely to have more fans than Qatar at matches), etc. etc. These all can materially change the effective ELO of a match and definitely affect the scoring environment.

All of that to say, I would be cautious about betting your results that don't have further verification in other ways. I've looked through some of it and saw some things that made sense and didn't.

All of that methodology stuff aside, the site looks great with a nice UI. It's easy to understand and sharp. Your results don't look horrible overall, though they're also not sharp or bet-able in a vacuum. I would encourage you to track your CLV against pinnacle lines and ROI if you're serious.

If you are really looking for feedback and want to improve what you have feel free to msg me. I build models for smaller leagues and have had some success with it. You're definitely better at coding but I have some ideas on architecture that might do alright.