Wednesday, September 6, 2017

Explaining My Simulation Methodology

I have been meaning to get around to this for a while now and with a break in fixtures for international team games this seems like a good time to go over my simulation methodology.

 

Basics:

The model is built on this logic: that a soccer match result is determined by goals, goals are determined by the number of shots and the quality of those shots. So I have built the model and 1) trying to estimate the number of shots each team will have and 2) a rough idea of where these shots will be taken and the quality of the shots.

For simplicity I group shots into three location buckets, Danger Zone (6 yard box + Middle of 18 yard box), Wide Box (wide areas of the box) and Outside the Box.

I also estimate the number of headers that will occur in the game and I assume that all headers will be from the danger zone (about 95% of headers occur in this area) all other areas are shots from feet.

Lastly I estimate the number of Big Chances each team will have per game. For simplicity I also assume that all of these will occur in the danger zone (about 75% of big chances occur in the danger zone).

 

Determining Values:

To arrive at the values for each I have taken data from the last two seasons plus the current season. I then weight the data to get to a single value. The current weighting is 1 for 2016-17, 0.5 for 2015-16 and Games Played/19 so for this week there have been 3 matches so the weighting is 0.16 and this will go up every week.

You could certainly pick different weights for this but my thinking is that I would use last season as the baseline for each team, two years ago as half as important because there can be quite a bit of turn over in a squad in that time but still it can provide information and then a sliding scale for the current season that would put it on equal terms at the halfway point with the previous season and then have the largest weighting.

I use this weighting on the data for both offensive and defensive statistics as well as overall and home and away.

These values then feed into the simulation model to determine the number and quality of shots for each team.

Using Arsenal vs Bournemouth as an example:

Arsenal have 6.42 Danger zone shots for overall, 7.41 at home while Bournemouth allow 5.59 overall and allow 3.61 Danger Zone shots on the road. Averaging all of these I have Arsenal with a raw value of 5.69 Danger Zone shots. Taking out the expected headers and Big Chances (same methodology as above) Arsenal are left with 1.58 regular danger zone shots from feet. The decimal portion of the shot is then compared to a random number and if the decimal is higher than the random number the shots total is rounded up.

Doing this for all the different shot categories Arsenal are estimated to have 15.03 (1.58 DZ, 4.37 WB, 4.97 OB, 2.3 headers, 1.81 BC) shots but that can vary between 12 and 17 shots, compared to 10.65 (0.98 DZ, 2.29 WB, 4.32 OB, 1.78 headers, 1.27 BC) shots but can vary between 8 and 13 shots for Bournemouth.

Once the number of shots are determined each one is assigned an xG value. Danger Zone shots are 0.17 xG, Wide Box 0.06 xG, Outside the box 0.024 xG, headers 0.08xG and big chances 0.45 xG.

 

Simulating the match:

These values are assigned to each shot and compared to a random number. Again to our example:

Arsenal
Shot Type Value Random Result
DZ 0.17 0.610036 0
DZ 0.17 0.172277 0
WB 0.06 0.303131 0
WB 0.06 0.267087 0
WB 0.06 0.068808 0
WB 0.06 0.6799 0
OB 0.024 0.715029 0
OB 0.024 0.012071 1
OB 0.024 0.577135 0
OB 0.024 0.657269 0
OB 0.024 0.936911 0
H 0.08 0.356094 0
H 0.08 0.022968 1
BC 0.45 0.657358 0
BC 0.45 0.545432 0

Based on these results Arsenal would have scored 2 goals in this simulation.

This is done for both teams and the goals scored are compared and the result is recorded and then the simulation is run (with the decimals again compared to a new set of random numbers to simulate a bit of randomness that happens) again another 9,999 times. The odds that I present are the count of each result divided by the number of simulations.

Again to the example of Arsenal vs Bournemouth, Arsenal won 5,327 of the simulations, there was a draw 2,190 times and Bournemouth won 2,483 times. So the odds for the match would be presented as 53.3% for Arsenal, 21.9% Draw, 24.8% Bournemouth.

 

Simulating the Season:

For each of the remaining matches in the season the odds are determined using the above method and a similar exercise is performed to simulate the season. I use this to give odds for each team winning the league or finishing top 4 and other targets.

To help illustrate I will again use the Arsenal vs Bournemouth example. For this a random number is generated. I got 0.5058 as my random number and that is compared to odds of home win: 0 to 0.533, draw: greater than 0.533 to less than 0.753 and Away win: 0.752 to 1. With this random number Arsenal have been simulated as the winner.

This is done for each match and the number of wins, draws and losses are recorded as well as the points and where each team finished in the table. This is done another 9,999 times to simulate the season 10,000 times and then the results are presented as the simulated odds.

The latest simulation makes Manchester City the title favorites winning the title in 32.7% of simulations.

 

Team Strength:

Earlier today on twitter I posted something new and that is related to my simulation work. I called it team strength rankings.
Here is how that is derived.

Each team's overall shot spread is multiplied by the assigned values (basically it is a simplified xG value per game) and then compared to league average. Using Arsenal as an example, they have an estimated 1.8 xG per game overall compared to 1.3 for League Average. I then took the team value divided by league average times 100 to give the value in the tweet where 100 is league average and every point above or below represents 1% above or below the league average.

For the overall ranking it is the average of the offense and defense with that compared to league average to determine overall rank.

This is a new thing for me so this might need tweeking as I continue on.

Please let me know if things need further clarification or if I missed anything.

No comments:

Post a Comment