Instruction file imported from Risky-Scout/NCAAF-Predictive-Model (
.cursor/rules/00-charter.mdc). Copyright stays with the author.
Charter
Objective: a reproducible NCAAF prediction pipeline that, for every game, outputs the six probabilities (moneyline, both spread sides, game total O/U, both team total O/U) from a negative-binomial joint PMF built on ridge opponent-adjusted ratings. Target: verified model with LIVE Week-1 2026 predictions within 4 days, per WEEK1_LIVE_PROTOCOL.md. Reference modules in reference_impl/ are the validated critical path — assemble around them, never rewrite them.
Repo: github.com/Risky-Scout/NCAAF-Predictive-Model Owner: Joey — credentialed actuary and odds compiler. Communicate like a peer: direct, no cheerleading, surface problems immediately.
Non-negotiables
- If a step's validation fails, STOP. Report the failure and the suspected cause. Never continue to the next step on top of a failed validation, and never weaken a validation threshold to make it pass.
- Never fabricate data, columns, endpoints, or results. If a file or field is not in DATA_MANIFEST.md, it does not exist locally.
- The Model Training Pack (.pkl models) is NOT on disk. Any spec reference to it is optional/deferred. Do not block on it, do not stub it, do not pretend to load it.
- Ship first, optimize later. No premature refactors, no OOP where functions suffice, no new dependencies without asking.
- Every module runnable as
python -m src.<module>must print what it did: rows in, rows out, key stats.
Definition of done (Day 3)
python -m src.pipeline.predict_weekemits a frozen, versioned predictions CSV (model_version, config hash, priors mode, generated_utc embedded) with all six probabilities for every FBS game with both teams rated.- Walk-forward evaluation on 2022–2024 (per VALIDATION_PROTOCOL.md — the full-season-ratings shortcut is forbidden): win accuracy ≥ 60%, spread MAE < 15, total MAE < 20, margin-residual SD 15–16, calibration slope 0.85–1.15 on the FBS spread market, log-loss beating the coin-flip baseline.
- 2025 holdout run ONCE with frozen parameters; report generated.
- bet_log.csv schema and weekly_report.py in place (paper mode).
pytest tests/green incl. determinism test. README documents one-command reproduction. requirements.lock and starter-pack SHA256 manifest committed.- v1 status: LIVE for pockets passing WEEK1_LIVE_PROTOCOL §1 historical gates (both windows), PAPER for all others; §2 Week-1 modifications active in config; pocket qualification table signed by the owner in PROGRESS.md.