Building a Botter Coordinator (Part I)

If you have spent 30 seconds on Seahawks Twitter, you have undoubtedly observed the run/pass debate.  The available data indicates that passing is superior in most game situations and that many of the supposed benefits from running the ball do not manifest.  There has been a veritable shitload of digital ink spent explaining all of this and I am not going to reiterate it here.

However, something I have not seen much of is an attempt to simulate NFL playcalling rather than just describe it.  Since I once took a couple classes on how to code in R, I figured I would take a stab at it.  This series will follow my journey as I try to cobble together a digital coordinator.  I’m reasonably sure I won’t create Skynet.

This iteration of Brian Bottenheimer is extremely rudimentary.  First, he isn’t even really playing football.  He only has three downs and can only call pass plays.  The QB cannot scramble, fumble, or throw interceptions (#tradeRuss), but also touchdowns don’t exist in this digital world.  The field is unbound.  The defense also never learns to take away the pass.  Second, the dataset I am using is based on Russell Wilson’s last two full seasons.  I chopped up his pass plays based on the resulting yardage of the play.

Here is that data:


‘Chance’ indicates the likelihood that our virtual QB throws a pass into that bucket and ‘yards’ indicates the yardage gained from that play.

To help understand what is happening, I’ll describe a full iteration of this simulation:

After inputting all of the data (in truly ugly code, if I say so myself),  two random numbers between 0 and 1 are generated.  These are assigned to ‘completion success’ and ‘sack chance’, respectively.

The code then checks to see if a pass was completed.  If completion success is less than our virtual QB’s completion percentage, then he completed the pass!  Another random number between 0 and 1 is then generated.  This random number then tells us which bucket the pass was made into. At this point, the yardage from that bucket is added to our running tally and the process repeats.

If the pass is not completed, the sack chance is compared against the sack rate on incomplete passes.  If Sack Chance < Sack Rate, then we have given up a sack and that yardage is subtracted from the running tally.

We do this to see how far we can get with three downs and then the whole process repeats 1000 times (total of 3,000 plays) to boost the sample size.  Finally, we do all of it 100 times (total of 300,000 plays) in order to compare the rates of first downs gained and total yards gained.

Below are the results for Brian Bottenheimer’s first iteration.

The fraction of drives that result in a 1st down:


The total yardage gained on all 100,000 drives:


There is not much to take away from the model at such a rudimentary stage.  However, some brief observations:

1. My model is not as good as NFL playcallers at avoiding three and outs. Per Football Outsiders, the league-wide three and out rate is 20.6%.  My model has a median first down rate of 62.3%, resulting in a 37.7% three and out rate.  The worst team in the league (Arizona) goes three and out 36.2% of the time, so my model is a little bit worse than Mike McCoy at calling offenses (shoutout to @moo12152 for pointing this out).

2. Throwing three passes in a row has the potential for significant yardage. Half of all drives gained more than 13 yards after 3 passes.  This is because passing has a significant chance of gaining explosive yardage.  Nearly 25% of Russell Wilson’s passes gained more than 15 yards and, on average, those passes gained 26 yards.  Losing yards on passing plays, either due to holds, sacks, or fucking tunnel screens is not good, but even with those losses, passing can get you a new set of downs more often than not.

3. Without rushing in the model or a rushing model to compare to, this is just an observation, but approximately 17% of the drives ended up with negative yardage. This isn’t very reassuring, but functionally, what is the difference between a drive that loses 5 yards and one that gains 5 yards?  You’re punting either way.

Brian Bottenheimer is not yet ready to take over the NFL (and maybe the world?).  Next, I need to teach him about downs and also what it means to love.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.