The WARP Rating System Explained

By Kevin Pelton Updated 5/2024

What is WARP?
WARP stands for Wins Above Replacement Player. The term and concept are borrowed from sabermetrics and, specifically, Baseball Prospectus. Conceptually, the WARP system seeks to evaluate players in the context of a team made up of them and four completely average players. The performance of this team is then compared to that of a team made up of four average players and one replacement-level player. The method draws heavily on the work of Dean Oliver.

What are the benefits of this method?
For one, this rating system is very flexible. Players can be rated on a per-minute basis (using the "winning percentage" or net rating of the team with four average players), in terms of their offense and defense and in terms of their overall value (WARP itself). Using replacement level shows the value of players that can play heavy minutes and avoid injury while continuing to perform above replacement level. Using wins gives a measure of value that is easy to understand and constant over time. Lastly, by eschewing the traditional linear weights method so common in basketball analysis, I believe WARP does a better job of incorporating defensive value.

What are the limitations?
Like all rating systems based solely on box-score data, WARP cannot account for contributions that are not tracked in the box score (or play-by-play, when readily available), most notably on defense. It does no better than linear weights methods at players who specialize in on-ball defense. Also, it requires a number of assumptions - the value of assists, the trade-off between usage and efficiency, and replacement level.

What is replacement level? Why use it?
My colleagues at Baseball Prospectuse defined replacement level as, "the expected level of performance a major-league team can receive from one or more of the best available players who substitute for a suddenly unavailable starting player at the same position and who can be (or were) obtained with minimal expenditure of team resources." In basketball, the concept is slightly different. For example, we look at rotation players, not merely starters. The general principle--the production offered by the replacement for an absent player--remains the same. In practice, I've estimated replacement level based on the performance of free agents signed for the minimum salary or to a two-way contract in the NBA.

Players create value for their team by playing better than replacement level. This appropriately awards credit to average players, because they are still an upgrade on freely-available replacements, while not rewarding players simply for being on the court without any level of production. It also allows us to estimate the value of players with varying playing time and productivity and account for durability.

Beginning in 2019, my NBA WARP utilizes different replacement levels by position based on big men and point guards rating better than their wing counterparts.

A painstakingly detailed explanation of how WARP is calculated and its assumptions follows.

The first step is evaluating a player's individual performance and efficiency. This requires calculating their points created and their plays used. In this analysis, we'll be using two slightly different definitions of opportunities with the ball. Plays -- called "chances" by Second Spectrum -- end with any shot, trip to the free throw line or turnover. Possessions continue until a score, a defensive rebound or a turnover gives the ball to the other team. Statistically, plays are estimated by FGA + .44*FTA + TO. Possessions are estimated by FGA + .44*FTA - OR + TO. (For NCAA men's basketball, the multiplier for free throw attempts is .475 instead of .44 to account for 1-and-1 free throws.)

FYI: Before the term "plays" was standardized, they were sometimes called "minor possessions" as contrasted against "major possessions," and that terminology is still used in some of my formulas.

For points, we start with points. To this, we add some credit for assists. Valuing assists is one question statistical analysis remains unable to answer with any degree of certainty, leaving us to use an estimate. I use a value of 0.75 for each assist. This is the same used by Oliver and not dissimilar from the value used by John Hollinger (.66). We also have to take away 0.75 points for each assisted field goal made to balance the ledger. For the NBA in the play-by-play era (since 1996-97) and the WNBA, I utilize actual assisted field goals. For past players and players in other leagues, assisted field goals are estimated using the share of his team's assists the player distributes, the team's assisted field goal percentage, the player's share of the offense, his offensive rebound rate and the percentage of his shot attempts that are three-pointers.

The complete formula for percentage of field goals assisted is: TmAst/TmFGM * (1.53 - 1.442 * [Ast/Min / (TmAst/(TmMin/5))] -0.041 * ((OReb/Min)*48) - 0.787*Plays% + 0.014*(3A/FGA)^2*(1/Plays%)^2)

This estimate is multiplied by field goals made and by 0.75 and subtracted from the prior point total to give us an estimate of offensive points created.

PC = Points + (.75*Ast) - (.75*Afgm)

The WARP version of plays is similar. We begin with the general formula for individual plays -- FGA+ (.44*FTA) + TO. To this, we add .375 for each assist and subtract .375 for each estimated assisted field goal. I use one-half the assist value so that assists do have a significant impact on overall rating. If we didn't do this, ratings would go largely unchanged.

Plays = FGA + (.44*FTA) + TO + (.375*Ast) - (.375*Afgm)

A player's individual rating is simply points created divided by possessions used (multiplied by 100, as I strictly work in points per 100 possessions, on a team or individual level).

Offensive Rating = (PC/Pos)*100

The next step is placing the player in a team context. The first part of this is to figure out how large the player's role in his offense is. This is determined by finding the percentage of his team's plays he uses:

Plays% = (Pos/Min)/((TmFGA + (.44*TmFTA) + TmTO)/(TmMin/5))

The Offensive Rating for a team made up of the player and four average teammates, then, is his Individual Rating multiplied by his usage rate, along with the league Offensive Rating multiplied by the remaining possessions. However, there is one slight adjustment I make to reflect the tradeoff between usage and efficiency. By extension, the more possessions a player uses, the more efficient his teammates are. Therefore, I add .25 points * (Pos% - 0.2) to the league average offensive rating.

TmOffRatMinor = OffRat*Pos% + ((1-Pos%)*(LgOffRatMinor + (25*(Pos% - 0.2))))

In practice, this means that on average the team ratings improve 0.2 points per 100 possessions for each additional percentage of usage for the individual player. This is very similar to research conducted by Eli Witus, which found that at the lineup level each additional percent of usage was worth 0.25 points per 100 possessions. It's also in the same ballpark as the pioneering usage/efficiency research by Oliver, which found each percent of usage to be worth 0.6 points to the individual player, or 0.12 points at the team level.

This explicit acknowledgment of the relationship between usage and efficiency is relatively unique to the WARP system.

We now have an estimate of the performance of the imaginary team on plays. To get to possessions, we must incorporate offensive rebounds, which becomes a little complicated in terms of the actual formulas.

The relatively easy part is estimating the team's offensive rebound percentage. The one thing that needs to be considered is that each rebound grabbed by the player makes one less available for his imaginary teammates. So the teammates' percentage is calculated out of the remaining rebounds by the following formula.

TmOReb% = OReb% + (4*LgOReb%)/(5-LgOReb%)*(1 - OReb%)

The more challenging aspect is figuring out how many rebound opportunities are available to the imaginary team. This requires us to estimate the percentage of plays that end in missed shots for both the player and his teammates, which is complicated by the usage adjustment made earlier. For the player himself, the calculation is relatively straightforward:

PlayerRebOpp% = ((FGA - FGM) + .56*(FTA - FTM)) / (FGA + (.44*FTA) + TO)

Note that .56 is used as the multiplier on missed free throws because we estimate that 44 percent of free throws are shot as part of a series of two. This is a slight overestimation due to some free throws that are not the first of two but are still not available for rebounds (technical/flagrant foul shots and three-shot fouls).

For the teammates, we must start with their Offensive Rating. From this, we subtract the league average for points from free throws per possession for points from shots from the field. In the denominator, we must take out possessions that end in turnovers (which is affected by the usage rate) and those that end in free-throw attempts. This gives us points from shot attempts -- effective field-goal percentage. We then divide by the league-wide ratio of eFG% to field-goal percentage to get the estimated field-goal percentage of the teammates.

As part of this process, we've estimated how frequently these teammates are shooting from the field, so we can multiply this by 1-FG% and add .56*league average missed FTs to get the percentage of teammate possessions that end in a rebound opportunity.

This is probably best expressed as a series of equations:

LgPossMinor = LgFGA + (0.44 * LgFTA) + LgTO LgOffRatMinor = 100 * (LgPts / LgPossMinor) LgPossMajor = LgFGA + (0.44 * LgFTA) - LgOReb + LgTO LgOffRatMajor = 100 * (LgPts / LgPossMajor) TeammateOffRat = LgOffRatMinor + 100*(.25*(Pos% - 0.2))
Teammate FGA% = (1 - ((LgTO/LgPosMinor)*(1+(0.5*(0.2-Usage)))) - .44*(LgFTA/LgPosMinor))
Teammate eFG% = ((TeammateOffRat/100) - (LgFTM/LgPosMinor)) / (TeammateFGA%*2)
TeammateFG% = Teammate eFG% / (Lg eFG%/LgFG%)
TeammateRebOpp% = (1 - TeammateFG%)*TeammateFGA% + .56*((LgFTA - LgFTM)/LgPosMinor)

The total percentage of available rebounds for the team, then, is again a weighted average of the player and his teammates by possessions:

TmRebOpp% = PlayerRebOpp%*Usage + TeammateRebOpp%*(1 - Usage)

Naturally, we next multiply rebound percentage by the percentage of possessions that end in available rebounds. However, we also must make a couple of adjustments before adding this in to get the final team Offensive Rating. One adjustment accounts for the fact that not every missed shot results in a rebound because of team rebounds (plays when the ball goes out of bounds or a loose-ball foul is called). The other accounts for possessions that include more than one second chance.

RebFactor1 = LgReb / ((LgFGA - LgFGM) + .56*(LgFTA-LgFTM))
RebFactor2 = (LgOffRatMajor - LgOffRatMinor) / (LgOffRatMinor * LgOReb/LgPosMinor)

TmOffRat = TmOffRatMinor + (TmOReb%*TmRebOpp%*RebFactor1*RebFactor2*TmOffRatMinor)

In 2010, an adjustment to account for floor spacing was added to WARP, as explained here. Specifically, the formula is:

TmOffRat3 = (TmOffRat + 7 * (3A% - Tm3A%)),

where 3A% is 3PA / (FGA + (.44*FTA) + TO)

Here is the fundamental thing I had to realize to evaluate defense. All defensive plays end with one of the following outcomes:

  • Field Goal Attempt
  • Field Goal Attempt - blocked
  • Free Throw Attempts
  • Turnover
  • Turnover - steal

    That's it. So what we have to do is estimate how often each of those things occur, and how many points result on average (from field goal and free throw attempts; obviously no points result from the others) and then factor in rebounding.

    The NBA is nice enough to track two of these five things for us, steals and blocks. To evaluate these, we need to first estimate defensive possessions:

    Pos = Min*((TmOppFGA + (.44 * TmOppFTA) + TmOppTO)/(TmMin/5)).

    We add the player's blocks and steals and divide by estimated defensive positions, to come up with what percentage of possessions he ends himself with a recorded defensive play, then add to that 80 percent of the league average of blocks + steals per possession (which the other four imaginary teammates are theoretically generating).

    TmBSPos = (Blk + Stl)/Pos + .8*((LgBlk + LgStl)/LgPos) That step is done. Next we need to look at fouls. We can estimate how many possessions each foul results in by the formula:

    LgFTARate = (.44*LgFTA)/LgPF

    This ratio is multiplied by the player's personal fouls (PF) divided by the estimated defensive possessions the player has participated in. To this, again we add 80 percent of the league average for what percentage of possessions end in free-throw attempts.

    TmFTAPos = LgFTARate*(PF/Pos) + .8*((.44*LgFTA)/LgPos)

    These are the purely individual categories. The other two reflect team defense, and are not individually counted in the statistics. The two general schools of thought on team defense are to assign all of the credit to individuals, or none of it, and rate every player at league average. I've found a happy medium between the two.

    What I've done is create what I call a "team defense factor" (TDF), which is simply Min/TmMin. If a player was on the court every minute of every game, this ratio would be 20 percent (TmMin includes minutes for all five players on the court, which is why you repeatedly see it divided by five in previous calculations). Self-explanatorily, this determines how much of the team's defense the player gets credit for. What we're assuming is that each player is equally responsible for the team defense his team plays while he's on the floor. That's not true, of course, but it's a reasonable compromise.

    TDF = Min/TmMin

    A forced turnover shows up in the statistics as an opponent turnover that is not a team steal. Thus, the formula is:

    TmFTOPos = TDF*((TmOppTO-TmStl)/TmOppPos) + (1-TDF)*((LgTO-LgStl)/LgPos)

    In the same manner we can evaluate how many points each non-blocked field goal attempt results in. This is again weighted by the team defense factor, with the other percentage accounted for by the league's average points per non-blocked field goal attempt.

    TmFGRat = TDF*((TmOppPts - TmOppFTM)/(TmOppFGA - TmBlk)) + (1-TDF)*((LgPts - LgFTM)/(LgOppFGA - LgBlk))

    We now have percentages of how often the player's imaginary team does not allow the opposition to score through either a steal, a block, or a forced turnover. We also have the percentage of the time they send the opposition to the line. If we add these and subtract from 100 percent, we estimate how often the imaginary opposition gets off a shot from the field. We then add in the estimated points per attempt to get points allowed per play:

    TmDefRatMinor = 100* ((TmFTAPos * ((LgFTM)/(LgFTA*.44))) + (1 - TmFTAPos - TmBSPos - TmFTOPos) * TmFGRat)

    Again, we need to take rebounding into account to get to possessions, starting with the defensive rebounding percentage.

    TmDReb% = DReb% + .8*LgDReb%*(1 - DReb%)

    Available rebound opportunities are easier at the defensive end because we already know how frequently the opposing team is getting to the free throw line and attempting shots from the field. We merely need to estimate the opposition's field-goal percentage based on its FG Rating (TmFGRat).

    OppFG% = (TmFGRat/2) / (Lg eFG%/LgFG%)

    Then we add up the possible ways a defensive rebound becomes available: A missed (non-blocked) shot, a missed second free throw or a blocked shot.

    OppRebOpp% = (1 - OppFG%)*(1 - TmFTAPos - TmBSPos - TmFTOPos) + .56*((LgFTA - LgFTM)/LgPos) + TmBlk% + Blk/Pos + .8*LgBlk/LgPos

    We then bring back the two rebound factors introduced in the offense section to come up with our final team Defensive Rating.

    TmDefRat = TmDefRatMinor + (1-TmDReb%)*OppRebOpp%*RebFactor1*RebFactor2*TmDefRatMinor

    Putting it Together:
    If we have an Offensive Rating and a Defensive Rating for our imaginary team, finding its winning percentage is quite simple. I use the Pythagorean estimate, with 14 as the exponent (as used by

    Win% = TmOffRat^14 / (TmOffRat^14 + TmDefRat^14)

    The last step is critical: introducing replacement level to the equation. I define replacement level on a theoretical basis, starting with the theory that a team comprised of replacement-level players would win 10 games. (This figure is borrowed from my work adjusting the late Doug Pappas' Marginal Wins/Marginal Payroll measure to the NBA.) Therefore, I adjust replacement level (using the Goal Seek function in Excel) to match the total marginal wins produced by the entire league above 10 wins per game (adjusted for the percentage of the schedule complete during the season). In practice, this generally produces a replacement-level winning percentage of around .415, or 83 percent of league average. This is similar to the 80 percent figure used by Baseball Prospectus and often used by Football Outsiders in other sports.

    The formula itself is simple:

    WARP = (Win% - RL) * (Min/48)

    Generally speaking, a team's total WARP plus the 10 replacement-level wins will be similar to its final win total. These tend to differ more for teams that are very good or very bad on defense, because not all of the team's defensive performance is credited to its individual players. Some is assumed to be the function of the coaching staff and some we simply cannot fairly apportion to the individual players using box-score stats. Team WARP totals also differ from its record in the case of teams that outperform their Pythagorean projections.