we built this because sitting in draft rooms making decisions based on vibes was costing us leagues. this is the documentation for the system that replaced the vibes. it explains how the model thinks and how to use the output. it does not publish the recipe: the exact feature set, multipliers, and calibration are what make the numbers worth paying for, and they stay proprietary.


the core model

the base projection engine is a machine-learning model trained on eight seasons of NFL data (2018 through 2025). it produces a fantasy point projection per game for every player, then layers in adjustments for age, strength of schedule, and opportunity.

the inputs are the things that actually drive fantasy production: usage and role, the quality of the situation around a player, efficiency signals, and the stability of all of it across a sample. recent form is weighted more heavily than older games. the specific features and how they're weighted are calibrated, not guessed, and they are not published here.


age, schedule, and opportunity

three adjustments sit on top of the base projection:

  • age: production curves are non-linear and position-specific. running backs decline earliest and hardest; receivers age more gracefully; quarterbacks hold value longest. the model prices the curve so you're not paying peak prices for a player on the back nine.
  • strength of schedule: each projection is adjusted for the difficulty of that player's 2026 schedule by position. an easier slate nudges the projection up, a harder one down. the magnitude is deliberately restrained, because schedule is a noisy signal and over-weighting it does more harm than good.
  • opportunity: depth chart role and the volume available in a player's offense shape the ceiling. talent without touches doesn't score fantasy points.

confidence scores

every player in the rankings has a confidence score from 0 to 1. this is not a quality score: it is a signal reliability score. it reflects how much usable history the model has on a player and how noisy that history is.

how to read it:

  • 0.85+: clean signal. treat the projection as a point estimate with normal variance.
  • 0.65 to 0.84: usable, but treat it as a range. one injury or scheme change swings it.
  • below 0.65: thin sample. the number is directionally useful, not precise. rookies and players returning from injury often live here.

confidence is the most important number in the system. it's the model telling you, honestly, how much to trust the projection next to it. false precision is how you finish last.


injury returns and rookies

two groups break the standard model, so they get dedicated handling:

  • players returning from injury or IR would otherwise be mispriced, because the base model sees only a stale or tiny recent sample. the injury-return pathway adds 58 such players to the 2026 rankings and prices their return uncertainty honestly: lower confidence rather than an assumption of full production. these rows are flagged data_source = "injury_return" in the API.
  • rookies have no NFL sample at all. they start from pre-draft signal and are refined after the draft once landing spot is known. almost every rookie carries a confidence score below 0.70, which is correct: a high-confidence projection of a player who has never taken an NFL snap is a lie.

what it cannot do

  • predict injuries: no model does this reliably. the injury-return pathway adjusts for known history, not future events.
  • account for news not yet in the data: the model uses the most recent roster data available. moves after the last refresh require a re-run.
  • beat weekly variance: these are season-level projections. week-to-week noise is real and irreducible.
  • be right every time: the model is calibrated to be right on average over a full season. any single projection can be wrong.

validation

the model is evaluated on a held-out season it never trained on. the primary metric is mean absolute error on fantasy points per game. a change only ships if it beats the current model out of sample by a meaningful margin; ideas that look clever but don't move the error are cut, regardless of how good the theory sounds. we log every prediction and check the results in January. the track record is the only thing that matters.


the model is a tool, not an oracle

every ranking comes with a confidence score for a reason. the number is a range estimate at the bottom of the scale and a point estimate at the top. the model's job is to give you better priors than "he just looks like a WR1." your job is to apply the context the model doesn't have.

when the model says a player is QB24 and you disagree: show your work. if your argument is "but it's him," you're going to have a bad draft season.