Skip to content
dugout

How it works · every forecast tested on past seasons · weak results included

How dugout knows what it says.

The rule

AI writes the words, never the numbers. Every figure is filled straight from the data, and nothing is published unless two independent checks pass.

  1. Stat Auditor · no language model

    Every cited number's query is re-run against its source and must reproduce the stored value; goals, minutes, availability and fees are compared with a second source; any digit or number word not filled from the ledger fails the build.

  2. Fact-Check · DeBERTa-v3 NLI + BGE retrieval

    Every other claim needs one official source or two independent ones (one vote per ownership group). Contradicted claims withhold the section; unsupported sentences are cut. False verifications on hand-labelled football claims: false verifications · docs/backtests/factcheck_nli.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 17:38 UTCStatus: dugout estimate, re-checked.

On held-out questions the system routed routing accuracy · docs/backtests/agents_eval_templates_holdout.jsonSource: dugout backtest (tier 3)Fetched: 16 Oct 2026, 00:52 UTCStatus: dugout estimate, re-checked correctly, answered answer recall · docs/backtests/agents_eval_templates_holdout.jsonSource: dugout backtest (tier 3)Fetched: 16 Oct 2026, 00:52 UTCStatus: dugout estimate, re-checked, refused every unanswerable question, and published untraceable number rate · docs/backtests/agents_eval_templates_holdout.jsonSource: dugout backtest (tier 3)Fetched: 16 Oct 2026, 00:52 UTCStatus: dugout estimate, re-checked untraceable numbers. The open-weight LLM's drafts passed every check for share of sections the llm wrote · docs/backtests/agents_eval_llm_holdout.jsonSource: dugout backtest (tier 3)Fetched: 16 Oct 2026, 01:18 UTCStatus: dugout estimate, re-checked of sections; deterministic templates wrote the rest.

The models

  • Match predictor

    Elo + expected-goals Dixon–Coles stack, refit every four gameweeks. Ranked probability score (lower is better):2024-25: dugout rps 2024-25 dugout · docs/backtests/predictor.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:30 UTCStatus: dugout estimate, re-checked · Elo rps 2024-25 elo · docs/backtests/predictor.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:30 UTCStatus: dugout estimate, re-checked · closing odds rps 2024-25 bookmaker · docs/backtests/predictor.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:30 UTCStatus: dugout estimate, re-checked2025-26: dugout rps 2025-26 dugout · docs/backtests/predictor.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:30 UTCStatus: dugout estimate, re-checked · Elo rps 2025-26 elo · docs/backtests/predictor.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:30 UTCStatus: dugout estimate, re-checked · closing odds rps 2025-26 bookmaker · docs/backtests/predictor.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:30 UTCStatus: dugout estimate, re-checked

    beats Elo · bookmakers still better

  • Forecasts in other leagues

    Same replay, each league's own history (no expected goals outside the Premier League, so the stack and Elo come out almost level). Ranked probability score, last season:La Liga: stack rps la liga stack · docs/backtests/predictor_la_liga.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:50 UTCStatus: dugout estimate, re-checked · Elo rps la liga elo · docs/backtests/predictor_la_liga.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:50 UTCStatus: dugout estimate, re-checked · closing odds rps la liga bookmaker · docs/backtests/predictor_la_liga.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:50 UTCStatus: dugout estimate, re-checked · shown: stackSerie A: stack rps serie a stack · docs/backtests/predictor_serie_a.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:53 UTCStatus: dugout estimate, re-checked · Elo rps serie a elo · docs/backtests/predictor_serie_a.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:53 UTCStatus: dugout estimate, re-checked · closing odds rps serie a bookmaker · docs/backtests/predictor_serie_a.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:53 UTCStatus: dugout estimate, re-checked · shown: EloBundesliga: stack rps bundesliga stack · docs/backtests/predictor_bundesliga.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:55 UTCStatus: dugout estimate, re-checked · Elo rps bundesliga elo · docs/backtests/predictor_bundesliga.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:55 UTCStatus: dugout estimate, re-checked · closing odds rps bundesliga bookmaker · docs/backtests/predictor_bundesliga.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:55 UTCStatus: dugout estimate, re-checked · shown: EloLigue 1: stack rps ligue 1 stack · docs/backtests/predictor_ligue_1.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:57 UTCStatus: dugout estimate, re-checked · Elo rps ligue 1 elo · docs/backtests/predictor_ligue_1.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:57 UTCStatus: dugout estimate, re-checked · closing odds rps ligue 1 bookmaker · docs/backtests/predictor_ligue_1.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:57 UTCStatus: dugout estimate, re-checked · shown: EloEredivisie: stack rps eredivisie stack · docs/backtests/predictor_eredivisie.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:59 UTCStatus: dugout estimate, re-checked · Elo rps eredivisie elo · docs/backtests/predictor_eredivisie.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:59 UTCStatus: dugout estimate, re-checked · closing odds rps eredivisie bookmaker · docs/backtests/predictor_eredivisie.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 07:59 UTCStatus: dugout estimate, re-checked · shown: Elo

    the stack where it wins · Elo elsewhere

  • Valuation

    Gradient boosting on past fees. Median error on test transfers median error, model · docs/backtests/valuation.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 20:17 UTCStatus: dugout estimate, re-checked vs median error, market value · docs/backtests/valuation.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 20:17 UTCStatus: dugout estimate, re-checked for “fee = market value”. Every price comes with a likely range, wider for cheap players, whose fees vary most: on test transfers fees inside the likely range · docs/backtests/valuation.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 20:17 UTCStatus: dugout estimate, re-checked of fees landed inside it (aim: share of fees the range aims to hold · docs/backtests/valuation.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 20:17 UTCStatus: dugout estimate, re-checked).

    beats market value

  • Transfer realism

    P(sold in a window) × the club's share of plausible buyers. Sale model AUC mobility auc · docs/backtests/realism.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 16:52 UTCStatus: dugout estimate, re-checked; destination AUC destination auc · docs/backtests/realism.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 16:52 UTCStatus: dugout estimate, re-checked.

    calibrated parts

  • Rumour brief

    Every rumour on a club page comes with its source's label, how many independent outlets (one per media group) carry the link and since when, our estimate of the move (the transfer realism above), his contract, how often his club sells, and what became of the source's earlier reports on the same club. A source is rated against what similar reports did: on the latest season that estimate scored a Brier of brier, rumour track record · docs/backtests/rumours.jsonSource: dugout backtest (tier 3)Fetched: 19 Oct 2026, 15:04 UTCStatus: dugout estimate, re-checked vs brier, recent base rate · docs/backtests/rumours.jsonSource: dugout backtest (tier 3)Fetched: 19 Oct 2026, 15:04 UTCStatus: dugout estimate, re-checked for the recent base rate; AUC auc, rumour track record · docs/backtests/rumours.jsonSource: dugout backtest (tier 3)Fetched: 19 Oct 2026, 15:04 UTCStatus: dugout estimate, re-checked. Reliable or speculative needs a record clearly apart from that, beyond luck; almost every outlet, and the column's own round-ups, come out about average. The labels by outlet.

    beats the base rate · few sources stand out

  • Player potential

    Projected market value. Median error two years ahead median error 2y · docs/backtests/potential.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 18:44 UTCStatus: dugout estimate, re-checked (age curve median error 2y, age curve · docs/backtests/potential.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 18:44 UTCStatus: dugout estimate, re-checked); four years median error 4y · docs/backtests/potential.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 18:44 UTCStatus: dugout estimate, re-checked.

    beats age curve · wide bands

  • Playing-time outlook

    Expected minutes share at a new club. R² r² · docs/backtests/opportunity.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 17:00 UTCStatus: dugout estimate, re-checked vs r² baseline · docs/backtests/opportunity.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 17:00 UTCStatus: dugout estimate, re-checked for last season's minutes alone.

    the validated part of fit

  • Style similarity

    Manager fingerprint from Opta-derived team shares. It does not predict minutes (Spearman spearman fit vs minutes · docs/backtests/fingerprint.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 16:01 UTCStatus: dugout estimate, re-checked), so it is shown as description, never as a forecast.

    descriptive only

  • Injury risk

    Load and history model. AUC injury auc · docs/backtests/injury.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 18:50 UTCStatus: dugout estimate, re-checked, top-decile lift top-decile lift · docs/backtests/injury.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 18:50 UTCStatus: dugout estimate, re-checked; shown as risk tiers because calibration is limited. Other leagues have no current minutes, so their tiers come from the injury record and age alone: La Liga AUC injury auc, la liga · docs/backtests/injury.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 18:50 UTCStatus: dugout estimate, re-checked, Serie A AUC injury auc, serie a · docs/backtests/injury.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 18:50 UTCStatus: dugout estimate, re-checked, Bundesliga AUC injury auc, bundesliga · docs/backtests/injury.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 18:50 UTCStatus: dugout estimate, re-checked, Ligue 1 AUC injury auc, ligue 1 · docs/backtests/injury.jsonSource: dugout backtest (tier 3)Fetched: 18 Oct 2026, 18:50 UTCStatus: dugout estimate, re-checked; not rated in Eredivisie (too little injury data).

    tiers, not percentages

  • Lineup optimiser

    CP-SAT integer programme. Predicted XI overlap with the real XI xi overlap · docs/backtests/lineup.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:56 UTCStatus: dugout estimate, re-checked vs xi overlap, heuristic · docs/backtests/lineup.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:56 UTCStatus: dugout estimate, re-checked for recent minutes.

    slightly beats heuristic

  • Predicted XI in other leagues

    Without FPL minutes, the best rule found is the club's last league XI (recency-weighted starts did not beat it). Share of the real XI predicted last season xi overlap, last xi · docs/backtests/lineup_recent.jsonSource: dugout backtest (tier 3)Fetched: 17 Oct 2026, 08:29 UTCStatus: dugout estimate, re-checked; players API-Football lists as missing are replaced by the most recent other starter.

    the last XI, absentees replaced

  • Player quality (VAEP)

    Action values on open event data. Scoring-model AUC vaep auc · docs/backtests/player_ratings.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 16:20 UTCStatus: dugout estimate, re-checked.

    beats base rate

  • Roles & similarity

    Gaussian mixtures on per-90 profiles. Role stability (adjusted Rand) role stability ari · docs/backtests/roles.jsonSource: dugout backtest (tier 3)Fetched: 15 Oct 2026, 15:37 UTCStatus: dugout estimate, re-checked.

    stable roles

Full reports, including what did not work (FootballBERT embeddings were not adopted: the signal was leakage): docs/backtests