Holy automation, Batman! The rankings page has been taken over by the machines.
I’ve never discussed my process for making weekly fantasy rankings for When Pigskins Fly before, but it started off as an incredibly manual process.
For the first three weeks of the fantasy football season, I went player-by-player through the NFL and, based on talent, situation, opponent and health, tried to choose who I felt the most confident starting.
The results were pretty good. I occasionally swung and missed, but that’s football — there’s some randomness built into the sport.
The problem is that, until now, I’d just been asking our audience to trust my opinion on blind faith. That runs counter to my goal of empowering my fellow nerds and board-game junkies to take control of their leagues. If I don’t tell you how I decide ranks, it’s not much fun to use them.
That’s where the ROBBOT comes in.
ROBBOT is a program that attempts to mimic what I did every week when I manually made my fantasy rankings. And I’m going to tell you how it works.
To start, ROBBOT looks at how every player does at the end of every game. It looks at every catch, every rush, every throw, and logs how many yards the player got and whether he scored a touchdown.
It uses this data to build a profile for each NFL player, calculating how many yards and touchdowns he would get in an average game. This step is meant to simulate the talent and situation evaluation I did during the first three weeks of rankings creation.
When evaluating players, both of these factors (talent and situation) are hugely important and interrelated. The player’s situation — how good his teammates are, how many opportunities he’s given with the ball, how smart the coaching staff calling his plays is — can all result in a player doing better or worse than he would otherwise. But a more talented player can make a bad situation look pretty good, and a less talented player can make great situations look average at best.
I spend hours every week agonizing over the chicken-and-egg dilemma of a player’s talent vs. his situation, but the ROBBOT is clearly a lot more grounded than the man on whom it’s based. ROBBOT doesn’t care which causes which, and instead looks at the result of the two factors. If situation + talent = good production, then ROBBOT elevates a player’s expected point production, regardless of which factor is more important for that specific player.
The end result is a player evaluation slightly more results-oriented than mine would be but more grounded in actual events than the scenarios I design in my head.
After the ROBBOT recalibrates its player profiles, it goes back across the league and evaluates the league’s defenses. Remember, for weekly rankings, talent and situation are only half the battle. Player health and opponent also need to be considered. Despite my efforts, ROBBOT still hasn’t figured out how to incorporate injuries into its fantasy rankings, but it incorporates opponent easily by creating defensive profiles.
If players whose profiles suggest they should be high scorers are routinely struggling against a particular team’s defense, the ROBBOT notes exactly how they’re struggling and uses that to build a team’s defensive profile. Sometimes, a defense will change the number of runs or catches a player gets. Other times, the defense doesn’t affect the number of opportunities for a player, but it can dramatically change how many yards a catch or run is worth.
At this point, it would be easy to fall down the rabbit hole again. We have player profiles that we use to construct defensive profiles, but obviously how well a player does is predicated on the defense he faces, and vice versa. So the ROBBOT could endlessly recalibrate to update the defensive profiles based on the player profiles, and then the player profiles based on the defensive profiles.
Here’s the fun bit, though — it doesn’t really matter. Much like my agony over situation vs. talent, re-calibrating a player profile to account for the defenses a player has faced changes almost nothing in terms of expected production in the future. As long as one side accounts for the other, the system works.
So at this point, the ROBBOT knows how good every player in the league is and how good every defense in the league is. All that’s left to do is to match up the two for the current week’s schedule and we’re golden.
At the end of the day, my name is still on these rankings, and I genuinely do want them to produce accurate results. So, I add in two last steps after ROBBOT spits out its fantasy rankings.
First, I tinker. ROBBOT is just a little baby robot. It tries really hard, but it’s still learning about football. I’m going to overrule it occasionally when I see a mistake I can explain. ROBBOT doesn’t know about an injured defender? I’ll raise the rankings of a few players going against that defense.
The second step might seem wimpy to some. I temper all of ROBBOT’s hot takes. Every week, the fantasy rankings I release are ROBBOT’s ranks after my meddling, averaged against the expert consensus ranks from FantasyPros.
This may seem like a vote of no confidence in our adorable robot friend, but in reality, it’s my way of making sure ROBBOT moderates its stances on certain players whom it either loves or despises. ROBBOT is still given a much bigger say in my rankings than any other single analyst, but if the entire industry is worried about a player whom ROBBOT loves, I want you to know there’s some risk in starting that player.
And that’s how the process works. If you’re ever wondering about expected targets, rush attempts, likelihood of a player scoring a touchdown … ROBBOT produces all those projections, and I can pass them along to you. Just tweet at our team, and we’ll send you ROBBOT’s peek inside the crystal ball.