DFS DegenSports

Building Your Own DFS Projection Model: The Minimum Viable Framework

By DFS Degen TeamPublished August 26, 202611 min read

Building your own DFS projection model is a rite of passage that most DFS players skip. The paid projection services are competitive enough that building your own from scratch isn't necessary to be profitable. But building even a minimum-viable model has real benefits — it forces you to understand scoring, creates a triangulation signal against paid services, and turns you into a smarter consumer of projections. This piece walks through the minimum viable 4-input framework, how to build it in a spreadsheet, and how to validate it against historical results.

DFS projection models are the underlying infrastructure of every lineup decision. Every top-projected player, every stacking recommendation, every floor / ceiling estimate flows from a projection model somewhere. Most players use commercial projection services and add their own construction rules on top. That works, but it hides the machinery. Building even a rough model exposes the machinery.

The four-input framework

A minimum viable projection model uses four inputs. These are the same four that professional projection services use — the difference is in the accuracy of each input, not the framework itself.

1. Opportunity (volume)

The base measure of "how much of the game the player touches." Sport-specific proxies:

  • NFL WR: targets per game
  • NFL RB: touches (rushes + receptions) per game
  • NBA: possessions used (usage rate × team pace × minutes)
  • MLB hitter: plate appearances per game
  • MLB pitcher: innings pitched per start

Opportunity is the strongest predictor of fantasy scoring across every sport. A player with declining efficiency but stable opportunity will maintain fantasy production; a player with elite efficiency but low opportunity has a capped ceiling.

2. Efficiency (per-opportunity value)

The rate at which opportunities convert to fantasy points. Sport-specific proxies:

  • NFL WR: fantasy points per target (typically 1.2-2.0 in PPR)
  • NFL RB: fantasy points per touch (0.5-0.9 typical)
  • NBA: true shooting percentage × usage-adjustment
  • MLB hitter: wOBA (weighted on-base average)
  • MLB pitcher: K/9 rate + WHIP

Efficiency multiplied by opportunity gives you the baseline expected fantasy score. Efficiency numbers stabilize slowly — need 100+ plate appearances or 20+ NBA games to be reliable.

3. Game total context

Vegas game totals + spreads translate directly to team-level scoring expectations. A high implied team total means more scoring opportunities cascade to every rostered player on that team. Volume adjustments:

  • NFL: team implied total × pass-attempt rate × per- target efficiency for WRs
  • NBA: team pace × game total → possessions × your player's usage → their possessions used
  • MLB hitter: run environment (game total / 2) → plate-appearance efficiency

4. Variance estimate

The standard deviation around the projected mean. Needed for floor / ceiling projections and for the correlation modeling that stacking depends on. Simplest estimate: historical week-to-week standard deviation of the player's fantasy scores. More sophisticated: sport-specific variance parameters per position.

Building in a spreadsheet

A minimum viable model lives in Google Sheets or Excel. Columns:

  1. Player name
  2. Team
  3. Opponent
  4. Salary
  5. Opportunity (input, from research)
  6. Efficiency (input, from research)
  7. Team implied total (input, from Vegas)
  8. Game total context adjustment (formula, combines above)
  9. Projection = opportunity × efficiency × context adjustment
  10. Variance estimate (input, from historical STD DEV)
  11. Floor = projection − 1.28 × variance (10th percentile)
  12. Ceiling = projection + 1.28 × variance (90th percentile)

The formula work is 30-60 minutes. The data collection for opportunity + efficiency inputs is the harder part — that's where most of the 15-20 hour minimum time commitment lives.

A spreadsheet model with rough inputs beats no model. A spreadsheet model with careful inputs beats most paid services on a per-sport basis. Automation and multi- sport coverage are what commercial services provide; model quality itself is buildable at home.

Data sources for inputs

Opportunity data

Free: Pro Football Reference (NFL), Basketball Reference (NBA), Baseball Reference (MLB). Load prior 3-5 games for each player to compute rolling opportunity averages.

Efficiency data

Same sources as opportunity + season-to-date rates. Regression toward league baseline is important — a 20-target sample of 2.5 fantasy points per target won't sustain; use 100+ target samples where available.

Vegas totals + spreads

DraftKings Sportsbook, FanDuel Sportsbook, Bovada, VegasInsider. Real-time updates; use the closing-line numbers for retrospective backtesting.

Variance estimates

Compute from historical per-game fantasy scores. Rolling 20-game standard deviation for stable-role players; larger sample for role-change situations.

Validation via backtest

After building the model, backtest it against actual historical outcomes. See our backtesting piece for the discipline. Key metrics:

  • Per-position MAE: Compare your model's MAE to industry baselines. Beat baseline = real edge.
  • Bias: Systematic over- or under-projection. Bias > ±1.5 points indicates a formula error.
  • Coverage: Do your 80% confidence intervals actually contain the true score 80% of the time? If yes, your variance estimates are calibrated.

What's hard about building a model

Some model challenges commercial services handle that you'll need to figure out:

  • Injury adjustments. When a starter is out, the backup's opportunity spikes. Manual projections need to reflect these adjustments per slate.
  • Weather adjustments. See our weather in DFS piece — your model needs to price wind, precipitation, temp into per-position adjustments.
  • Matchup-specific adjustments. A WR facing an elite CB has efficiency reductions; a QB facing a top pass-defense faces suppressed volume. Simple models miss these; sophisticated models include them.

The triangulation workflow

The recommended workflow for someone who's built their own model: use it in conjunction with 1-2 paid services. Compare projections. When your model differs by 3+ DK points, investigate the reason. Common causes:

  • Your model missed an injury adjustment the service incorporated.
  • Your model priced a matchup effect the service missed (potential edge).
  • Your data ingest is stale relative to the service (fix your data feed).

Related

Frequently asked questions

Do you need to build your own projection model for DFS?

No — most winning DFS players rely on subscription projection services (RotoWire, FantasyLabs, FantasyPros, etc.) plus their own construction rules. But building even a minimum-viable projection model has three benefits: (1) forces you to understand what drives fantasy scoring for the specific sport, (2) creates a diff signal when your model disagrees with consensus (potential edge), (3) makes you a better consumer of others' projections because you know what to check for.

What's the minimum viable projection model?

Four inputs: (1) opportunity (touches/possessions/plate appearances/minutes), (2) per-opportunity efficiency (yards per touch, points per possession, etc.), (3) game total context (Vegas total × spread → team-total → volume adjustment), (4) variance estimate (standard deviation around the mean, needed for floor/ceiling projections). Multiply first three for expected mean; combine with variance for confidence interval.

How do you validate a projection model?

Backtest against historical actuals. Compute Mean Absolute Error (MAE) per position per sport. Compare to industry baseline: NFL WR baseline is ~5.5 DK points MAE; NFL RB is ~7; NBA is ~8-10; MLB hitters ~4-5; MLB pitchers ~5-6. If your model beats baseline, you have real edge. If it matches baseline, your value is process ownership (you understand why); if it's worse, keep the professional projections.

How much time does it take to build a projection model?

A minimum-viable spreadsheet model for one sport: 15-20 hours. That includes data collection, formula setup, backtesting, and iteration. Full production-quality models (matching what RotoWire produces): hundreds to thousands of hours because they require multi-year historical data ingest, statistical modeling for each stat category, and continuous updating as league dynamics shift.

Should you combine your model with paid projections?

Yes, if you built your own. The winning approach is model triangulation: your model + 1-2 paid services. When all three agree, high confidence; when they diverge, investigate. The divergence signal is what your custom model provides beyond the paid services — if you consistently see 10-point deltas on specific player types, either your model has an edge or a systematic bias, and either way it's information.

Keep reading

Put the theory into practice

DFS Degen runs correlated Monte Carlo sims across 22 sports — up to 50,000 iterations per slate, from $19.99/month.