Welcome to my first flex ranking! I’ll show you the week 8 rankings and results here, and hopefully I’ll get to make week 9 predictions before the week is over. It’s all still a work in progress, but let me fill you in on what I’ve been doing:
First, I created a web scraper to get RB, WR, and TE data from the last 7 years. I also created another one to pull FantasyPros ECR rankings. It turns out web scraping is easy with the R package “rvest”. Seriously everyone, if you’re not using R you’re making your life harder.
Next, I explored the data. I’ll have to post some of my explorations later. Some fascinating stuff here including (but not limited to):
- What happens to WR2+ scores when the WR1 is out. The short version: as a whole, the team tends to score about 5 fantasy points less, and each WR gets about 1 more fantasy point. Remember, this is just an average over the last few years. It’s obviously highly dependent on the specific situation.
- What happens to RB2+ scores when the RB1 is out. Short version: the team scores about 10 fewer points in total, but the RB2 scores about 5 more and the RB3 about 3 more.
- The distribution of points to the WRs and RBs based on team. It’s basically what you’d expect: NE and SEA spread it around pretty evenly, PIT gives about half to Antonio Brown.
- Playing at home or away. (Very little effect)
- Playing in division. (Very little effect. Some players affected more, but not significantly when you account for family-wise error rate)
- How fantasy scores are affected by score, opponent score, and score differential (score - opponent score). Again, it’s as expected; everyone scores more when their team scores more, WRs score more with negative point differentials, RBs score more with positive point differentials
I hope to get to tell you all about it in the future. For now, though, I’m just going to try and make predictions and compare myself to the pros.
I’ve made 3 models so far, but I’m probably not going to show you all of them right now. It gets a little clunky to show the rankings for 200 players. The models are all linear models, but they use different terms.
Model 1 models WRs using terms for player, team, score, opponent score, opponent, home/away, whether the WR1 is in that week, and the WRs rank on their team (WR1, WR2, etc.). RBs are modeled using terms for player, team, score, score differential, opponent, home/away, in-division, RB rank on their team, Whether the RB1 is in, and the interaction between those last 2 terms. TEs are modeled using player, opponent, score, opponent score, score^2, and opponent score^2. Data used to model is from 2015-2017
Same as model 1, but using only 2017 data
Here’s a tricky one. This model assumes that an entire team can be expected to get a total of X points against another team, and that those points are then divided among the players who are in. This sounds about right for some teams, right? Seattle and New England spread it around so much, everyone can’t all score every week, right? What happens when one of the WRs or RBs is out? It should be spread among the remaining players, right? Here’s what I did:
- Predict the fantasy points expected in a game based on team, opp, scores, and if WR1/RB1 is in
- Get the fraction of points that each player gets on each team. i.e., Zeke gets 95%, Crowell gets 50%, etc.
- Divide up the predicted points based on fraction (normalized to the players in the game). So if Philly is missing their RB2, their RB1 and RB3 would get more work, but proportionally as much.
This should probably work with teams like NE and PHI (whose RBs split the work), but not for Dallas when Zeke is out or PIT when Bell is out; they would likely use one backup as a workhorse if their main guy is out. This also doesn’t account for WRs and RBs taking each other’s work, as I model the total WR score and total RB score separately. Not ideal, but I think I have some good thoughts in this model.
So that’s what I did last week. I’m not certain how to show the predictions. If I put them all in one pretty graph (here’s model 1):
It’s not great. I can also break the players out into groups of 36 so you can read them (again, model 1):
But that’s still not easy to search. I’ll have to work on displaying. Anyway, here’s what the weekly accuracy scores look like for my models:
Remember, I’m trying to copy FantasyPros accuracy scoring (It’s a slight modification, see here), so lower accuracy score is better. The accuracy score is roughly how many points you were off by. If you guessed everyone correctly that week the score would be 0. Like FantasyPros I score the WR and RB accuracy by the top 35 predicted receivers, and the TE accuracy by the top 15. I also decided to rank my overall flex ranking by looking at the top 90, because that’s really the thing I care the most about. Here are the scores for my 3 models compared to FantasyPros ECR (as downloaded 10/26):
FantasyPros ECR beat all of my models models at the running back position, but a few of my models beat them at wide receiver and tight end positions. And overall, the Flex accuracy of all of my models was slightly better than FantasyPros. Finally, if I take the best of each model and put them together into a super flex model (The WRs from model 1, RBs from model 3, and TEs from Model 2), I get an accuracy score of 477.1, which is slightly better than all the other models!
So here’s what I’m thinking. It’s a little crazy to show the results for every model every week like I do with QBs, Defenses, and Kickers. Maybe I’ll try just showing the model that was best last week. I’ll get better at the writing and predicting. For now, though, this isn’t too shabby.
Week 9 should hopefully be out before week 9 is over. I don’t have anyone in Thursday night’s game, but I’ll try and get it out so I can make decisions for later in the week. I have an undefeated team to defeat.