FantasyQuant

The idea

Fantasy projections built like an economics paper

Most fantasy projections ask you to trust them. This project tries to earn it: every number comes from a model whose parts were tested on seasons it never saw, and the whole thing is graded in public every week.

Why I built it

A fantasy projection is a forecast, and forecasting is something economists have thought hard about: how to separate signal from noise, how to avoid fooling yourself, and how to prove a forecast is actually good. I wanted to see what happens when you apply those habits to fantasy football: start from the simplest sensible forecast, add an idea only if it beats that forecast on data it wasn't built on, and keep a public scorecard.

What's different here

  • A range, not just a number

    Every player gets a floor, median and ceiling. We check that the range is honest: in our 2025 test, 82.7% of outcomes landed inside the 10th–90th percentile band (target ≈ 80%).

  • You can see the working

    Each projection shows every step from the player's recent average to the final number, so you can disagree with a specific step instead of a black box.

  • Graded in public, losses included

    Each week's projections are locked at kickoff and scored afterwards against the actual points, side by side with Sleeper's, on Sleeper's own top 60. A losing week is published like a winning one.

  • Failed ideas are published too

    Prime-time games, weather, opponent strength and Week 1 effects all sound smart. We tested each one properly, none of them helped, so none of them are in the model, and we say so.

  • Tests written before results

    Every idea's test and pass/fail rule were written down before it was run. That stops the most common trap in sports analytics: trying things until something looks good by luck.

The statistics and econometrics, in plain English

1. Opportunity × efficiency

Fantasy points are a product: how many chances a player gets (targets, carries, pass attempts) times how much each chance is worth. The two behave very differently. Volume is stable: a player's role carries over from week to week. Efficiency is mostly noise: a receiver who scores twice on four catches won't keep doing that. Modelling them separately lets us trust the stable part and be sceptical of the noisy part.

2. Shrinkage (empirical Bayes)

Small samples lie. The fix is to blend each player's own record with the league average for his position, trusting his record more the more evidence he has:

efficiency = (his points + k × league rate) ÷ (his opportunities + k)

k acts like a number of "imaginary" league-average plays. It isn't picked by hand; it is chosen by testing which value forecasts best on later seasons. For receivers it came out at 100 targets. So a receiver with 50 recent targets is pulled two-thirds of the way toward the league rate, while one with 300 targets is pulled only a quarter of the way. This is the same idea economists use when ranking hospitals or teachers from small samples.

3. The betting market as information

Sportsbooks' point totals and spreads are some of the best public forecasts in sports, because people bet real money against them. They give each team's implied points: a team favoured by 3 in a game with a total of 47 is expected to score (47 + 3) ÷ 2 = 25. Teams expected to score more run more plays (more volume), and every touch is worth more in a shootout (more efficiency). We tested this with a placebo: with the lines shuffled between games, only a small gain remained (from the extra model structure). The real lines improved accuracy significantly beyond that, so the gain comes from genuine information in the market.

4. Median, not mean

Fantasy scores are skewed. A few 40-point explosions pull a player's average above his typical week. If you want the number that misses by the least on average (the leaderboard's metric), the right target is the median. A per-position correction fitted by least absolute deviations (the regression that targets medians instead of means) does exactly that, and it improved accuracy significantly.

5. Floor and ceiling (quantile regression)

The floor and ceiling are the 10th and 90th percentiles, estimated with quantile regression on past seasons. Players whose scores have swung more in the past get wider ranges than steady ones, even at the same median.

6. Testing like a forecaster

  • Walk-forward. To test a season, the model is fitted only on seasons before it, exactly as it would have been used in real time.
  • Untouched holdouts. Built on 2018–2023, validated once on 2024, final test once on 2025.
  • Significance. A win counts only if a paired bootstrap says it is unlikely to be luck. It resamples whole weeks, because players in the same week share game conditions.
  • Placebos. Every idea is also tested with a fake version (labels moved to random games). If the fake helps too, the idea isn't real.

What the model looks at

  • Snap counts, targets, carries and pass attempts, recency-weighted, with zero-snap games counted honestly
  • Points per target, per carry and per pass attempt, shrunk toward the position's league rate
  • Team implied points and expected margin from betting lines
  • Official injury designations (players ruled Out are removed)
  • Each player's current team from weekly rosters, so trades and signings are picked up

And what it deliberately ignores, because testing showed it didn't help: prime-time games, weather, opponent defence rankings, Week 1 effects and late-season trends. Details are on the Methodology page.

Who's behind it

Built by Parv Laddha, a student interested in economics and statistics. Questions or feedback: Instagram @parv_laddha.