For years I’ve alluded to a mysterious fantasy sports model in conversations with my friends. Today I reveal how I build it. I’ve found the model to work very well for fantasy basketball and hockey, decently for baseball–although I don’t use it for pitching because of the Kawasaki Konjecture–and terrible for football.

How I build the model:

- Step 1: Find a decent set of projections for the upcoming season. There are tons for baseball. For basketball and hockey, I’ve had decent luck just using the previous season’s numbers, though I prefer to use projections.
- Assign each player a position. If they have multiple positions, assign them the one that’s weakest. For baseball, I usually use the ranking C>2B>SS>3B>OF>1B. For basketball, I combine shooting guards with small forwards and use PG>GF; C>PF>GF. For hockey, I used D>RW>LW>C.
- For each position, predict yearly results for the best available replacement player, or in other words, Jon Barry. I’ll usually look at the top 5 players I don’t think will get drafted and average them. Note that this will depend on the size of league.
- Using the previous season’s final standings, determine the standard deviation among teams at each category.
- Evaluate each player in each category through the formula Value = (Production – Replacement Production) / Team Standard Deviation. So if Albert Pujols projects to hit 45 home runs, Paul Konerko projects to hit 21 and Team Standard Deviation was 30 home runs, Pujols’ value is (45-21)/30=0.8 in home runs. Percentage categories require a bit of tweaking. Take the demoninator for the percentage calculation–AB for batting average; FGA for field goal percentage–and multiply by (Denominator / Replacement Denominator). Also, for percentage, you need to divide by the number of starters on your team. So the formula for FG% should be (FG% – Replacement FG%) / (Team FG% standard deviation) x (FGA/Replacement FGA) / (Starters per team). To complicated? It’s called Excel.
- Sum players’ scores in each category to determine their value. If a stat counts against you–turnovers in basketball–subtract it instead of adding. There are ways to tweak the value calculation to favor balance or certain categories.

How to use the model:

- Combine players at all positions into one chart and sort by value. Draft the highest ranked player.

Why the model is good:

The model is pretty similar to what Baseball Monster and Basketball Monster do. They calculate z-scores, which use the formula:

value = (performance – average performance) / (player standard deviation)

I use the formula:

value = (performance – replacement performance) / (team standard deviation)

The differences are subtle; the key to the analysis is aggregating players’ value across all categories, and factoring in position scarcity. For customized leagues with different categories, values change significantly and you need to adjust. In my baseball league with standard 5×5 scoring, Albert Pujols slightly edges Hanley Ramirez as the highest rated player. In my other league, which also counts OPS as a stat, Pujols blows everyone out of the water. It’s not even close. Also, Shane Victorino is pretty good in a 5×5 league. When you add OPS, he becomes tremdously mediocre.

The Hurricane and I « you like a da juice?(22:31:36) :[…] his focussed on finding sleepers and playing the waiver wire. My strategy was macro, relying on a mathematical model that I crafted before each draft; his strategy was micro, looking at match-ups tinkering his roster […]

The Curious Case of Geovany Soto « you like a da juice?(10:05:23) :[…] worked on designing a projections system. My specialty has been to take a projection system and use it to valuate players, which I’ve done pretty effectively, even without using a good projection system. (My […]