26 March 2018

Seeding Team Ratings and Projections for the 2018 MLB Regular Season with WARcels

We've gone long enough without Major League Baseball in our lives. Let's dig in.

Every year, I seed my RPScores with an Elo rating based on the simplest measure of team strength I can find. In past years, this has meant copying and pasting FanGraphs' WAR Depth Charts at the team level. This year, I'm switching it up by moving the calculations in-house and relying on Tom Tango's WARcel method.

Tango's Marcels are about as simple a projection system you can devise: all you need to calculate a player's Marcel for any given stat are his numbers from the past three seasons and his age. That's it. And yet, for such a simple system, it does quite well.

What can be simpler than that? Well, there are two different formulas for Marcel count and rate projections. What if you could use one formula instead of two? Think about it: Wins Above Replacement is based on both playing time and count stat accumulation, meaning that it's in some ways a rate stat and in other ways a count stat. This means that you should be able to use one formula to project WAR the Marcel way.

That's just what the WARcels do. It's really easy to calculate a player's WARcel. Here's an example using Mike Trout:
  1. Multiply Trout's fWAR totals from his 2017, 2016 and 2015 seasons by 60%, 30% and 10%, respectively. Then, add those numbers together.*
    1. 60% of Trout's 2017 fWAR of 6.9 is approximately 4.1.
    2. 30% of Trout's 9.2 fWAR in 2016 is about 2.7.
    3. 10% of Trout's 8.9 fWAR in 2015 is about 0.9.
    4. 4.1 + 2.7 + 0.9 = Trout's seasonally weighted fWAR: 7.7
  2. Revert Trout's seasonally weighted fWAR partway towards zero to account for randomness.
    1. Do this by multiplying the 7.7 fWAR we got in step one by 80%.
    2. This leaves us with 6.2 fWAR.
  3. Adjust for the aging curve by subtracting Trout's age in 2018 from 30 years old, then multiply that number by 0.1 fWAR and add it to the previous total.**
    1. 2018 is Trout's age 26 season.
    2. Subtract 26 from 30 and we get 4.
    3. Multiply 4 by 0.1 fWAR and we get 0.4 fWAR
    4. Add 0.4 fWAR to the value in step 2, 6.2, and we get 6.6 fWAR.
  4. And that's it! Trout's 2018 WARcel is 6.6 fWAR.
Two things to remember:
*For any season in which a player didn't play, assume 0 WAR for that season;
**The theoretical peak for pitchers is 26 years old; replace 30 with 26 if you're going to run the same numbers for Clayton Kershaw or any other pitcher.

So, how do we convert player WARcels into projected team WAR depth charts? Simple: just add up all the WARcels on a team's roster (but skip offensive WAR for pitchers or you may end up double-counting pitcher value and overestimating the depth of NL teams). That's your Team WARcel.

How do we convert team WARcels to team wins? Add back in the replacement level, which you can calculate by subtracting the average team's WARcel from 81. This should be a value in the 50s.

Thing is, I don't need team depth in wins so much as I need an Elo score. How do I convert team wins into a starting Elo score? By dividing team wins by 162, then multiplying that quotient by 700, then subtracting adding 650 (the relationship between win rates and Elo isn't always linear, but it's more or less linear for the range of values represented by MLB baseball teams).

And that's how I came up with the figures below that I'll be using to open up my 2018 RPScore ratings and regular season projections.

Compare this chart above to FanGraphs' Team WAR Depth Chart for 2018 and you'll notice some big differences but a lot of consistency as well.

These figures below are not projections mind you, just estimates of team strength that ignore the actual schedule. Actual win projections, with error bars, will be available in the coming days.

No comments: