End of Season Fantasy Round Up: Draft Values, Busts, and Best Free Agents of the 2016 Season

[This article was first published on R – Jesse Piburn, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

A few weeks back I posted an article looking at the biggest values of the 2016 fantasy season through week 13. Now that the season is over, let’s rerun the analysis and see what happens.

The methodology is the same as before. Simply taking the ratio of the average draft position (ADP) to the player’s Value Over Replacement (VOR) ranking. The methodology isn’t perfect of course, it doesn’t consider consistency or playoff performance among other things, but with parsimony in mind we’ll stick to this simple formula. Throughout the off-season I’ll explore other measures.

Thanks to some feedback from reddit user jitit who suggested having a cut off ADP, so guys drafted in the 500’s don’t pollute the rankings (which of course I should have done in the first place), this time around I limited the ranking to players with an ADP of 200 or less. Players with an ADP over 200 were put into the free agency rankings.

All values are based on FantasyPros PPR scoring and include weeks 1 through 16 because if your championship goes into week 17, you need to reevaluate your life. The R code to reproduce this is at the bottom of the article.

Biggest Values

Jordan Howard ended the season with the highest overall draft value and for good reason. Drafted as RB62, he ended the season as RB10, outscoring guys like Todd Gurley (drafted as RB1, finished RB18) and Lamar Miller (RB5, RB16). Matt Ryan (QB19, QB2)  and DeMarco Murray (RB18, RB5) were close behind.

Before the playoffs started, Melvin Gordon (RB23, RB7), was by far the best draft value of the year. Through week 13, Melvin Gordon was RB3, behind only David Johnson (RB2, RB1) and Zeke Elliott (RB3, RB2) consensus first round picks. But going down with an injury in week 14 dropped him to a still impressive RB7.

Biggest Busts

The bust list (sort the draft value column ascending) is pretty much unchanged from the previous (week 13) bust list. Adrian Peterson (RB4, RB120) and Keenan Allen (WR8, WR 155) take the top. But a special award needs to be given to DeAndre Hopkins (WR4, WR34) for not missing a single game and still being a bigger bust than Jamaal Charles (RB8, RB113) who had a grand total of 12 carries the entire 2016 season. Hats off the you DeAndre, here’s hoping that Tom Savage will bring you back to superstar status.

Player Pos ADP Drafted As Pos Rank Points PPG VOR Draft Value
Jordan Howard CHI RB 197.0 RB62 RB10 216.6 15.5 60.7 10.368
Matt Ryan ATL QB 155.3 QB19 QB2 318.1 21.2 65.8 9.135
DeMarco Murray TEN RB 45.0 RB18 RB5 290.9 19.4 135.0 9.0
LeGarrette Blount NE RB 108.3 RB38 RB8 221.8 14.8 65.9 6.769
LeSean McCoy BUF RB 26.3 RB11 RB4 296.7 21.2 140.8 6.575
David Johnson ARI RB 6.0 RB2 RB1 400.4 26.7 244.5 6.0
Melvin Gordon SD RB 64.5 RB23 RB7 250.6 19.3 94.7 5.864
Ezekiel Elliott DAL RB 9.8 RB3 RB2 325.4 21.7 169.5 4.9
Jay Ajayi MIA RB 118.0 RB42 RB13 204.4 14.6 48.5 4.538
Jimmy Graham SEA TE 129.5 TE14 TE5 178.9 11.9 46.8 4.466
Travis Kelce KC TE 57.5 TE4 TE1 221.2 14.7 89.1 4.423
Le’Veon Bell PIT RB 12.5 RB6 RB3 317.4 26.5 161.5 4.167
Dak Prescott DAL QB 187.0 QB22 QB6 284.7 19.0 32.4 4.156
Spencer Ware KC RB 143.0 RB46 RB14 193.9 13.9 38.0 4.086
Michael Thomas NO WR 132.0 WR52 WR11 224.1 16.0 36.2 3.474
Aaron Rodgers GB QB 40.5 QB2 QB1 345.8 23.1 93.5 3.375
Kirk Cousins WAS QB 120.5 QB13 QB4 289.2 19.3 36.9 3.347
Frank Gore IND RB 78.5 RB29 RB11 204.7 13.6 48.8 3.271
Drew Brees NO QB 61.8 QB5 QB3 312.3 20.8 60.0 3.09
Greg Olsen CAR TE 44.5 TE3 TE2 202.1 13.5 70.0 2.967
Jordy Nelson GB WR 18.5 WR11 WR2 292.1 19.5 104.2 2.643
Doug Baldwin SEA WR 51.8 WR26 WR6 247.2 16.5 59.3 2.467
Terrelle Pryor CLE WR 184.8 WR66 WR20 197.0 13.1 9.1 2.369
Isaiah Crowell CLE RB 111.3 RB40 RB17 186.5 12.4 30.6 2.368
Michael Crabtree OAK WR 76.8 WR36 WR10 229.6 15.3 41.7 2.327
Delanie Walker TEN TE 61.8 TE5 TE4 179.6 12.8 47.5 2.207
Devonta Freeman ATL RB 17.5 RB7 RB6 255.4 17.0 99.5 2.188
Jason Witten DAL TE 136.0 TE15 TE9 150.3 10.7 18.2 2.159
Tyrod Taylor BUF QB 128.3 QB14 QB7 270.9 18.1 18.6 2.103
Martellus Bennett NE TE 113.3 TE11 TE7 155.8 10.4 23.7 2.098
Mike Wallace BAL WR 168.8 WR63 WR22 195.5 13.0 7.6 2.01
T.Y. Hilton IND WR 28.0 WR15 WR5 258.3 17.2 70.4 2.0
Tevin Coleman ATL RB 118.0 RB41 RB21 176.2 14.7 20.3 2.0
Terrance West BAL RB 168.5 RB55 RB23 163.5 10.9 7.6 1.982
Marcus Mariota TEN QB 153.3 QB17 QB9 260.7 17.4 8.4 1.893
Mike Evans TB WR 18.0 WR10 WR4 286.6 19.1 98.7 1.8
Larry Fitzgerald ARI WR 57.5 WR27 WR9 229.6 15.3 41.7 1.797
Bilal Powell NYJ RB 110.3 RB39 RB22 174.3 11.6 18.4 1.779
Derek Carr OAK QB 111.3 QB12 QB8 268.4 17.9 16.1 1.712
Pierre Garcon WAS WR 174.0 WR64 WR27 187.5 12.5 -0.4 1.657
Latavius Murray OAK RB 41.0 RB15 RB12 204.7 15.7 48.8 1.64
Charles Clay BUF TE 162.0 TE19 TE15 131.2 9.4 -0.9 1.514
Matthew Stafford DET QB 130.0 QB16 QB10 259.8 17.3 7.5 1.512
Andrew Luck IND QB 53.5 QB4 QB5 289.1 20.7 36.8 1.446
Eric Ebron DET TE 139.5 TE16 TE13 132.1 11.0 0.0 1.381
Rishard Matthews TEN WR 154.0 WR55 WR30 185.1 12.3 -2.8 1.351
Mark Ingram NO RB 24.3 RB9 RB9 217.0 14.5 61.1 1.35
Andy Dalton CIN QB 154.0 QB18 QB14 247.2 16.5 -5.1 1.328
Emmanuel Sanders DEN WR 67.0 WR31 WR15 212.6 14.2 24.7 1.264
Darren Sproles PHI RB 125.5 RB44 RB25 155.9 11.1 0.0 1.255
Steve Smith BAL WR 157.0 WR58 WR36 177.5 13.7 -10.4 1.198
James White NE RB 129.8 RB45 RB26 154.7 10.3 -1.2 1.191
Theo Riddick DET RB 100.0 RB37 RB24 161.8 16.2 5.9 1.124
Carlos Hyde SF RB 43.3 RB17 RB15 192.1 14.8 36.2 1.11
Jameis Winston TB QB 129.8 QB15 QB15 246.6 16.4 -5.7 1.109
Chris Thompson WAS RB 161.7 RB56 RB30 137.3 9.2 -18.6 1.108
Zach Miller CHI TE 150.5 TE18 TE18 119.6 12.0 -12.5 1.107
Zach Ertz PHI TE 80.5 TE7 TE11 144.7 11.1 12.6 1.088
Brandin Cooks NO WR 23.8 WR14 WR7 241.4 17.2 53.5 1.082
Stefon Diggs MIN WR 97.3 WR42 WR24 193.3 14.9 5.4 1.069
Jeremy Hill CIN RB 59.8 RB21 RB20 176.3 11.8 20.4 1.031
Kenny Stills MIA WR 179.3 WR65 WR47 154.5 10.3 -33.4 1.007
Blake Bortles JAC QB 92.3 QB9 QB11 257.0 17.1 4.7 1.003
Christine Michael GB RB 148.8 RB48 RB31 134.4 9.6 -21.5 0.979
Ted Ginn CAR WR 185.8 WR68 WR50 145.7 9.7 -42.2 0.968
Clive Walford OAK TE 186.3 TE23 TE31 84.2 6.0 -47.9 0.904
Antonio Gates SD TE 94.5 TE10 TE14 131.3 10.9 -0.8 0.892
Jerick McKinnon MIN RB 147.8 RB51 RB36 122.4 8.7 -33.5 0.826
Philip Rivers SD QB 102.5 QB11 QB17 244.1 16.3 -8.2 0.813
Kenneth Dixon BAL RB 185.5 RB59 RB47 87.1 7.9 -68.8 0.796
Matt Forte NYJ RB 40.5 RB14 RB19 183.6 13.1 27.7 0.794
Devontae Booker DEN RB 147.5 RB50 RB39 117.8 7.9 -38.1 0.789
Willie Snead NO WR 95.5 WR41 WR32 180.3 12.9 -7.6 0.776
Ryan Tannehill MIA QB 165.5 QB20 QB25 190.4 14.6 -61.9 0.739
Ben Roethlisberger PIT QB 70.0 QB6 QB13 252.3 18.0 0.0 0.722
Victor Cruz NYG WR 192.0 WR67 WR78 98.9 7.6 -89.0 0.703
Dwayne Allen IND TE 120.0 TE13 TE23 101.2 7.8 -30.9 0.702
Ladarius Green PIT TE 175.3 TE22 TE40 54.4 9.1 -77.7 0.701
Sterling Shepard NYG WR 91.0 WR39 WR35 177.7 11.8 -10.2 0.7
Chris Hogan NE WR 159.5 WR60 WR61 122.2 8.7 -65.7 0.693
Will Fuller HOU WR 164.5 WR59 WR62 116.8 9.0 -71.1 0.691
Charcandrick West KC RB 185.7 RB61 RB62 65.5 4.7 -90.4 0.67
Mohamed Sanu ATL WR 138.0 WR53 WR55 135.6 9.7 -52.3 0.657
Tyler Eifert CIN TE 117.5 TE12 TE25 98.4 12.3 -33.7 0.649
Virgil Green DEN TE 180.0 TE21 TE45 41.0 4.6 -91.1 0.647
Golden Tate DET WR 45.3 WR22 WR18 202.7 13.5 14.8 0.647
Tyler Boyd CIN WR 154.5 WR56 WR63 116.7 7.8 -71.2 0.646
T.J. Yeldon JAC RB 93.3 RB35 RB29 137.7 9.2 -18.2 0.643
Jordan Reed WAS TE 33.5 TE2 TE8 155.6 14.1 23.5 0.609
DeSean Jackson WAS WR 83.3 WR37 WR38 175.1 12.5 -12.8 0.608
DeAndre Washington OAK RB 152.3 RB52 RB52 77.5 6.5 -78.4 0.607
Jared Cook GB TE 141.0 TE17 TE38 62.1 6.9 -70.0 0.6
Gary Barnidge CLE TE 84.8 TE8 TE20 115.2 7.7 -16.9 0.597
Coby Fleener NO TE 66.0 TE6 TE16 130.5 8.7 -1.6 0.595
Tavon Austin LA WR 116.0 WR45 WR52 144.8 10.3 -43.1 0.589
C.J. Prosise SEA RB 164.7 RB57 RB63 61.0 10.2 -94.9 0.584
Demaryius Thomas DEN WR 28.0 WR16 WR13 217.6 14.5 29.7 0.571
Austin Seferian-Jenkins NYJ TE 163.7 TE20 TE50 34.4 3.8 -97.7 0.568
Russell Wilson SEA QB 53.5 QB3 QB12 255.4 17.0 3.1 0.563
James Starks GB RB 160.3 RB54 RB64 58.9 6.5 -97.0 0.56
Dorial Green-Beckham PHI WR 167.3 WR61 WR88 84.7 6.5 -103.2 0.545
Travis Benjamin SD WR 115.8 WR44 WR57 132.4 9.5 -55.5 0.541
Jarvis Landry MIA WR 30.0 WR18 WR16 208.9 13.9 21.0 0.536
Julian Edelman NE WR 39.8 WR20 WR19 198.6 13.2 10.7 0.524
Rashad Jennings NYG RB 87.3 RB32 RB34 125.7 10.5 -30.2 0.517
Eli Manning NYG QB 92.8 QB10 QB21 216.9 14.5 -35.4 0.504
Phillip Dorsett IND WR 146.5 WR54 WR83 89.2 6.4 -98.7 0.503
Tajae Sharpe TEN WR 129.5 WR51 WR72 105.3 7.0 -82.6 0.5
Ryan Mathews PHI RB 64.8 RB25 RB27 144.6 11.1 -11.3 0.491
Duke Johnson CLE RB 64.8 RB24 RB28 144.6 9.6 -11.3 0.487
Carson Palmer ARI QB 80.3 QB8 QB20 223.0 15.9 -29.3 0.484
Tom Brady NE QB 72.3 QB7 QB19 232.8 21.2 -19.5 0.482
Sammie Coates PIT WR 156.3 WR62 WR91 77.9 6.0 -110.0 0.481
Devante Parker MIA WR 88.5 WR38 WR51 144.9 10.4 -43.0 0.456
Alfred Morris DAL RB 153.0 RB53 RB77 37.9 2.9 -118.0 0.446
Jonathan Stewart CAR RB 70.0 RB27 RB32 132.2 11.0 -23.7 0.446
Ryan Fitzpatrick NYJ QB 185.3 QB21 QB29 116.9 9.0 -135.4 0.443
Julius Thomas JAC TE 90.8 TE9 TE32 82.1 9.1 -50.0 0.439
Jordan Matthews PHI WR 60.8 WR29 WR40 171.4 12.2 -16.5 0.431
Amari Cooper OAK WR 21.3 WR13 WR14 217.0 14.5 29.1 0.426
Shane Vereen NYG RB 145.3 RB49 RB76 38.2 7.6 -117.7 0.425
Dion Lewis NE RB 134.5 RB47 RB70 47.5 7.9 -108.4 0.42
Chris Ivory JAC RB 93.5 RB36 RB44 94.5 8.6 -61.4 0.419
Derrick Henry TEN RB 92.5 RB34 RB45 91.9 7.1 -64.0 0.409
Chris Johnson ARI RB 176.0 RB58 RB108 15.5 3.9 -140.4 0.406
Marvin Jones DET WR 65.8 WR30 WR42 159.7 11.4 -28.2 0.404
Justin Forsett DEN RB 122.0 RB43 RB68 53.6 6.7 -102.3 0.401
Devin Funchess CAR WR 118.0 WR47 WR87 86.1 6.2 -101.8 0.391
Javorius Allen BAL RB 172.7 RB60 RB124 7.9 2.0 -148.0 0.379
Corey Coleman CLE WR 117.0 WR46 WR89 83.4 9.3 -104.5 0.375
Giovani Bernard CIN RB 62.0 RB22 RB37 122.3 12.2 -33.6 0.344
Kelvin Benjamin CAR WR 46.3 WR23 WR37 175.8 11.7 -12.1 0.343
Torrey Smith SF WR 123.3 WR49 WR99 64.7 5.4 -123.2 0.341
Charles Sims TB RB 91.0 RB33 RB59 67.9 9.7 -88.0 0.337
DeAngelo Williams PIT RB 84.5 RB30 RB53 75.7 10.8 -80.2 0.331
Robert Griffin CLE QB 194.0 QB23 QB36 50.0 12.5 -202.3 0.327
Tyler Lockett SEA WR 72.8 WR34 WR60 124.1 8.3 -63.8 0.324
Odell Beckham Jr. NYG WR 2.8 WR3 WR3 287.2 19.1 99.3 0.311
Kamar Aiken BAL WR 112.8 WR43 WR100 63.6 4.2 -124.3 0.307
Matt Jones WAS RB 76.3 RB28 RB54 75.3 10.8 -80.6 0.298
Cam Newton CAR QB 34.3 QB1 QB16 246.2 17.6 -6.1 0.288
Lamar Miller HOU RB 11.8 RB5 RB16 191.1 13.7 35.2 0.274
Allen Hurns JAC WR 69.5 WR32 WR75 100.7 9.2 -87.2 0.26
John Brown ARI WR 70.8 WR33 WR77 99.2 7.1 -88.7 0.26
Laquon Treadwell MIN WR 142.0 WR57 WR181 2.5 0.6 -185.4 0.251
Markus Wheaton PIT WR 125.5 WR50 WR147 17.1 5.7 -170.8 0.237
Vincent Jackson TB WR 118.5 WR48 WR128 32.3 6.5 -155.6 0.237
Michael Floyd NE WR 58.5 WR28 WR73 103.2 7.9 -84.7 0.222
Ameer Abdullah DET RB 84.8 RB31 RB91 26.8 13.4 -129.1 0.217
Kevin White CHI WR 94.8 WR40 WR117 38.6 9.7 -149.3 0.205
Randall Cobb GB WR 36.5 WR19 WR49 148.3 11.4 -39.6 0.193
Jeremy Langford CHI RB 49.5 RB19 RB61 65.5 6.0 -90.4 0.179
Donte Moncrief IND WR 46.5 WR24 WR74 102.6 11.4 -85.3 0.175
Antonio Brown PIT WR 1.0 WR1 WR1 307.3 20.5 119.4 0.167
C.J. Anderson DEN RB 35.3 RB13 RB42 102.5 14.6 -53.4 0.166
Arian Foster FA RB 66.5 RB26 RB97 19.3 4.8 -136.6 0.159
Thomas Rawls SEA RB 42.5 RB16 RB58 68.1 8.5 -87.8 0.158
Jeremy Maclin KC WR 41.3 WR21 WR76 100.2 9.1 -87.7 0.154
Danny Woodhead SD RB 55.8 RB20 RB90 27.1 13.6 -128.8 0.143
Doug Martin TB RB 29.5 RB12 RB48 85.5 10.7 -70.4 0.125
Eric Decker NYJ WR 49.0 WR25 WR114 40.4 13.5 -147.5 0.108
Alshon Jeffery CHI WR 20.3 WR12 WR53 144.1 13.1 -43.8 0.103
Dez Bryant DAL WR 12.5 WR7 WR33 180.0 15.0 -7.9 0.101
Julio Jones ATL WR 2.3 WR2 WR8 237.3 18.3 49.4 0.1
Todd Gurley LA RB 4.8 RB1 RB18 186.5 12.4 30.6 0.1
Brandon Marshall NYJ WR 15.8 WR9 WR45 156.7 10.4 -31.2 0.091
Allen Robinson JAC WR 9.8 WR6 WR29 186.1 12.4 -1.8 0.088
Sammy Watkins BUF WR 28.5 WR17 WR95 75.9 10.8 -112.0 0.086
Eddie Lacy GB RB 25.8 RB10 RB73 42.8 8.6 -113.1 0.077
Rob Gronkowski NE TE 11.5 TE1 TE26 97.0 12.1 -35.1 0.063
A.J. Green CIN WR 6.0 WR5 WR28 186.4 18.6 -1.5 0.055
Jamaal Charles KC RB 21.8 RB8 RB113 13.4 4.5 -142.5 0.05
DeAndre Hopkins HOU WR 5.8 WR4 WR34 178.1 11.9 -9.8 0.045
Keenan Allen SD WR 15.0 WR8 WR155 12.3 12.3 -175.6 0.028
Adrian Peterson MIN RB 10.8 RB4 RB120 9.0 3.0 -146.9 0.024

 

Best Free Agent Picks Ups

Which players were free agents at the start of the year will vary widely by league, so to be consistent and stay in line with the cut off from above, I defined free agents here as players with an ADP of over 200. Since value doesn’t really make sense for free agents… they’re free, I used VOR to rank them. Below is a table of the top 50 free agents based on full season VOR.

Because the drop off of TE scoring is so steep (that will be another post), Kyle Rudolph (TE30, TE3) and Cameron Brate (TE36, TE6) finished the season with the highest VOR of any free agent players, 48.2 and 38.9 points, respectively. Probably who most people would consider the best free agent pick up of the year, Davante Adams (WR82, WR12), finished directly behind Rudolph and Brate with an end of season VOR of 35.7 points.

Player Pos ADP Drafted As Pos Rank Points PPG VOR
Kyle Rudolph MIN TE 206.3 TE30 TE3 180.3 12.0 48.2
Cameron Brate TB TE 260.7 TE36 TE6 171.0 11.4 38.9
Davante Adams GB WR 222.7 WR82 WR12 223.6 14.9 35.7
Dennis Pitta BAL TE 413.0 TE47 TE10 148.8 9.9 16.7
Tyrell Williams SD WR 290.3 WR94 WR17 203.9 13.6 16.0
Kenny Britt LA WR 268.3 WR97 WR21 196.2 13.1 8.3
Adam Thielen MIN WR 377.0 WR142 WR23 193.5 12.9 5.6
Jack Doyle IND TE 486.0 TE62 TE12 136.4 9.1 4.3
Jamison Crowder WAS WR 237.7 WR87 WR25 187.9 12.5 0.0
Tyreek Hill KC WR 410.0 WR153 WR26 187.9 12.5 0.0
Cole Beasley DAL WR 283.0 WR104 WR31 181.1 12.1 -6.8
C.J. Fiedorowicz HOU TE 484.0 TE61 TE17 124.7 8.9 -7.4
Brandon LaFell CIN WR 254.7 WR96 WR39 172.3 11.5 -15.6
Hunter Henry SD TE 281.7 TE34 TE19 115.9 9.7 -16.2
Joe Flacco BAL QB 204.3 QB27 QB18 233.3 15.6 -19.0
Cameron Meredith CHI WR 545.0 NA WR41 165.3 12.7 -22.6
Vernon Davis WAS TE 406.0 TE45 TE21 107.4 7.7 -24.7
Lance Kendricks LA TE 398.0 TE43 TE22 106.7 7.1 -25.4
Robert Kelley WAS RB 218.7 RB73 RB33 129.3 9.9 -26.6
Marqise Lee JAC WR 240.5 WR81 WR43 157.8 10.5 -30.1
Anquan Boldin DET WR 208.3 WR73 WR44 157.7 10.5 -30.2
Ryan Griffin HOU TE 451.0 TE52 TE24 101.2 6.7 -30.9
Matt Asiata MIN RB 331.0 RB114 RB35 125.0 8.3 -30.9
Quincy Enunwa NYJ WR 330.0 WR127 WR46 155.8 10.4 -32.1
Dontrelle Inman SD WR 305.5 WR110 WR48 153.9 10.3 -34.0
Tim Hightower NO RB 224.3 RB74 RB38 117.9 7.9 -38.0
Jalen Richard OAK RB 339.0 RB118 RB40 114.8 7.7 -41.1
Mike Gillislee BUF RB 278.7 RB88 RB41 113.6 8.1 -42.3
Jermaine Gresham ARI TE 462.0 TE54 TE27 88.0 5.9 -44.1
Jesse James PIT TE 202.7 TE26 TE28 87.2 5.8 -44.9
Vance McDonald SF TE 218.7 TE24 TE29 87.1 8.7 -45.0
Taylor Gabriel ATL WR 415.0 WR155 WR54 141.9 11.8 -46.0
Will Tye NYG TE 239.3 TE31 TE30 84.8 5.7 -47.3
Alex Smith KC QB 227.7 QB28 QB22 200.2 14.3 -52.1
Sam Bradford MIN QB 255.0 QB31 QB23 199.5 14.3 -52.8
Jeremy Kerley SF WR 332.0 WR128 WR56 134.6 9.0 -53.3
Ty Montgomery GB WR 333.0 WR129 WR58 131.4 9.4 -56.5
Dion Sims MIA TE 488.0 TE63 TE33 75.6 6.3 -56.5
Carson Wentz PHI QB 243.0 QB32 QB24 194.9 13.0 -57.4
Robert Turbin IND RB 273.0 RB91 RB43 97.0 6.9 -58.9
Garrett Celek SF TE 418.0 TE48 TE34 72.1 5.5 -60.0
J.J. Nelson ARI WR 273.0 WR91 WR59 127.6 9.8 -60.3
Colin Kaepernick SF QB 342.5 QB36 QB26 188.1 18.8 -64.2
Trey Burton PHI TE 545.0 NA TE35 66.8 5.1 -65.3
Richard Rodgers GB TE 263.0 TE37 TE36 66.7 4.8 -65.4
Damien Williams MIA RB 310.0 RB107 RB46 89.6 6.4 -66.3
Austin Hooper ATL TE 323.0 TE39 TE37 64.1 5.3 -68.0
Jacob Tamme ATL TE 274.3 TE28 TE39 61.0 7.6 -71.1
Travaris Cadet NO RB 366.0 RB127 RB49 83.2 5.9 -72.7
Shaun Draughn SF RB 215.7 RB68 RB50 82.0 5.9 -73.9

 

Best Second Half Free Agents

Considering the entire season however might not tell the whole story as some players don’t come on until later in the season. Looking at the entire season washes out the value that players like Tyreek Hill (WR153, WR26) and Adam Thielen (WR142, WR23) added to your team in the second half of the season. In the second half of the season, Tyreek Hill finished as WR7, outscoring the likes of Brandin Cooks (WR14, WR7) and T.Y. Hilton (WR15, WR5) in weeks 8-16. In the same time frame, Adam Thielen finished as WR9. In the table below all values are calculated using only the games from weeks 8-16, thus the Pos Rank column is the rank of that player in weeks 8-16 only, not the entire season as in the other tables and the parenthetical notations throughout the article.

Player Pos ADP Drafted As Pos Rank Points PPG VOR
Cameron Brate TB TE 260.7 TE36 TE3 116.4 12.9 37.4
Tyreek Hill KC WR 410.0 WR153 WR7 141.7 15.7 35.2
Kyle Rudolph MIN TE 206.3 TE30 TE4 107.2 11.9 28.2
Adam Thielen MIN WR 377.0 WR142 WR9 133.1 14.8 26.6
Davante Adams GB WR 222.7 WR82 WR10 132.6 14.7 26.1
Robert Kelley WAS RB 218.7 RB73 RB11 111.9 14.0 22.7
Tim Hightower NO RB 224.3 RB74 RB15 106.6 11.8 17.4
Colin Kaepernick SF QB 342.5 QB36 QB9 155.9 19.5 15.4
Taylor Gabriel ATL WR 415.0 WR155 WR15 121.3 15.2 14.8
Tyrell Williams SD WR 290.3 WR94 WR23 108.3 13.5 1.8
Dontrelle Inman SD WR 305.5 WR110 WR24 107.2 13.4 0.7
Joe Flacco BAL QB 204.3 QB27 QB13 140.5 17.6 0.0
Cameron Meredith CHI WR 545.0 NA WR28 105.0 13.1 -1.5
Dennis Pitta BAL TE 413.0 TE47 TE14 77.3 9.7 -1.7
J.J. Nelson ARI WR 273.0 WR91 WR30 104.4 13.1 -2.1
Jamison Crowder WAS WR 237.7 WR87 WR34 100.7 12.6 -5.8
Jermaine Gresham ARI TE 462.0 TE54 TE15 72.6 9.1 -6.4
Kenny Britt LA WR 268.3 WR97 WR35 99.7 12.5 -6.8
C.J. Fiedorowicz HOU TE 484.0 TE61 TE16 68.1 9.7 -10.9
Sam Bradford MIN QB 255.0 QB31 QB19 129.2 14.4 -11.3
Marqise Lee JAC WR 240.5 WR81 WR38 95.1 10.6 -11.4
Mike Gillislee BUF RB 278.7 RB88 RB32 76.3 10.9 -12.9
Matt Asiata MIN RB 331.0 RB114 RB35 74.4 8.3 -14.8
Ty Montgomery GB WR 333.0 WR129 WR41 90.4 11.3 -16.1
Cole Beasley DAL WR 283.0 WR104 WR42 90.4 10.0 -16.1
Ryan Griffin HOU TE 451.0 TE52 TE19 62.2 7.8 -16.8
Vernon Davis WAS TE 406.0 TE45 TE20 61.1 7.6 -17.9
Dion Sims MIA TE 488.0 TE63 TE21 58.2 8.3 -20.8
Robert Turbin IND RB 273.0 RB91 RB40 67.1 8.4 -22.1
Brandon LaFell CIN WR 254.7 WR96 WR48 84.3 10.5 -22.2
Jalen Richard OAK RB 339.0 RB118 RB42 65.4 8.2 -23.8
Jack Doyle IND TE 486.0 TE62 TE22 55.2 6.9 -23.8
Malcolm Mitchell NE WR 241.0 WR88 WR51 81.9 11.7 -24.6
Eli Rogers PIT WR 211.0 WR79 WR52 81.4 10.2 -25.1
Vance McDonald SF TE 218.7 TE24 TE24 52.9 10.6 -26.1
Robby Anderson NYJ WR 386.0 WR145 WR53 79.5 9.9 -27.0
Will Tye NYG TE 239.3 TE31 TE25 51.9 6.5 -27.1
Lance Kendricks LA TE 398.0 TE43 TE26 51.6 6.5 -27.4
Carson Wentz PHI QB 243.0 QB32 QB24 111.7 12.4 -28.8
Alex Smith KC QB 227.7 QB28 QB25 111.5 13.9 -29.0
Anquan Boldin DET WR 208.3 WR73 WR55 74.5 9.3 -32.0
Hunter Henry SD TE 281.7 TE34 TE30 46.9 7.8 -32.1
Garrett Celek SF TE 418.0 TE48 TE32 46.2 6.6 -32.8
Trey Burton PHI TE 545.0 NA TE33 43.8 5.5 -35.2
Quincy Enunwa NYJ WR 330.0 WR127 WR58 70.9 8.9 -35.6
Richard Rodgers GB TE 263.0 TE37 TE34 43.3 5.4 -35.7
Travaris Cadet NO RB 366.0 RB127 RB47 50.1 6.3 -39.1
Shaun Draughn SF RB 215.7 RB68 RB48 49.9 7.1 -39.3
Adam Humphries TB WR 327.0 WR125 WR60 65.0 8.1 -41.5
Trevor Siemian DEN QB 214.0 QB24 QB26 98.3 14.0 -42.2

 

Bonus: They Are Who We Thought They Were!

A total of 8 players ended up finishing the season at exactly same positional ranking as they were drafted.

Antonio Brown PIT (WR1, WR1)
Odell Beckham Jr. NYG (WR3, WR3)
Mark Ingram NO (RB9, RB9)
Jameis Winston TB (QB15, QB15)
Zach Miller CHI (TE18, TE18)
Phil Dawson SF (K26, K26)
DeAndre Washington OAK (RB52, RB52)
Blaine Gabbert SF (QB33, QB33)

Say what you want about San Francisco, but at least they’re predictably bad.

 

The R code to reproduce all of this is below

library(dplyr)
library(rvest)

### functions -----
getPoints <- function(year = 2016, weeks, PPR = TRUE, name.with.team = TRUE) {
  
  format_url <- ifelse(PPR, "ppr.php", "")
  
  week_min <- min(weeks)
  week_max <- max(weeks)
  week_url <- paste0(week_min, ":", week_max)
  
  points_url <- paste0("https://www.fantasypros.com/nfl/reports/leaders/",
                       format_url, "?year=", year, "&week=", week_url)
  
  fp <- html(points_url) %>% html_table() %>% .[[1]] 
  
  fp$starting_week <- week_min
  fp$ending_week <- week_max
  
  if (name.with.team) {
    
    fp$Player <- paste(fp$Player, fp$Team)
  
    }

  names(fp) <- tolower(names(fp))
  names(fp)[which(names(fp) == "rank")] <- "point_rank"
  
  fp
}


getADP <- function(year = 2016, PPR = TRUE) {
  
  format_url <- ifelse(PPR, "ppr-overall.php", "overall.php")
  
  # need this to get team abbrevations
  points_url <- "https://www.fantasypros.com/nfl/reports/leaders/ppr.php?year=2016&week=1:16"
  fp <- html(points_url) %>% html_table() %>% .[[1]] 

  adp_url <- paste0("https://www.fantasypros.com/nfl/adp/",
                       format_url, "?year=", year)
  
  adp <- html(adp_url) %>% html_table() %>% .[[1]] 
  
  
  ## ADP Table -----
  teams <- unique(fp$Team)
  teams <- c(teams, "DST", "FA")
  
  # current free agents do not have a team or FA indicator
  # find them and add FA
  fa_index <- which(!grepl(paste0(teams, collapse = "|"), adp$`Player Team (Bye)`))
  fa_names <- adp$`Player Team (Bye)`[fa_index]
  fa_new_names <- paste(fa_names, "FA")
  adp[fa_index, "Player Team (Bye)"] <- fa_new_names
  
  adp_name <- sapply(strsplit(adp$`Player Team (Bye)`, " "), FUN = function(x) {
    
    team_vec <-  x %in% teams
    team_index <- which(team_vec)
    
    if (sum(team_index > 0)) {
      
      name_vec <- x[1:(team_index)]
      out <- paste0(name_vec, collapse = " ")
      
    } else {
      
      out <- paste0(x, collapse = " ")
    }
    
    out
  }
  )
  
  adp$Player <- adp_name
  adp$apd_rank <- adp$Rank
  
  adp <- adp %>% mutate(player = adp_name,
                        adp_rank = Rank,
                        adp_avg = AVG,
                        adp_pos = POS) %>%
    select(player, adp_rank, adp_avg, adp_pos)
  
  adp
}
### functions -----



fp <- getPoints(weeks = 1:16, PPR = TRUE)
adp <- getADP(PPR = TRUE)

### join the tables and do some clean up -----
df <- right_join(adp, fp, by = "player")

### players that were not in the adp fill in the rank and avg -----
df[is.na(df$adp_rank), "adp_rank"] <- max(df$adp_rank, na.rm = TRUE) + 1
df[is.na(df$adp_avg), "adp_avg"] <- max(df$adp_avg, na.rm = TRUE) + 1


### calculate VOR and draft value -----
vorp_df <- df %>% group_by(position) %>% arrange(desc(points)) %>% 
  mutate(pos_rank = 1:n(),
         replace_rank = ifelse(position == "QB", 13, 30),
         replace_rank = ifelse(position == "RB", 25, replace_rank),
         replace_rank = ifelse(position == "WR", 25, replace_rank),
         replace_rank = ifelse(position == "TE", 13, replace_rank),
         replace_rank = ifelse(position == "K", 13, replace_rank),
         replace_rank = ifelse(position == "DST", 13, replace_rank),
         replace_value = nth(points, median(replace_rank)),
         vor = points - replace_value) %>% ungroup() %>% 
  arrange(desc(vor)) %>% 
  mutate(vor_rank = 1:n(),
         draft_value = adp_avg / vor_rank) %>% ungroup() %>% 
  mutate(pos_rank = paste0(position, pos_rank))

# filter out DST and K b/c their ADPs are so low
# that they throw off the rankings
vorp_df <- vorp_df %>% filter(!position %in% c("DST", "K"))


### draft value table -----
draft_df <- vorp_df %>% select(player, position, adp_avg, 
                               adp_pos, pos_rank, points, 
                               avg, vor, draft_value) %>% 
  arrange(desc(draft_value)) %>% filter(adp_avg <= 200)

draft_df$draft_value <- round(draft_df$draft_value, 3)
draft_df$vor <- round(draft_df$vor, 1)

names(draft_df) <- c("Player", "Pos", "ADP", "Drafted As", "Pos Rank", 
                     "Points", "PPG", "VOR", "Draft Value")

readr::write_csv(draft_df, "data/draft_value.csv")



### top free agent pick ups avg adp > 200 -----
fa_df <- vorp_df %>% filter(adp_avg > 200)

fa_df <- fa_df %>% select(player, position, adp_avg, 
                          adp_pos, pos_rank, points, 
                          avg, vor) %>% 
  arrange(desc(vor)) %>% top_n(50, vor)

fa_df$vor <- round(fa_df$vor, 1)

names(fa_df) <- c("Player", "Pos", "ADP", "Drafted As", "Pos Rank", 
                  "Points", "PPG", "VOR")

readr::write_csv(fa_df, "data/free_agent_value.csv")



### second half of the season best FA -----
fp_2nd <- getPoints(weeks = 8:16, PPR = TRUE)

df_2nd <- right_join(adp, fp_2nd, by = "player")

### players that were not in the adp fill in the rank and avg -----
df_2nd [is.na(df_2nd $adp_rank), "adp_rank"] <- max(df_2nd $adp_rank, na.rm = TRUE) + 1
df_2nd [is.na(df_2nd $adp_avg), "adp_avg"] <- max(df_2nd $adp_avg, na.rm = TRUE) + 1


### calculate VOR and draft value -----
fa_df_2nd <- df_2nd  %>% group_by(position) %>% arrange(desc(points)) %>% 
  mutate(pos_rank = 1:n(),
         replace_rank = ifelse(position == "QB", 13, 30),
         replace_rank = ifelse(position == "RB", 25, replace_rank),
         replace_rank = ifelse(position == "WR", 25, replace_rank),
         replace_rank = ifelse(position == "TE", 13, replace_rank),
         replace_rank = ifelse(position == "K", 13, replace_rank),
         replace_rank = ifelse(position == "DST", 13, replace_rank),
         replace_value = nth(points, median(replace_rank)),
         vor = points - replace_value) %>% ungroup() %>% 
  arrange(desc(vor)) %>% 
  mutate(vor_rank = 1:n()) %>% ungroup() %>% 
  mutate(pos_rank = paste0(position, pos_rank)) %>%
  filter(adp_avg > 200, !position %in% c("DST", "K"))

fa_df_2nd <- fa_df_2nd %>% select(player, position, adp_avg, 
                          adp_pos, pos_rank, points, 
                          avg, vor) %>% 
  arrange(desc(vor)) %>% top_n(50, vor)

fa_df_2nd$vor <- round(fa_df_2nd$vor, 1)

names(fa_df_2nd) <- c("Player", "Pos", "ADP", "Drafted As", "Pos Rank", 
                  "Points", "PPG", "VOR")

readr::write_csv(fa_df_2nd, "data/free_agent_2nd_half_value.csv")

 

 

To leave a comment for the author, please follow the link and comment on their blog: R – Jesse Piburn.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)