Fig. 4 — enlarged from sheet 01
Fantasy football analysis built on a graph of players, coaches, teams, and games, with every relationship dated so it can be backtested against past seasons. It started as a draft board and grew into a play-by-play simulator, a start/sit tool, and a waiver page, all on a static site that polls a live Sleeper draft.
I wanted a graph-based analysis for fantasy drafting: use the relationships between players, coaches and coordinators, teams, and the schedule to predict fantasy performance, and backtest it. Most projection systems flatten those into per-player averages. A receiver whose coordinator and quarterback both left in the offseason is a different bet than his points per game say, and I wanted to know how much different.
A team is also about more than drafting the best players. Bye weeks, roster slots, and the correlation between a quarterback and his receivers all matter at the draft, and the same predictions should eventually tell me who to start each week. I had built Bracket Oracle for March Madness a few months earlier, and its ideas came along: a market prior as an input the model learns to adjust, Monte Carlo over the whole season, and leave-one-year-out validation.
Players, teams, coaches, and games are nodes. Stints and schedules are edges with start and end weeks, so every feature can be computed as of any given week without leaking the future into a backtest. Data is nflverse flat files, a hand-curated coaching staff history back to 2015, historical preseason ADP, and eleven seasons of play-by-play.
The season model is a ridge regression and a small gradient-boosted tree averaged together, with ADP as an input. Against the market’s top 30 across seven seasons it scores about even with ADP on its own, and averaging the two rankings beats either. The weekly model beats season averages and last-four-game averages in all six test seasons. The largest measured edge is in-season: managing a roster by the weekly model added about a third of a win a season on identical drafts in both realized seasons I could test, while form-chasing waiver moves added nothing.
Underneath that is a simulator that plays games play by play. Each snap draws from a player’s own historical plays, conditioned on his quarterback and bent by the opposing defense, the formation, and the Vegas line. It dealt 4th-quarter comebacks and red-zone scoring wrong at first, and each fix was a case of the sampled pool borrowing plays from the wrong situation.
Fantasy drafters misprice rookies: NFL draft pick alone ranks rookie outcomes at 0.53 rank correlation where fantasy ADP manages 0.34 on the same players. Changing teams costs about a tenth of production, young players improve, veterans fade, and the market over-fades coaching changes. Running backs never respond to continuity features; their week is about role, and the recent snap share is the strongest weekly signal there is.
The site is where it lives now: a draft board ranked by value over replacement that polls a live Sleeper draft and drops picked players, a start/sit view with floor and ceiling, and a waiver view. It ran my 2026 draft.