Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
翻訳待ち
No updates detected yet. GitHub releases will appear here.
What predicts fantasy football points? pandas analysis of 27 NFL seasons, 1999–2025.
翻訳待ち
Loading the full README.
Read the full README ↗Every week, fantasy football managers choose between players using recent form, matchups, and Vegas lines. This project tests those instincts against 27 NFL seasons (1999-2025, 144,000 player-games): how the game changed, what never did, a projection model scored on seasons it never saw, a season-long model for drafts, and live projections for the 2026 season (this week's).
Live, phone-friendly version: joshwilliams332.github.io/nfl-historic-analysis
Python · pandas · scikit-learn · matplotlib · Jupyter · Power BI (DAX) · JavaScript · data from nflverse
Averaging a stat over odd weeks and over even weeks, then correlating the two halves, separates role from luck. Targets and carries repeat almost perfectly (r ≈ 0.9). Touchdowns repeat far less (r ≈ 0.4-0.6), and yards per target or per carry hardly repeat at all. When a player's points outrun their volume, expect a pullback.
The last game is the weakest predictor at every point in the season, and the last three games trail the season-to-date average. Early in the year, last season's average is as informative as this season's.
From the toughest fifth of matchups to the softest, scoring moves about 10% relative to a typical week. The Start/Sit heuristic on my fantasy site (Mingus Sports) assumes about 38% across the same groups. Vegas implied totals add about 5% once a player's average is known.
Trained on 2021-2023, tuned on 2024, tested once on 2025 (2,591 player-games):
| Projection | MAE (pts) | Correlation | Start/sit accuracy |
|---|---|---|---|
| Last game | 7.53 | 0.290 | 58.7% |
| Last 3 games | 6.24 | 0.400 | 62.6% |
| Season average | 5.87 | 0.450 | 64.1% |
| Mingus site formula | 6.08 | 0.432 | 64.0% |
| Gradient boosting | 5.63 | 0.475 | 64.9% |
| Ridge regression | 5.67 | 0.488 | 65.5% |
Start/sit accuracy: across every pair of same-position players in the same week, how often the one projected higher actually scored more (50% = coin flip).
A linear model was enough. Gradient boosting didn't find interactions worth its extra complexity.
When two players' projections are under 2 points apart, no projection is much better than a coin. At 6+ points, the call is right about 4 times in 5.
Target share, this season's average, and last season's average carry the most weight. Touchdowns per game is negative once points and volume are known: the model has learned to expect touchdown streaks to fade.
Wide receivers' share of top-150 fantasy points fell from about 46% to about 37% (3-season average). Quarterbacks and tight ends took most of it.
The 300-carry back went from about 10 a season in the early 2000s to none in 2023, with a small rebound since.
Season average beat the last 3 games, and the last 3 beat the last game, in all 27 seasons. Finding 2 is not a quirk of the modern NFL.
Touchdown spikes fade over full seasons too. The top fifth by touchdowns per touch dropped from 9.8% to 6.4% the next year, while their touches per game held steady. Year-to-year correlation: 0.54 for TD rate, 0.85 for touches per game.
Delta method (each player compared only with themselves, year over year). Running backs peak at about 24 and fall off steeply after 26. Receivers and tight ends peak around 25-26 and decline more gradually. Quarterbacks peak around 30 and hold up into their mid-30s. Survivors only, so real declines are steeper.
| Ridge trained on | Rows | 2025 MAE | Start/sit accuracy |
|---|---|---|---|
| 2021-2023 | 7,894 | 5.674 | 65.5% |
| 2015-2023 | 23,280 | 5.668 | 65.5% |
| 2009-2023 | 38,186 | 5.670 | 65.5% |
Five times the data, the same accuracy. The ceiling is the noise in a single game, not a shortage of examples. Better information (injuries, snap counts, depth charts) is what would move it.
Players who suit up with an injury tag score less than usual: 11% below a typical week when listed questionable, 15% when they missed practice. But only about 6% of player-games carry a tag, so adding the report barely moves overall accuracy.
This is the beginning of the README. Read the rest at the original. Read the full README ↗