Trying to Defend a Fantasy Title with Better Draft Decisions

A build-log look at the draft decision system I am building: live context, player value, opponent behavior, and the cost of waiting.

I won my fantasy league last year. That gives me a title to defend, a little more confidence than is probably healthy, and a very practical reason to take this year’s draft seriously.

I am also about a year into a data science degree. So for this season, I have been building a small decision-support tool for my own league. It is not an autopilot, and it is not a claim that a model can win a league for me. It is a way to make better calls when the clock is running.

A player ranking is useful, but it is not the same thing as a draft decision. When I am on the clock, I do not just need to know who is “best” in a vacuum. I need to know what is available, what my roster needs, how close my next pick is, and whether waiting on a player is actually realistic in this room.

I have been calling the project Gridiron Intelligence. Path3 is the draft-decision path inside it. It starts with three kinds of information:

  • Private ESPN data: league, player, forecast, and draft-state observations.
  • nflverse history: players, games, and weekly player statistics.
  • FantasyPros historical ECR and a player-ID crosswalk.

Those sources feed a Supabase data foundation. The important part is keeping source facts separate from derived model output, so the draft logic can be inspected and tested instead of becoming a black box.

Flowchart showing the Path3 source-to-decision architecture: data foundation, player value, opponent process, roster-path simulation, and draft recommendation.

From there, the decision flow splits in two.

The player-value side is about the obvious question: what does this player add to my roster if I take him now? That starts with a performance baseline and opportunity features, rather than jumping straight to a black-box ranking.

The opponent-process side is about waiting. It uses ADP/ECR, roster and pick context, and evidence about how the room depletes the player pool. Market data is an input rather than the final authority.

For serious candidates, Path3 compares roster paths with Monte Carlo simulation. I am not trying to predict the entire draft perfectly. I am trying to compare a few plausible decision paths:

  • What happens if I take this player now?
  • What does the roster look like by my next few turns?
  • If I wait, how often does this player actually make it back?
  • What alternatives are still likely to exist?

That distinction is important. Path3 scores complete roster paths, not just available players. “Cost of Waiting” explains urgency—why a player may be the better choice now rather than later—without quietly overriding the recommendation.

The output stays intentionally small: ranked candidates, a draft-now recommendation, an estimated chance of surviving to a later pick, and a short “Why.” There is plenty of detail under the hood, but draft night is not the time to turn a recommendation into a research paper.

The model still has to earn its way into the decision. Chronological validation and reliable input checks matter more than adding a clever feature. A visible fallback is better than a confident-looking answer built on bad state.

With six days until the draft, the next step is a final pass through the data, live-state capture, and explanation layer. The goal is not an autopilot. It is a system that gives me a better read on the decision, shows its work, and gets out of the way when it cannot.

cd ~