Introducing the Projection Machine – Forecast Entire Offenses Using a Powerful Dashboard
Some of my favorite pieces from last year were top down reviews at offensive schemes like this look at the Marc Trestman offense, this look at what Andy Reid could do for Jamaal Charles, and this look at the Chip Kelly offense.
But the tough thing about those pieces is that they take a ton of time to research. Getting a full picture of what an offense could look like forces you to make assumptions about whether a team will lead or trail a lot, then forces you to make assumptions about how pass heavy they’ll be relative to the score, and then you have to create assumptions about usage for each position.
It’s kind of a lot of work.
So I wanted to make a tool that would let RotoViz readers and writers do the steps needed to make offensive projections, but in a way where the information you need is mostly right in front of you. So I built the Projection Machine.
The Projection Machine is a powerful forecasting dashboard with two main components: assumptions, and output. The goal of the dashboard is to allow you to test assumptions and then see how over or undervalued players are relative to ADP.
Here is a screenshot of the assumptions controls that the App offers:
The image above shows the team level controls that allow you to set assumptions for the team’s average point margin per play, pass play percent versus league expectation, and pace tendency as measured in plays above or below average per game versus league average and adjusted for scoring margin.
Each control is also tied to a graph so that you can see how the team has done recently on these numbers (shown by gray bars) as well as the distribution of that number at a league-wide level. The red lines represent the 75th and 25th percentiles, while the green line is league-wide median. The dotted line is the current assumption, which defaults to league-wide average (mean) and is adjusted from there. It’s important to note that the App isn’t making any projection by default, except for the league average.
Let’s talk about these three inputs briefly.
Point Margin per Play
This control allows you to make an assumption as to the average scoring margin for each play that an offense runs. Most teams’ plays are actually weighted to the time of the game where they’re trailing, so the league-wide average is negative. The changes that you make to this control will affect the number of pass plays projected for a team because trailing teams are forced to throw more than they otherwise might want to.
You can look at the team’s recent history in point margin per play, as well as the league-wide median to set this assumption. You might also look at Vegas over/under win totals in order to try to assume what the team’s average margin per play will be. Here’s a table where I estimate the average margin/play using the Vegas over/under for win total.
|TM||TOTAL||Predicted Av. Margin/Play|
|San Francisco 49ers||11||5.02|
|New England Patriots||10.5||3.96|
|Green Bay Packers||10||2.90|
|New Orleans Saints||9.5||1.84|
|Kansas City Chiefs||8||(1.35)|
|San Diego Chargers||8||(1.35)|
|New York Giants||7||(3.47)|
|Tampa Bay Buccaneers||7||(3.47)|
|New York Jets||6.5||(4.53)|
|St. Louis Rams||6.5||(4.53)|
You can plug these numbers into the Point Margin input on the app, of if you disagree with them, feel free to adjust however you wish.
This input allows you to make an assumption as to the team’s general desire to pass. The numbers in the graph and in the input control are an adjustment that goes into the play calling mix after Point Margin is considered. So the very most pass happy team would be a team that loves to throw, and is also going to be trailing a lot. The very most run happy team would be a team with the lead and also a run heavy offensive coordinator. If any of this seems difficult to comprehend, the graphs are there to give you a picture of what the team has done in the past.
IMPORTANT: Here’s a trick that can also help you in setting that assumption. If you have a new offensive coordinator, like Scott Linehan in DAL, flip the team setting at the top of the app to DET for a minute and set the Pass Tendency control based on DET’s history. Then flip the control back to DAL for the rest of the assumptions. That trick will actually work for lots of your settings. If you want to see how Linehan has targeted his top WR, you can always just flip the team setting briefly to look at the history of Linehan coached teams, then turn it back to the team you’re working on when you’re done checking history.
This input sets the expectation for the total number of plays that the team will run. The expectation is also based on whether a team is generally good or bad. Bad teams will initially try to limit the number of plays they run, in order to lose by less (or increase variance) although once they’re down, they do eventually have to run more plays to try to catch up. Again, you can easily set the assumption by looking at team histories.
As you set these three assumptions, the projected changes will be reflected in the tables at the bottom of the app. Here’s the team breakdown which shows total plays expected, along with pass and run totals.
After you’ve set the team level assumptions you can start making your way through the skill position assumptions. Those assumptions start with the QB.
Most of the QB related projections will actually be cumulative based on the changes you make to other skill positions. So the passing yards projection is the sum of all of the receiving yards of the WRs, TEs, and RBs. But there are thee inputs which aren’t affected by the other position.
This input/assumption will affect the total number of passing attempts for the team. In general, running QBs are sacked a higher rate than true pocket passers. In fact, Russell Wilson was sacked a lot more times than Peyton Manning, despite the fact that the Broncos outpaced the Seahawks in pass plays by about 200 plays.
QB Rush Percent
This input will allocate the number of team rushing attempts that the QB will be responsible for. A player like Cam Newton comes in well over 20% of team passing attempts. After you set the QB rushing percent, league-wide trends will be used for projecting QB rushing yards and TDs.
This number doesn’t make its way into any other projections except for the total number of QB interceptions. One thing to keep in mind is that INT and scoring margin are going to be linked. So if you set a high number for INT rate and don’t also assume that a team will trail a good amount, the App won’t actually tell you that you’re wrong, but it might not be a valid assumption.
After you’ve set these inputs you’re part of the way done in projecting the QB position for the team. The balance of the passing stats will be projected when you set the rest of the skill position assumptions. But you’re done estimating the QB’s rushing potential now. Here’s a screenshot of the QB projection table.
The most important cells to pay attention to are perhaps the ADP cell and the RNK13 cell. RNK13 will tell you the place that the QB would have finished if they had compiled the projected stats in 2013. It’s also worth noting at this point that all of the depth chart assignments you’ll see in the app are based on ADP. So even if a player is listed as a team’s starting QB, but drafters aren’t valuing him that way, he won’t show up in the app. The reasoning for this is straightforward. In its simplest form, the App is a good way to check offensive assumptions versus ADP. So having ADP as an integral component of the App was important and more important than getting nominal depth chart assignments correct.
Wide Receiver Projections
Moving on to the wide receiver position, the input controls look like this:
The input controls impact the wide receiver projections in the table at the bottom of the app. The table looks like this:
An important note here is that the graphs are of historical team values, not player specific values. So the percent of team targets graph is for WR1 for whichever team you’re looking at, not for the player shown as WR1 in the table. This is because when you’re projecting that WR1, you have more considerations than just that player’s history. For instance, in the example above, if Eric Decker’s usage and production were shown in the graphs you would be missing important context as to the Jets’ recent history, like perhaps Geno Smith’s output to the WR1 last year.
However, because player specific data is also important I’ve made a tweak to the NFL Career Graphs app. In fact you might consider that App to be a companion to this tool.
The usage and production related variables that will go into the Projection Machine can now also be found in the Career Graphs App. So you can go to that App and look up Eric Decker’s historical catch rate (reCR in the graphs app) or his Target Percent (reTRGMS in the graphs app, or Receiving Target Market Share).
This might all sound very complicated, but remember that this is a complicated task.
Setting the values for WR1-W3 should be fairly straightforward for the most part. The inputs even allow you to assign a percent of rushing attempts to the WRs in case you think that will be an important source of fantasy scoring for a player like Percy Harvin. However, the rushing efficiency and TDs will be set by league average for WRs. That choice is actually likely to reduce forecast errors in the aggregate. If the WR doesn’t see a lot of carries, then it shouldn’t be an important part of their scoring production. The more carries the player sees, the more the defense should be prepared for it and over time you would expect the player’s average to be closer to the league average for WRs, which is still high compared to RB rushing attempts.
Note also that the WR4+ line takes all of the remaining targets for all passing attempts not accounted for in WR1-3, TE1-2 and RB1-3. If that number goes negative, you’ve done something wrong and you need to adjust your assumptions.
The TE assumptions tab is essentially the same as the WR assumptions tab, except it offers no chance for rushing attempts.
Running Back Projections
At this point the controls should be starting to look familiar. In the RB tabs you can set the assumptions for the percent of team carries a player will account for, their yards per carry, and also their touchdown rate. You can also set the assumptions for passing game involvement.
After you set those assumptions, the output will be reflected in changes to the RB table.
Again, the RNK13 column is how the projected fantasy point totals would have ranked if they had occurred in 2013. The RB4+ line is also taking all remaining carries not accounted for by the other positions. If that line goes negative, you need to adjust your assumptions.
The last tab is for adjusting your league scoring settings. If your league assigns 1 pt for every 25 yards passing, that’s .04 points per passing yard. I’ve limited the app to adjust the most commonly varying scoring settings.
That’s all there is to explain about the app. It’s a very complicated app, but this is a very complicated task. The most obvious and best use case for the app is to test assumptions you might have, like “Demaryius Thomas could pick up some of Eric Decker’s scoring and that should vault him to the top WR position in ADP” or “Eric Decker could still see 130 targets because he’ll be a low volume passing team’s top target, rather than a high volume passing team’s 2nd target.” Once you start to adjust the assumptions you’ll get a sense as to whether your assumption is realistic or not.
Have fun1 and let me know in the comments if there’s something about the app that I haven’t explained very well.
- probably not the right word (back)