I’ve been following a number of people developing models for soccer and it’s all very exciting. However, the approach to the problem some of you are using is flawed in various ways, and as someone who has reasonable experience in this area, I figured I would offer some brief advice on the subject.
Building Toward a Large N
First of all, some people have decided to crunch data and then use that data to make predictive plays vs. various bookies (or if they aren’t betting money, they are at least using the bookie odds as a comparative guideline). This is a very positive practice. World odds markets are an excellent tool for judging model effectiveness in a vacuum, and since the odds on a football match are typically compiled by millions of dollars battling it out in information markets, those odds are far sharper than your average opinion. It doesn’t make them “correct”, but they are pretty good. Additionally, the moment you start placing wagers is the moment your model’s performance really matters. Even if it’s just a dollar at a time, you suddenly care about the outcome in a palpable way.
However, one problem that I see is that a lot of people are just using one league to compare against (like EPL or Eredivisie or whatever). Throughout an entire season, most leagues only have 340-460 matches, so even if you compared your model odds to every match every weekend, it would still take three seasons to pass 1000 data points. That’s not a happy place to be in if you are the type of person who believes a large sample size matters (and if you are building mathematical models for football, you probably are).
Assuming you can’t reverse engineer the data your model needs from historic sources, the way to work around this problem is to generate more match probabilities from different leagues, and use those as additional comparatives. If you are examining 4-5 leagues every weekend instead of just one, you generate a large n much faster than doing single league comparisons. That said, picking your leagues is important. First, you obviously need correct inputs for whatever model you have constructed for each league you want to use. Beyond that, look at the league profiles you have data for and figure out which ones seem to fit a “normal” profile. Examining the data, it looks like EPL, Bundesliga, La Liga, and Serie A are comparatively similar. Ligue 1 in France is an outlier due to much lower totals and average goal expectations than the other leagues, while Eredivisie is an outlier in the other direction. Your model MIGHT work there, but it also might be that those leagues are so different that it might cause problems, so be aware of that.
An important thing to do while examining these different leagues is to make sure you separate your comparatives as well (just add “League” as a column in your spreadsheet or database), and then you can split out the performance however and whenever you want.
Use The Most Accurate Market
I’ve mentioned this on my Twitter account before, but some people seemed confused by the principle or outright disagreed with it, so I figured I should cover it in writing.
Imagine you have two different markets with the following prices (Draw No Bet is the same as an American pick ’em line – if the game draws you get your money back):
Market 1 Draw No Bet: Team 1 = 1.9
Market 1 Draw No Bet: Team 2 = 1.9
Market 2 DNB: Team 1 = 1.97
Market 2 DNB: Team 2 = 1.97
Which one of those has the more accurate price?
Well, if you took the average of them, they look identical. However, Market 2 is far more precise in where the price actually lays than Market 1. Market 1’s most likely price is somewhere between 1.95 on either side. Market 2’s most likely price is somewhere between 1.98 (or even 1.99) on either side. This is partly because the confidence interval is much narrower (6 cents vs 20), and partly because markets with lower prices will have far more liquidity, sharp money, and better opinions overall. That equates to an enormous difference in price precision.
Aggregating 10 different bookie odds might seem like a good way to get the “real” price of a match, but if most of those bookies have margins of 1.05 and beyond (note: even Betfair’s price has a 5% commission involved, so it operates more like a normal bookie than you might think, and this doesn’t even factor in the premium winner charges), they are far less useful than the low-cost bookmakers like PinnacleSports, IBCBet, and SBOBet in determining what the real odds of a match are. I can’t go into too much more detail on this without either delivering a boring economics lesson or getting into industry specifics, but if you want to use bookie prices to compare against your model, use those guys.
The Asian Handicap is relatively unusual to most Europeans, but it’s standard practice for Americans and all of Asia. Instead of looking at your typical Barcelona home match and saying yeah, they are 88% to win, Asian Handicaps focus on the margin of victory. This allows for a much more interesting betting line – instead of “Will Barcelona win?” (a high probability of yes), you get “Will Barcelona win by more than 2 goals or less than 2 goals?” (which usually ends up around a 50/50 and has the side benefit of not destroying your entire bankroll if they lose).
Though they might be unfamiliar at first, comparing your model outputs to Asian Handicaps gives you an additional interesting data point/external opinion, and gives you a better representation for team dominance. Instead of just “Did Team 1 win?” you can look at the margins of victory for a better indicator of performance. Finally, as alluded to above, the Asian Handicap market generally operates at 1.5% or occasionally 1.25% margins, making them the most accurate prices in the world for any particular match, and the ones you will eventually want to compare your model output when you start working on real precision. [Margins on the outright/1×2 only go as low as 2% and then only at PinnacleSports.com]
Feel free to ask questions in the comments or bug me about it on Twitter @mixedknuts