Building Your Own DFS Projection Model: The Minimum Viable Framework
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:
- Player name
- Team
- Opponent
- Salary
- Opportunity (input, from research)
- Efficiency (input, from research)
- Team implied total (input, from Vegas)
- Game total context adjustment (formula, combines above)
- Projection = opportunity × efficiency × context adjustment
- Variance estimate (input, from historical STD DEV)
- Floor = projection − 1.28 × variance (10th percentile)
- 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
- DFS projection quality — how to evaluate any projection source (yours or others')
- How to backtest DFS lineups — the discipline for validating your model works
- How to read simulation output — the simulator applies your projections; understand both together
- Monte Carlo simulation — the simulation layer that projections feed into
- Correlation matrix — the correlation half of the simulator that projections don't capture