Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add 2019 draft class #96

Merged
merged 1 commit into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 19 additions & 20 deletions _posts/2023-02-23-nfl-draft-value-chart/nfl-draft-value-chart.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ Before moving forward, a thank you to the invaluable resource that [Over The Cap

**Updated on April 17, 2023**: Added position-specific draft curves.

**Updated on April, 2024**: Added 2019 draft class to on-field value calculations.

# Part 1: Make a surplus value curve

In order to calculate the surplus value of each pick. We need two pieces of information. First, how much each pick costs (the contract); and second, how much benefit each pick provides (on-field performance).
Expand All @@ -75,7 +77,7 @@ The first thing we need is the actual cost of each draft pick's contract. Some g
page <- read_html(url) %>%
html_table()

# count rounts
# count rounds
r <- 0

t <- map_df(1:length(page), ~{
Expand Down Expand Up @@ -146,7 +148,7 @@ This is pretty simple: take the APY in terms of percent of the cap for each draf
```{r, echo = FALSE}

players <- nflreadr::load_contracts() %>%
filter(between(draft_year, 2011, 2018)) %>%
filter(between(draft_year, 2011, 2019)) %>%
arrange(otc_id, year_signed) %>%
group_by(otc_id) %>%
dplyr::slice(1:2) %>%
Expand All @@ -164,9 +166,6 @@ This is pretty simple: take the APY in terms of percent of the cap for each draf
mutate(
# fill in 0 for guys who didn't get 2nd contract
apy_cap_pct = ifelse(contracts == 1, 0, apy_cap_pct),
# Calvin Ridley got a year added to his rookie deal for...reasons
# Let's assume he'll get something like the tag value
apy_cap_pct = ifelse(player == "Calvin Ridley", (19.7/224.8), apy_cap_pct),
# make some buckets for positions
pos = case_when(
position %in% c("C", "RG", "LG") ~ "IOL",
Expand Down Expand Up @@ -264,7 +263,7 @@ Using cost and on-field performance, we can now construct a surplus value curve:

```

How to read the chart: the first pick in the draft costs 4.1% of the salary cap (orange line). The on-field production is expected to be 6.4% of the salary cap (purple line). Thus, the surplus value associated with the first pick in the draft is 2.3% of the salary cap (green line).
How to read the chart: the first pick in the draft costs 4.1% of the salary cap (orange line). The on-field production is expected to be 6.5% of the salary cap (purple line). Thus, the surplus value associated with the first pick in the draft is 2.4% of the salary cap (green line).

We have re-produced the now-familiar result that for teams not drafting a quarterback, the surplus value of the very top picks is lower than later in the first round and even throughout most of the second round. This is because the dropoff in salary that teams have to pay to draft picks (orange line) is steeper than the dropoff in on-field value (purple line). This reflects the fact that teams are not very good at identifying the best players in the draft. We have [a lot of evidence that this is the case](https://www.pff.com/news/draft-surplus-value-of-each-position-in-the-nfl-draft).

Expand Down Expand Up @@ -468,7 +467,7 @@ off + def &
scale_y_continuous(limits = c(0, 8), expand = c(0, 0.05), breaks = scales::pretty_breaks(n = 10)) &
plot_annotation(
title = 'The Value of (non-QB) Draft Picks',
subtitle = 'Draft Curves from 2011-2018 Draft Classes',
subtitle = 'Draft Curves from 2011-2019 Draft Classes',
caption = '@benbbaldwin',
theme = theme(
plot.title = element_text(size = 18, hjust = 0.5, face="bold"),
Expand All @@ -492,39 +491,39 @@ Let's start with last year's controversial Lions-Vikings trade, in which the Vik

Here's the trade with the estimated values obtained from this post (again, the full table is displayed below):

* Lions receive: No. 12 (100), No. 46 (73). Total: 173
* Vikings receive: No. 32 (82), No. 34 (86), No. 66 (55). Total: 223
* Difference: 50, which is the value of **pick No. 72**
* Lions receive: No. 12 (100), No. 46 (71). Total: 171
* Vikings receive: No. 32 (81), No. 34 (84), No. 66 (54). Total: 219
* Difference: 48, which is the value of **pick No. 73**

So the surplus value the Vikings obtained in this trade was the equivalent of an early third-round pick. Not bad for a trade that popular commentary thought that they lost!

What if we ignored surplus value and just looked at on-field value (i.e., player production ignoring cost)?

* Lions receive: No. 12 (87), No. 46 (54). Total: 141
* Vikings receive: No. 32 (66), No. 34 (64), No. 66 (41). Total: 171
* Difference: 30, which is the value of **pick No. 91**, or a pick towards the end of the 3rd round.
* Lions receive: No. 12 (87), No. 46 (53). Total: 140
* Vikings receive: No. 32 (65), No. 34 (64), No. 66 (40). Total: 169
* Difference: 29, which is the value of **pick No. 92**, or a pick towards the end of the 3rd round.

So even if you ignore the cost of players entirely (which is not a good idea in a league with a salary cap), there is no argument against the Vikings winning this trade in terms of the expected value of the picks.

## Draft day trade: example 2

One of the worst draft-day trades I can remember that didn't involve players or future picks was the Jets trading up for Alijah Vera-Tucker in 2021. Let's see how bad it looks using the chart below:

* Jets receive: No. 14 (100), No. 143 (20). Total: 120
* Vikings receive: No. 23 (91), No. 66 (55), No. 86 (41). Total: 187
* Difference: 67, which is more than the value of **pick No. 3** (which is the same as the surplus value of pick 53)
* Jets receive: No. 14 (100), No. 143 (19). Total: 119
* Vikings receive: No. 23 (90), No. 66 (54), No. 86 (40). Total: 184
* Difference: 65, which is more than the value of **pick No. 1** (which is the same as the surplus value of pick 53)

Being extremely generous to the Jets, we could say they gave up the surplus value of a 2nd round pick to move up for a guard. Alternatively, we could say they gave up the surplus value of the No. 3 pick!
Being extremely generous to the Jets, we could say they gave up the surplus value of a 2nd round pick to move up for a guard. Alternatively, we could say they gave up the surplus value of the No. 1 pick!

## Player for picks trade

This is somewhat complicated since some of the picks were in the future. Let's be generous to the Seahawks and discount the 2022 picks by 10 percent. We will now use the APY version of the table in order to calculate the total cost of the Adams trade and extension:

* Seahawks receive: 2022 pick 109 (1.11 * .9)
* Jets receive: 2021 pick 23 (3.28), 2021 pick 86 (1.50), 2022 pick 10 (3.42 * .9)
* Difference: 3.28 + 1.50 + (3.42 * .9) - (1.11 * .9) = **6.9 percent of the salary cap** per year over 4 years
* Jets receive: 2021 pick 23 (3.34), 2021 pick 86 (1.50), 2022 pick 10 (3.53 * .9)
* Difference: 3.34 + 1.50 + (3.53 * .9) - (1.11 * .9) = **7.0 percent of the salary cap** per year over 4 years

So we have arrived at 6.9% of the salary cap in APY per year over 4 years as the value of picks given up for the Seahawks. Adams' 4-year deal extension with the Seahawks was $17.5 APY, or 9.6% of the salary cap at the time, per OTC. Dividing 6.9% (draft surplus given up) by 9.6% (contract APY), we need to inflate Adams' APY by 72%, arriving at a true contract cost of, **30.1 million dollars per year over 4 years**.
So we have arrived at 7.0% of the salary cap in APY per year over 4 years as the value of picks given up for the Seahawks. Adams' 4-year deal extension with the Seahawks was $17.5 APY, or 9.6% of the salary cap at the time, per OTC. Dividing 7.0% (draft surplus given up) by 9.6% (contract APY), we need to inflate Adams' APY by 73%, arriving at a true contract cost of, **30.3 million dollars per year over 4 years**.

This is the same ballpark that Bill Barnwell landed on in his [review of the trade](https://www.espn.com/nfl/story/_/id/29538280/jamal-adams-trade-grades-seahawks-jets-safety-really-worth-much), which was written before the extension was signed. Barnwell assumed an extension of $16 million APY:

Expand Down
Loading
Loading