{"schemaVersion":"lightgbm-football-prediction-model-backtest/1.0.0","releaseDate":"2026-07-18","title":"EPL LightGBM football prediction model walk-forward backtest","status":"research-only; candidate activation failed closed","directAnswer":"The fixed 14-feature LightGBM plus one-vs-rest isotonic pipeline passed the declared numeric backtest thresholds on 2,075 walk-forward evaluations, but it is not eligible for production activation because the latest-state source CSVs do not contain correction observed-at revision history.","league":{"code":"E0","name":"English Premier League","country":"England"},"sourceFixtureCount":3800,"evaluation":{"matchCount":2075,"foldCount":3,"temporalCoverageStart":"2021-02-02","temporalCoverageEnd":"2026-05-24","protocol":"walk-forward","metrics":{"hitRate":0.4930120482,"brierClassAverage":0.2053958123,"logLossNats":1.0796747069,"ece":0.0340522168}},"model":{"algorithm":"LightGBM multiclass + one-vs-rest isotonic","featureSchemaVersion":"proofxi-asof-v2","featureCount":14,"featureNames":["home_points_sum_5","away_points_sum_5","home_goals_for_sum_5","home_goals_against_sum_5","away_goals_for_sum_5","away_goals_against_sum_5","home_home_points_sum_5","home_home_goal_diff_sum_5","away_away_points_sum_5","away_away_goal_diff_sum_5","elo_diff_home_adv","h2h_home_points_sum_5","home_rest_days","away_rest_days"],"trainingConfig":{"folds":3,"minimum_raw_train":300,"minimum_calibration":100,"random_seed":20260710,"n_estimators":350,"learning_rate":0.035,"num_leaves":24,"min_child_samples":35,"subsample":0.85,"colsample_bytree":0.85},"dependencyVersions":{"joblib":"1.5.2","lightgbm":"4.6.0","numpy":"2.2.6","scikit-learn":"1.7.2"}},"gates":{"numericBacktest":{"passed":true,"failures":[],"required":{"hitRate":">0.48","brier":"<0.22","sampleCount":">=500","foldCount":">=3","evaluationCoverageDays":">=365","pointInTimeProvenance":"complete versioned observed-at revision history covering the evaluation window"}},"candidateActivation":{"passed":false,"failures":["pointInTimeProvenance is required"],"productionGateModified":false}},"pointInTimeBoundary":{"sourceRevisionMode":"latest-state-publisher-csv","sourceRevisionHistoryComplete":false,"correctionObservedAtComplete":false,"asOfReplayVerified":false,"explanation":"The hash-pinned files preserve the publisher bytes fetched for this release, but they expose latest match state rather than a versioned record of when corrections became observable. This prevents candidate activation even though the numerical thresholds pass."},"source":{"publisher":"Football-Data.co.uk","landingPage":"https://www.football-data.co.uk/data.php","notes":"https://www.football-data.co.uk/notes.txt","derivedFromManifest":{"repositoryPath":"data/football-1x2-empirical-benchmark-1.0.0-manifest.json","sha256":"801f8c6c23e30f945dcba38e4c256fd4e9f3652f7e2ea965e4788f0e7cf9014a"},"sourceInputs":[{"season":"2016/17","role":"prior-history","url":"https://www.football-data.co.uk/mmz4281/1617/E0.csv","localRelativePath":"1617/E0.csv","sha256":"9625a7652b5f98fbd3e2e4d378c851fc246693f3343e34a72428d5b6e864d3e0","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2017/18","role":"prior-history","url":"https://www.football-data.co.uk/mmz4281/1718/E0.csv","localRelativePath":"1718/E0.csv","sha256":"4f3389365ef3f7ac966764ed8ba67cf3b79f5aebed18dd224099c4b2c98bc67b","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2018/19","role":"prior-history","url":"https://www.football-data.co.uk/mmz4281/1819/E0.csv","localRelativePath":"1819/E0.csv","sha256":"7c096b3c2ecd54c6993d22eeea73450c2bde11e3457238b226b8f43c62dfc35e","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2019/20","role":"prior-history","url":"https://www.football-data.co.uk/mmz4281/1920/E0.csv","localRelativePath":"1920/E0.csv","sha256":"100037618b94f94057400bb02bf6bac4ef74ddaa58cde4b38370839c39caee61","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2020/21","role":"prior-history","url":"https://www.football-data.co.uk/mmz4281/2021/E0.csv","localRelativePath":"2021/E0.csv","sha256":"5afe63f69401457b8354eaacee24f9a3e520b3c3af6329564a9783e20d789c62","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2021/22","role":"evaluation","url":"https://www.football-data.co.uk/mmz4281/2122/E0.csv","localRelativePath":"2122/E0.csv","sha256":"335afcbabeb2939fa10ab39ba3e8215072d0b577cb8d0705c1e44c56e934e703","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2022/23","role":"evaluation","url":"https://www.football-data.co.uk/mmz4281/2223/E0.csv","localRelativePath":"2223/E0.csv","sha256":"8442792d3b614c94ea3cf381bd2736805889cc1713169035368fff19c3d02380","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2023/24","role":"evaluation","url":"https://www.football-data.co.uk/mmz4281/2324/E0.csv","localRelativePath":"2324/E0.csv","sha256":"b2e057b0ed959f198b0f63d2391c01239f3608e6de5db68edab3f88e04d07ff3","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2024/25","role":"evaluation","url":"https://www.football-data.co.uk/mmz4281/2425/E0.csv","localRelativePath":"2425/E0.csv","sha256":"d0c8ce4a96d886cf60cf101f570f4a3893844226f91c7bd769eb568c49edbfa4","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]},{"season":"2025/26","role":"evaluation","url":"https://www.football-data.co.uk/mmz4281/2526/E0.csv","localRelativePath":"2526/E0.csv","sha256":"3e3a8352f9ada6789c508d6ca184424421fed56a30400904a4a327c583407e62","completedMatchRows":380,"fieldsUsed":["Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]}],"rawRowsRedistributed":false},"reproducibility":{"generator":{"repositoryPath":"scripts/generate-lightgbm-football-prediction-model-backtest.py","publicPath":"/downloads/generate-lightgbm-football-prediction-model-backtest-1.0.0.py","sha256":"97452e6951374124c34fd3163d505b5889b69db18c99d7154d81c9e98310d27d"},"checkCommand":"python3 scripts/generate-lightgbm-football-prediction-model-backtest.py","rebuildCommand":".venv-model/bin/python scripts/generate-lightgbm-football-prediction-model-backtest.py --rebuild","writeCommand":".venv-model/bin/python scripts/generate-lightgbm-football-prediction-model-backtest.py --write"},"rights":{"aggregateLicense":"https://creativecommons.org/licenses/by/4.0/","sourceRightsStatus":"unknown/not asserted","rawSourceLicenseNotGranted":true,"rawRowsRedistributed":false},"claimsBoundary":{"liveAccuracyClaim":false,"profitClaim":false,"bettingAdvice":false,"productionModelActivated":false,"modelArtifactPublished":false},"limitations":["This is an aggregate research backtest for one league and ten seasons, not live forecast accuracy.","Latest-state CSVs lack correction observed-at revision history, so point-in-time provenance is incomplete and activation fails closed.","No raw source rows, fixture-level probabilities, fitted model or calibrator are redistributed.","Hit rate, Brier score, log loss and ECE do not establish betting profit, value or a universal edge."]}