Predictive Hacks

# Get the Odds of Euro 2020 Games based on FIFA World 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.

### Get updates and learn from the best

Python

#### How to Generate the Requirements of your Python project based on your Imports

We have provided many tutorials on how to generate the requirements.txt for your python project without environments, how to work

Miscellaneous

#### How to Schedule Tasks in Snowflake

We have started a series of Snowflake tutorials, like How to Get Data from Snowflake using Python, How to Load