underdog-lab / models /backtest_report.json
Moftah
Tune recency and add ensemble evaluation
b05ddd5
Raw
History Blame Contribute Delete
15.1 kB
{
"test_years": [
2018,
2019,
2020,
2021,
2022,
2023,
2024,
2025,
2026
],
"half_life_days": 180.0,
"total_test_matches": 8265,
"neutral_test_matches": 2660,
"folds": [
{
"test_year": 2018,
"train_matches": 2829,
"test_matches": 895,
"neutral_test_matches": 245,
"fitted_params": {
"intercept": 0.11480792473373332,
"elo_scale": 0.0020289671408902678,
"home_advantage_elo": 96.66494847608217,
"rho": -0.10325063882286081
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681347,
"brier": 0.6666666666666677,
"rps": 0.2349472377405314
},
"current": {
"log_loss": 0.9023609429969789,
"brier": 0.5327335616980057,
"rps": 0.17345577301787155
},
"fitted": {
"log_loss": 0.8573809678608475,
"brier": 0.5060835684039483,
"rps": 0.16129081700055478
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681078,
"brier": 0.666666666666666,
"rps": 0.23287981859410511
},
"current": {
"log_loss": 0.8834315475603629,
"brier": 0.5228932563420171,
"rps": 0.16550343317192542
},
"fitted": {
"log_loss": 0.8643892036200318,
"brier": 0.5157402284621485,
"rps": 0.1621838008080314
}
}
},
{
"test_year": 2019,
"train_matches": 3724,
"test_matches": 1151,
"neutral_test_matches": 353,
"fitted_params": {
"intercept": 0.07655270209555426,
"elo_scale": 0.0021520627736449803,
"home_advantage_elo": 104.35377163519401,
"rho": -0.09333056692211965
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681413,
"brier": 0.6666666666666591,
"rps": 0.24230138044212424
},
"current": {
"log_loss": 0.8056111798212608,
"brier": 0.4669964990094554,
"rps": 0.1542259079723281
},
"fitted": {
"log_loss": 0.7623887448033608,
"brier": 0.4436091602690203,
"rps": 0.14349092866806895
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681076,
"brier": 0.6666666666666633,
"rps": 0.23575700346238562
},
"current": {
"log_loss": 0.9035421998672475,
"brier": 0.5318945223380837,
"rps": 0.17509914280333874
},
"fitted": {
"log_loss": 0.8918610713311597,
"brier": 0.5250460714170974,
"rps": 0.17242426076070852
}
}
},
{
"test_year": 2020,
"train_matches": 4875,
"test_matches": 366,
"neutral_test_matches": 50,
"fitted_params": {
"intercept": 0.08882969340736556,
"elo_scale": 0.0021691318930572856,
"home_advantage_elo": 87.14925981971481,
"rho": -0.022682480183322452
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681076,
"brier": 0.6666666666666631,
"rps": 0.23451730418943506
},
"current": {
"log_loss": 0.9057996612707523,
"brier": 0.5350331124220667,
"rps": 0.17316146306007385
},
"fitted": {
"log_loss": 0.8880460395185107,
"brier": 0.5245472137423897,
"rps": 0.1687037965936433
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681091,
"brier": 0.666666666666667,
"rps": 0.24111111111111122
},
"current": {
"log_loss": 0.9038213868459777,
"brier": 0.5293136355860008,
"rps": 0.1820028424646411
},
"fitted": {
"log_loss": 0.8910762716994022,
"brier": 0.5204344668752423,
"rps": 0.1785644247095937
}
}
},
{
"test_year": 2021,
"train_matches": 5241,
"test_matches": 1131,
"neutral_test_matches": 372,
"fitted_params": {
"intercept": 0.09894524890544283,
"elo_scale": 0.002086079271632328,
"home_advantage_elo": 71.854097236582,
"rho": -0.07719874643271779
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681409,
"brier": 0.6666666666666596,
"rps": 0.24034777483053016
},
"current": {
"log_loss": 0.7771281328670586,
"brier": 0.4494107978358997,
"rps": 0.14187993077918162
},
"fitted": {
"log_loss": 0.7303453228987331,
"brier": 0.4226998299669378,
"rps": 0.12981376058981092
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681076,
"brier": 0.666666666666663,
"rps": 0.2396953405017915
},
"current": {
"log_loss": 0.7752914985633477,
"brier": 0.44538900996736913,
"rps": 0.1396289557189527
},
"fitted": {
"log_loss": 0.7424352387197773,
"brier": 0.4277416309134095,
"rps": 0.13198354285045627
}
}
},
{
"test_year": 2022,
"train_matches": 6372,
"test_matches": 985,
"neutral_test_matches": 381,
"fitted_params": {
"intercept": 0.08186883125481959,
"elo_scale": 0.002241281090538066,
"home_advantage_elo": 74.43744515107814,
"rho": -0.09478096119163382
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681373,
"brier": 0.6666666666666642,
"rps": 0.23953750705019464
},
"current": {
"log_loss": 0.8761344289777128,
"brier": 0.5133523843352195,
"rps": 0.1706774554386513
},
"fitted": {
"log_loss": 0.833657111049536,
"brier": 0.488081624725104,
"rps": 0.15921570644885422
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681076,
"brier": 0.6666666666666629,
"rps": 0.23665791776027933
},
"current": {
"log_loss": 0.8657594659735913,
"brier": 0.5056354267716627,
"rps": 0.16380135962473727
},
"fitted": {
"log_loss": 0.8416080431008207,
"brier": 0.49252926430948385,
"rps": 0.15831754337007392
}
}
},
{
"test_year": 2023,
"train_matches": 7357,
"test_matches": 1059,
"neutral_test_matches": 301,
"fitted_params": {
"intercept": 0.09590587998895488,
"elo_scale": 0.002136418937922069,
"home_advantage_elo": 80.8624491992637,
"rho": -0.01817599719515351
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681393,
"brier": 0.6666666666666617,
"rps": 0.2403210576015079
},
"current": {
"log_loss": 0.8164324637949784,
"brier": 0.4761251590147837,
"rps": 0.15479442502291524
},
"fitted": {
"log_loss": 0.78464414371364,
"brier": 0.45951898347685194,
"rps": 0.14722498614337617
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681078,
"brier": 0.6666666666666644,
"rps": 0.23791066814322662
},
"current": {
"log_loss": 0.8342171896940022,
"brier": 0.4853941084027272,
"rps": 0.15585628251257372
},
"fitted": {
"log_loss": 0.810164720860691,
"brier": 0.47283004252787125,
"rps": 0.15028013851884245
}
}
},
{
"test_year": 2024,
"train_matches": 8416,
"test_matches": 1292,
"neutral_test_matches": 496,
"fitted_params": {
"intercept": 0.135784402714181,
"elo_scale": 0.002062972962563908,
"home_advantage_elo": 86.575382309738,
"rho": -0.08165901384717028
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681438,
"brier": 0.6666666666666557,
"rps": 0.235595115239074
},
"current": {
"log_loss": 0.8526359403098033,
"brier": 0.49941486960892056,
"rps": 0.15859748254285871
},
"fitted": {
"log_loss": 0.8217710854614934,
"brier": 0.48382352093062225,
"rps": 0.15158860276123537
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681111,
"brier": 0.666666666666668,
"rps": 0.22939068100358312
},
"current": {
"log_loss": 0.8834120721785726,
"brier": 0.5214199459292324,
"rps": 0.16100681571387543
},
"fitted": {
"log_loss": 0.8697466901921638,
"brier": 0.5158284711675852,
"rps": 0.15862363420743003
}
}
},
{
"test_year": 2025,
"train_matches": 9708,
"test_matches": 1035,
"neutral_test_matches": 319,
"fitted_params": {
"intercept": 0.13154596600905927,
"elo_scale": 0.002036860739245838,
"home_advantage_elo": 81.47927268898184,
"rho": -0.11197216228672728
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681386,
"brier": 0.6666666666666625,
"rps": 0.24057971014492466
},
"current": {
"log_loss": 0.7880248007600671,
"brier": 0.4567673295937216,
"rps": 0.14619068635740878
},
"fitted": {
"log_loss": 0.7490973486843856,
"brier": 0.4377864820871933,
"rps": 0.13752468930374132
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681078,
"brier": 0.666666666666664,
"rps": 0.2349355625217695
},
"current": {
"log_loss": 0.8283942270934415,
"brier": 0.48593502970010505,
"rps": 0.15095687011092038
},
"fitted": {
"log_loss": 0.8006791374196626,
"brier": 0.4739426425559977,
"rps": 0.14522519677837512
}
}
},
{
"test_year": 2026,
"train_matches": 10743,
"test_matches": 351,
"neutral_test_matches": 143,
"fitted_params": {
"intercept": 0.14002451697534277,
"elo_scale": 0.002035817689422612,
"home_advantage_elo": 71.82836996410468,
"rho": -0.11346576437055059
},
"mean_scores": {
"uniform": {
"log_loss": 1.0986122886681076,
"brier": 0.6666666666666633,
"rps": 0.23789173789173768
},
"current": {
"log_loss": 0.8373907540633281,
"brier": 0.4844743976711385,
"rps": 0.15558773214039767
},
"fitted": {
"log_loss": 0.8010975523248702,
"brier": 0.46545804008130004,
"rps": 0.14724905524780943
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.098612288668108,
"brier": 0.6666666666666675,
"rps": 0.23931623931623966
},
"current": {
"log_loss": 0.836343534499324,
"brier": 0.48346963528722114,
"rps": 0.15755513737164847
},
"fitted": {
"log_loss": 0.8038171175434251,
"brier": 0.46573230600770044,
"rps": 0.15013688009902199
}
}
}
],
"overall_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681369,
"brier": 0.6666666666666613,
"rps": 0.2388586408550082
},
"current": {
"log_loss": 0.8329166311312037,
"brier": 0.48594465732512054,
"rps": 0.15722582282290334
},
"fitted": {
"log_loss": 0.7944622460875409,
"brier": 0.46492105251553006,
"rps": 0.14769412833147244
}
},
"neutral_mean_scores": {
"uniform": {
"log_loss": 1.0986122886681082,
"brier": 0.6666666666666647,
"rps": 0.23542188805346673
},
"current": {
"log_loss": 0.8541246747458301,
"brier": 0.4998279915063266,
"rps": 0.15912275114447516
},
"fitted": {
"log_loss": 0.8321846360289137,
"brier": 0.4888921301366171,
"rps": 0.15438117832100154
}
},
"calibration_home_win": [
{
"predicted_range": [
0.0,
0.1
],
"n": 564,
"predicted_mean": 0.04875281109133798,
"observed_home_win_rate": 0.05673758865248227
},
{
"predicted_range": [
0.1,
0.2
],
"n": 657,
"predicted_mean": 0.15091809523379324,
"observed_home_win_rate": 0.1917808219178082
},
{
"predicted_range": [
0.2,
0.3
],
"n": 846,
"predicted_mean": 0.25165383909489764,
"observed_home_win_rate": 0.3203309692671395
},
{
"predicted_range": [
0.3,
0.4
],
"n": 983,
"predicted_mean": 0.35131798427317085,
"observed_home_win_rate": 0.4659206510681587
},
{
"predicted_range": [
0.4,
0.5
],
"n": 986,
"predicted_mean": 0.4503357401106465,
"observed_home_win_rate": 0.5567951318458418
},
{
"predicted_range": [
0.5,
0.6
],
"n": 1005,
"predicted_mean": 0.5499731291510652,
"observed_home_win_rate": 0.6626865671641791
},
{
"predicted_range": [
0.6,
0.7
],
"n": 915,
"predicted_mean": 0.6504787505848735,
"observed_home_win_rate": 0.7289617486338797
},
{
"predicted_range": [
0.7,
0.8
],
"n": 859,
"predicted_mean": 0.7489004240433575,
"observed_home_win_rate": 0.830034924330617
},
{
"predicted_range": [
0.8,
0.9
],
"n": 745,
"predicted_mean": 0.8493848408730554,
"observed_home_win_rate": 0.8966442953020134
},
{
"predicted_range": [
0.9,
1.0
],
"n": 705,
"predicted_mean": 0.9430183315798715,
"observed_home_win_rate": 0.9475177304964539
}
],
"ship_gate": {
"fitted_beats_uniform_log_loss": true,
"fitted_beats_current_log_loss": true,
"fitted_beats_current_neutral_log_loss": true,
"ship": true,
"criterion": "The fitted Dixon-Coles Elo model must have a lower mean log loss than both the uniform baseline and the model previously shipped in world_cup/forecasting.py, both overall and on neutral-venue matches, across walk-forward test folds (2018-2026, no fold trained on its own test data)."
}
}