We’re going to talk about the technique of Monte Carlo simulations in computer generated mock drafts. We’re going to sketch out the algorithm in words, not code. We might make reference to bits of code for those who might try to implement what I’m speaking of. To note, my open source C++ code here does exactly that, and has since 2001.
A computer mock draft, in football (there is nothing about these algorithms specific to any particular sport), is nothing more than selecting the top entry from an ordered list. To note, with each and every team the ordering changes, but the fact it’s a simple selection does not change. Therefore, to compute a mock draft, you need a list, and an ordering rule.
If needs are taken into consideration then the top element of the list may not be taken. This adds a selection rule to the algorithm, and therefore, the mock draft becomes the selection of the highest rated player to match the selection rule. We mention all this because such a process is ordinarily deterministic. It doesn’t generate any kind of probability distribution.
Let’s say you have, oh, 5 scouts. For now, we’ll choose the name of a player in this upcoming draft. How about Von Miller? These five scouts have rated Von Miller 2nd, 3rd, 5th, 7th, and 11th best in the draft. Now we have a distribution of opinions about Von Miller, and we can form a model to describe this player’s worth. The model is:
The function that models how Von Miller, or any player would be rated by an infinite number of scouts is the normal distribution (i.e. bell curve).
We’re choosing this model for convenience. A much less restrictive model might be:
The function that models how Von Miller, or any player, would be rated by an infinite number of scouts is a continuous probability distribution.
The latter definition would allow for players that split groups of scouts in two, some rating player X as a second rounder and others as a fourth rounder, perhaps forming a bimodal curve. But that’s a finesse to the argument we can worry about later.
Now that we have a model, we can apply this process:
For Von Miller, we calculate the mean and standard deviation of the ratings. That would be a mean of 5.6 and a standard deviation of 3.57. Using this, we can now calculate any number of normally distributed random numbers that represent the ranking of Von Miller. This could be done in Perl with:
use Math::Random qw(:all);
my $Von_Miller_value = 3.57*random_normal() + 5.6;
We can do this for every other player in the mock draft as well. Order the list by ranking and run the mock draft on that set. Store the results and repeat the process as many times as needed. At the end, you have a probability distribution of where Von Miller might actually fall in the draft, to the extent your draft analysts have given you a reasonable representation of the player’s draft value.
Why go through all this trouble to do what an individual can do? There are a couple reasons. The first is that people are human and let their emotions blind themselves to the needs of other teams. Human mock drafts tend to reflect the human biases of their creators (i.e. how many times are we going to see top 5 players fall to the mid or late first rounds?). The second is that you’re looking for condition in which value could indeed fall. In other words, what players are the Moneyball play? What players could indeed fall in the draft? Where could your team get the best value overall? For a player or a player agent, it would allow them to understand more accurately where they might actually be picked in the real draft, assuming they were to obtain reasonable scouting data to feed into the process.