Approximate Value

Created by PFR founder Doug Drinen, the Approximate Value (AV) method is an attempt to put a single number on the seasonal value of a player at any position from any year (since 1960). The way Drinen described the intent of this measurement was:

"AV is not meant to be a be-all end-all metric. Football stat lines just do not come close to capturing all the contributions of a player the way they do in baseball and basketball. If one player is a 16 and another is a 14, we can't be very confident that the 16AV player actually had a better season than the 14AV player. But I am pretty confident that the collection of all players with 16AV played better, as an entire group, than the collection of all players with 14AV."

"Essentially, AV is a substitute for --- and a significant improvement upon, in my opinion --- metrics like 'number of seasons as a starter' or 'number of times making the pro bowl' or the like. You should think of it as being essentially like those two metrics, but with interpolation in between. That is, 'number of seasons as a starter' is a reasonable starting point if you're trying to measure, say, how good a particular draft class is, or what kind of player you can expect to get with the #13 pick in the draft. But obviously some starters are better than others. Starters on good teams are, as a group, better than starters on bad teams. Starting WRs who had lots of receiving yards are, as a group, better than starting WRs who did not have many receiving yards. Starters who made the pro bowl are, as a group, better than starters who didn't, and so on. And non-starters aren't worthless, so they get some points too."

Weighted Career Approximate Value

At the top of every player's PFR page, you will see "Weighted Career AV" and a ranking since 1960. You can see the leaderboard here. This is Doug's way of balancing peak production against raw career totals. For each player, the following weighted sum of seasonal AV scores is calculated:

100% of the player's best season, plus 95% of his 2nd-best season, plus 90% of his 3rd-best season, plus 85% of his 4th-best season, and so on...

(Note: "Weighted Career AV" should not be confused with "career AV", which is just the unweighted sum of a player's AV scores.)

Similar Players by AV

On a player's page, you may see a table marked "Similar Players". This uses a method Doug invented to find other players who were similar in terms of the quality and shape of their AV career arcs. For each pair of players, you give them 100 "similarity points" if they both occupy three-dimensional space and breathe air. Then you subtract one similarity point for each point of difference in their best-season AVs, .95 of a similarity point for each point of difference in their second-best-season AV, .90 of a similarity point for each point of difference in their third-best-season AV, and so on.

Where to Find AV on the Site:

Full Approximate Value Methodology

Offense

Every team gets this many points to divvy up among its offensive players:

team_offense_points = 100 * (team offensive points per drive) / (league average offensive points per drive),

where

offensive points per drive = (7*(rushTD+passTD) + 3*FG) / (rushTD + passTD + turnovers + punts + FGA)

Offensive line

As a unit, the offensive line for a given team will share this many points:

team_points_for_o_line = 5 / 11 * team_offense_points

For each offensive lineman (and fullback and tight end), we define:

individual_points = [(games played) + 5*(games started)*(pos_multiplier)] * (all_pro_multiplier),

where pos_multiplier = 1.2 for tackles, 1.0 for guards and centers, 0.3 for fullbacks, and 0.2 for tight ends,

and all_pro_multiplier = 1.9 for first-team AP all-pro, 1.6 for second-team AP all-pro, and 1.3 for a pro bowler who was not first- or second-team all-pro. [NOTE: all_pro_multiplier is for tackles, guards, and centers only, not fullbacks or tight ends.]

Finally, each individual player receives this many points:

approx_value = (individual_points) / (sum of individual_points for all players on team) * (team_points_for_o_line)

Skill-position players

Since we know the entire offensive unit will get team_offense_points, and we gave team_points_for_o_line of those to the line, we have:

team_points_for_skill_positions = team_offense_points - team_points_for_o_line

Now we split that up into two pieces:

team_points_for_rushers = team_points_for_skill_positions * (.22) * [(team_rsh_yards / team_total_yards ) / .37 ]

Now every individual player gets the following share:

approx_value = (rushing yards) / (team rushing yards) * team_points_for_rushers

Finally, we give a small bonus (or impose a small penalty) to running backs who had 200 or more carries and whose yards per carry average was much higher or lower than the league average:

bonus = .75 * [(yards per rush) - (league yards per rush by RBs)], if the player's yards per rush is better than league average.

penalty = 2 * [(yards per rush) - (league yards per rush by RBs)], if the player's yards per rush is worse than league average.

Note that quarterbacks, wide receivers, and anyone else who compiles rushing yards is eligible to get approximate value points at this stage.

Now onto the passers and receivers....

team_points_for_passers = (team_points_for_skill_positions - team_points_for_rushers) * .26

So that leaves:

team_points_for_receivers = (team_points_for_skill_positions - team_points_for_rushers) * .74

Anyone who had a receiving yard gets this many AV points:

approx_value = (receiving yards) / (team receiving yards) * team_points_for_receivers

And similarly for passers.

approx_value = (passing yards) / (team passing yards) * team_points_for_passers

And, as with rushers, we add an efficiency adjustment here for passers with at least 150 pass attempts:

bonus = .5 * [(Adjusted yards per attempt) - (League average adjusted yards per attempt)], if the player's AYPA was better than league average.

penalty = 2 * [(Adjusted yards per attempt) - (League average adjusted yards per attempt)], if the player's AYPA was worse than league average.

Defense

team_defense_points = 100 * [ (1 + 2*M - M2) / (2*M) ],

where M = (team defensive points allowed per drive) / (league average defensive points allowed per drive)

team_points_for_front_7 = (2/3) * team_defense_points

team_points_for_secondary = (1/3) * team_defense_points

Now, for all defensive players, we compute:

individual_points = [(games played) + 5*(games started) + sacks + 4*(fumble recoveries) + 4*(interceptions) + 5*(defensive TDs) + (tkl_constant)*(tackles)] + (all_pro_bonus),

where

tkl_constant = 0 if the year is before 1994, and otherwise, tkl_constant = .6 if the player is a defensive lineman, .3 if the player is a linebacker, and 0 of the player is a defensive back.

all_pro_bonus = (all_pro_level)*(year_multiplier),

where

all_pro_level = 1.5 for first-team all-pro, 1.0 for second-team all-pro, and 0.5 for pro bowler

year_multiplier = (year_constant) * (number_of_games_multiplier),

where year_constant = 40 for the pre-official sack years (1960--1981) and 80 for the post-sack years (1982-present), and
number_of_games_multiplier = (number of games played by each team in that season) / 16

Now, each front-seven player gets:

approx_value = [ (individual_points) / (sum of individual_points for all front-seven players on the team) ] * team_points_for_front_7

and each defensive back gets:

approx_value = [ (individual_points) / (sum of individual_points for all defensive backs on the team) ] * team_points_for_secondary

Special Teams

Returns

Every player gets one point of approx_value for each kick or punt return TD.

Kickers

At the moment, Kicking AV is based solely on field goal & extra point performance. The core stat that determines a kicker's performance is Kicking Points Above Average (PAA), which is derived by comparing a player's XP% and his FG% at various distances (0-19 yds, 20-29 yds, 30-39 yds, 40-49 yds, 50+ yds) to the league average in the same category, to determine the number of points he added above what a league-average kicker would produce in the same number of chances.

PAA_total = PAA_xp + PAA_fg1 + PAA_fg2 + PAA_fg3 + PAA_fg4 + PAA_fg5 + PAA_fg_u

where

PAA_xp = xpm - xpa * lg_xp_pct

PAA_fg1 = 3 * (fgm1 - fga1 * lg_fg1_pct)

PAA_fg2 = 3 * (fgm2 - fga2 * lg_fg2_pct)

PAA_fg3 = 3 * (fgm3 - fga3 * lg_fg3_pct)

PAA_fg4 = 3 * (fgm4 - fga4 * lg_fg4_pct)

PAA_fg5 = 3 * (fgm5 - fga5 * lg_fg5_pct)

PAA_fg_u = 3 * (fgm_u - fga_u * lg_fg_pct)

where fgm_u and fga_u are field goals made and attempted that are unaccounted for by the distance categories. We have complete distance data going back to 1969; from 1960-1968 we have partial distances for some players. In the case of PAA from unaccounted field goals, kickers are compared to the overall league-average FG%.

From this, we can convert PAA into Approximate Value. First, determine what share of the team's "kicking playing time" the player has received:

k_playing_time = xpa + 3 * fga

pct_team_playing_time = k_playing_time / team k_playing_time

Determine the amount of AV the kicker would get in his playing time if he had an average PAA (prorating a league-average 3.125 figure downwards for seasons of fewer than 16 games):

avg_AV = (3.125 / 16) * team_games * pct_team_playing_time

Then adjust up or down based on his PAA_total (dividing by 5 arbitrarily calibrates the results to match the AV scale of kickers):

raw_AV = avg_AV + (PAA_total / 5)

The final step is to prorate this back up to 16 team games for seasons with unusual schedules:

approx_value = 16 * (raw_AV / team_games)

Punters

Right now, punting AV is determined using gross punting average and the ability to avoid blocked punts.

Just like with kickers, the first step is determining productivity above/below average. We're using Adjusted Punt Yards, which are gross punt yards with a 13-yard penalty for blocks (the rationale being that the punter is 13 yards behind the LOS when a block occurs, but we don't assess the full 50-yard fumble/turnover penalty -- as described in The Hidden Game of Football -- because the team was punting/turning the ball over anyway).

adj_punt_ypa = (punt_yds - 13 * punt_blocked) / (punt + punt_blocked)

Then, for each league-season, compute the league's average adj_punt_ypa using individual punters' (punt + punt_blocked) totals as the weights. Then figure out how many adjusted punt yards the player added above/below the league average:

adj_punt_yds_above_avg = (punt + punt_blocked) * (adj_punt_ypa - lg_adj_punt_ypa)

We then begin to convert adj_punt_yds_above_avg into Approximate Value. Like with kickers, we determine what share of the team's "punting playing time" the player has received:

pct_team_playing_time = (punt + punt_blocked) / (team_punt + team_punt_blocked)]

Then calculate the amount of AV the punter would get in his playing time if he had an average adj_punt_yds_above_avg ( prorating a league-average 2.1875 figure downwards for seasons of fewer than 16 games):

avg_AV = (2.1875 / 16) * team_games * pct_team_playing_time

Then adjust this up or down based on his adj_punt_yds_above_avg (dividing by 200 arbitrarily calibrates the results to match the AV scale of punters):

raw_AV = avg_AV + (adj_punt_yds_above_avg / 200)

The final step is to prorate this back up to 16 team games for seasons with unusual schedules:

approx_value = 16 * (raw_AV / team_games)

Footnote

If you're interested in seeing Doug's explanatory posts as he was initially developing the metric, you can find them at these archive links: Part 1 - Part 2 - Part 3 - Part 4