Skip to content

Pin the backtest to 2018-2025, regenerate every result on one build, rewrite README and METHOD from it - #4

Merged
tdub29 merged 6 commits into
mainfrom
portfolio-polish
Oct 29, 2026
Merged

tdub29 merged 6 commits into
mainfrom
portfolio-polish

Conversation

@tdub29

@tdub29 tdub29 commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

What this does

Follows #3. Every number in the README, METHOD.md, docs/ and notes/ now comes from a tracked CSV in reports/, regenerated on one data build, and a fresh clone reproduces it.

Evaluation

  • The backtest is pinned to 2018-2025 (backtest.LAST_TEST), so 2026 never becomes a ninth fold. 2026 is scored live from the boards committed before each week.

  • The bake-off, the feature-family re-test, the 50+ study, the live scorecard and the charts were all rerun on the same build as the backtest.

  • Headline on that build:

    ridge lift 0.427 a week (17.4% of an oracle)
    edge over the implied total +0.074; week-block p = 0.004, season-level t-test p = 0.095, ahead in 6 of 8 seasons
    FG-attempt R² +0.003
    PAT-attempt R² +0.126
    P(15+) right on average, weak per kicker (AUC 0.55, calibration slope 0.55)

Live boards

  • Weeks 3, 4 and 7 are the boards as first committed before kickoff. Each was regenerated after its games, and those reruns now live in reports/reruns/, which the scorecard does not read.
  • Week 8 keeps the board from main, the first one published.
  • On the four counted weeks the board beat ranking by the implied total by +0.094 a week, 95% interval −0.26 to +0.45.

Docs

  • README: rewritten around the decision metric. It keeps the "Forecast inputs and results" graphic, with a caption giving the current figures and saying which of its labels are stronger than the current evidence. It also adds the closing-line and in-sample caveats, the live record, what was broken and how it was found, what did not work, quick start and layout.
  • METHOD.md: brought up to date section by section. It adds a reliability-based calibration section, a coefficient-based "what moves a kicker" list, the live record, and a table of how the headline moved by commit.
  • Retractions: "calibrated P(15+)", "negative FG skill" and "families beat their noise controls" are retracted where they appeared.
  • Notes, docs and READMEs: the notes file is marked as the 2026-09-29 record and leads with today's rerun. docs/, the experiments READMEs, legacy/README.md and the code docstrings now match the code and the CSVs.

Checks

  • pytest -q: 22 passed (self-checks with network blocked, repo hygiene and link checks).
  • Every documented number was traced to a CSV or a run log.

… build

2026 is scored live from the boards published before each week, so it must
never become a ninth backtest fold once it reaches eight weeks. LAST_TEST =
2025 in backtest.py; the bake-off, evaluate.py and both experiments use it,
and the variance decomposition is over 2015-2025.

The bake-off, the feature-family re-test, the 50+ study, the live scorecard
(week 7 now final) and the figures are rerun on the same data build as the
backtest, so the cross-CSV checks in figures.py pass without a caveat.

Adds the 2026 week 8 board, built before the week's first kickoff.
…oard

main regenerated the week 7 board after week 7 was played. A board is the
forecast of record only as first committed before kickoff, so week 7 goes
back to its 24a3c60 version, like weeks 3 and 4; all three after-the-game
reruns are kept in reports/reruns/. Week 8 keeps main's board, the first one
published. The graphic stays in the README with a caption giving the current
numbers beside the ones it shows.
…rst screen

- Docstrings and comments in model.py, fourth_down.py, the feat_* modules,
  predict_week.py, run_pipeline.py and the experiment scripts no longer
  quote stale numbers or moved paths; a 56-yard attempt is typically
  yardline_100 + 18.
- README: define the implied total and the decision lift where they first
  appear, add the live 2026 record to the summary, say plainly which of the
  graphic's labels are stronger than the current evidence, state the closing
  line and in-sample selection caveats next to the backtest, and gloss
  Holm, shrinkage, MAE and rank correlation.
- METHOD: the 16 versus 18 Holm family count, stadium climate is wind only,
  the closing-line effect is unmeasured, weeks 2 and 3 predate the roof-flag
  fix, and limits stated without adjectives.
- Tracked experiment logs now match the run behind the tracked CSVs.
@tdub29
tdub29 merged commit efdf513 into main Oct 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant