Predictive Hacks

Get the Odds of Euro 2020 Games based on FIFA World Ranking

fifa ranking

We will provide an example of how you can estimate the outcome of a Euro 2020 Game based on FIFA World Ranking. The current calculation method applied on 10 June 2018 and is based on the Elo rating system and after each game points will be added to or subtracted from a team’s rating according to the formula:

The Expected Result of a Game

The expected result of a Game is given by the following formula:

where \(dr\) is the difference between two teams’ ratings before the game. Let’s see the function of the Winning Probability versus the Ranking Difference:

diffs<-seq(-1000,1000)
probs<-1/(1+10^(-(diffs)/600))

plot(diffs, probs, main="Winning Probability vs Ranking Difference", xlab = "Ranking Differences", ylab = "Winning Probability")

A Walk-Through Example

Let’s consider the Final-16 Game of England vs Germany with the following Odds from Bet365.

Probability to Qualify

Note that according to FIFA Ranking, England has 1687 points and Germany has 1609, so the difference is 81 points. This implies that the probability of England to qualify is 57.7%:

> 1/(1+10^(-(81)/600))
[1] 0.5770925

This means that the odds are 1/0.577092=1.732825 which is very close to what Bet365 pays-off, a little bit less due to the margin. Let’s do the same exercise for Germany (note that the difference is -81 this time).

> 1/(1/(1+10^(-(-81)/600)))
[1] 2.364583

As we can see here the fair Odds appear to be 2.36 but Bet365 pays off 2.00. Now, you may understand why you will never make money from betting as we have explained in Bookmaker’s Margin.

Outcome Probability

The formula above gives the probability of each team to win, but it does not take into consideration the “Draw”. So we can claim that the Draw Probability is the product of the win probability of each team. So in our game, the draw probability is \(P(A \cap B) = P(A) \times P(B)\):

> 0.5770925*(1-0.5770925)
[1] 0.2440567

But now the probability of England to Win is \(P(A)-P(A \cap B)\):

> 0.5770925-0.5770925*(1-0.5770925)
[1] 0.3330358

And for Germany is:

> (1-0.5770925)-0.5770925*(1-0.5770925)
[1] 0.1788508

Finally, we need to normalize the probabilities as follows:

> probs<-c(0.3330358, 0.2440567, 0.1788508)
> probs/sum(probs)
[1] 0.4405566 0.3228505 0.2365929

So finally we have:

  • England: 44.05%
  • Draw: 32.29%
  • Germany: 23.66%

And if we want to get the odds:

> 1/(probs/sum(probs))
[1] 2.269856 3.097409 4.226670

We see that the estimated odds are 2.27, 3.1 and 4.22 where Bet365 pays 2.52, 3.38 and 2.97. Thus, according to this model, there is mispricing in the odds.

Share This Post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Leave a Comment

Subscribe To Our Newsletter

Get updates and learn from the best

More To Explore

Python

Image Captioning with HuggingFace

Image captioning with AI is a fascinating application of artificial intelligence (AI) that involves generating textual descriptions for images automatically.

Python

Intro to Chatbots with HuggingFace

In this tutorial, we will show you how to use the Transformers library from HuggingFace to build chatbot pipelines. Let’s