Market-Residual v1
Report #5 · 22.08.2026 23:37:26 · source backtest #6
Development rows11 229
Validation rows2 279
Vybraná regularizace100
Holdout readNE
Specifikace
| M0 | Opening no-vig market; nic se neučí. |
|---|---|
| M1 | logit(P_final) = logit(P_market) + δ, kde δ je silně regularizovaná logistická korekce. |
| Development | 2019/20–2023/24, rolling po sezonách. |
| Validation | 2024/25, bez refitu na validation datech. |
| Výběr | Výhradně development Brier score, při shodě development log loss. |
| ROI | Nevypočteno a nepoužito pro rozhodnutí. |
| Market feed | Football-Data agregovaný opening no-vig benchmark; bookmaker-specific historie zatím není integrována. |
Development rolling test
Každá sezona je predikována pouze z předchozích development sezon. V první sezoně M1 bezpečně používá M0, protože ještě nemá historické reziduální trénovací řádky.
| Model | Brier | Log loss | Calibration error | Počet |
|---|---|---|---|---|
| M0 – opening market | 0,2405 | 0,6738 | 1,18 % | 11 229 |
| Poisson v2 raw (kontext) | 0,2457 | 0,6845 | 0,78 % | 11 229 |
| M1 – market residual | 0,2405 | 0,6739 | 1,23 % | 11 229 |
Validation 2024/25
M1 je zde fitnutý pouze na development období. M0 zůstává hlavním benchmarkem; Poisson v2 je zobrazen jako kontext, nikoli jako nový kandidát k ladění.
| Model | Brier | Log loss | Calibration error | Počet |
|---|---|---|---|---|
| M0 – opening market | 0,2395 | 0,6718 | 1,44 % | 2 279 |
| Poisson v2 raw (kontext) | 0,2432 | 0,6795 | 0,91 % | 2 279 |
| M1 – market residual | 0,2396 | 0,6718 | 1,46 % | 2 279 |
Výběr regularizace
Validation hodnoty jsou pouze diagnostické a nemohly ovlivnit výběr.
| Regularizace | Vybraná | Development Brier | Development log loss | Validation Brier | Validation log loss |
|---|---|---|---|---|---|
| 100 | ANO | 0,2405 | 0,6739 | 0,2396 | 0,6718 |
| 10 | ne | 0,2406 | 0,6739 | 0,2395 | 0,6718 |
| 1 | ne | 0,2408 | 0,6745 | 0,2395 | 0,6717 |
| 0.1 | ne | 0,2425 | 0,6782 | 0,2394 | 0,6716 |
Paired bootstrap na validation
Rozdíl je vždy M1 minus comparator; záporná hodnota favorizuje M1. Interval je event-level paired bootstrap, 5 000 replikací, seed 42.
| Porovnání | Metrika | Bodový rozdíl | 95% CI | P(M1 lepší) |
|---|---|---|---|---|
| m1_minus_market | Brier | 0,0000 | 0,0000 až 0,0001 | 18,36 % |
| m1_minus_market | Log loss | 0,0000 | 0,0000 až 0,0001 | 18,78 % |
| m1_minus_poisson_v2 | Brier | -0,0036 | -0,0061 až -0,0012 | 99,84 % |
| m1_minus_poisson_v2 | Log loss | -0,0076 | -0,0128 až -0,0024 | 99,86 % |
Validation podle všech lig
| Liga | Počet | M0 Brier | V2 Brier | M1 Brier | M0 log loss | M1 log loss |
|---|---|---|---|---|---|---|
| England Championship | 542 | 0,2436 | 0,2449 | 0,2437 | 0,6802 | 0,6803 |
| England Premier League | 380 | 0,2423 | 0,2426 | 0,2423 | 0,6774 | 0,6775 |
| France Ligue 1 | 306 | 0,2386 | 0,2421 | 0,2386 | 0,6698 | 0,6698 |
| Germany Bundesliga | 296 | 0,2284 | 0,2380 | 0,2284 | 0,6489 | 0,6489 |
| Italy Serie A | 375 | 0,2436 | 0,2484 | 0,2436 | 0,6804 | 0,6804 |
| Spain La Liga | 380 | 0,2364 | 0,2411 | 0,2364 | 0,6653 | 0,6652 |
Audit modelu a metodika
{
"identifier": "football-ou25-market-residual-m1",
"offset": "logit(market_probability)",
"regularization": 100,
"observations": 11229,
"iterations": 3,
"feature_names": [
"v2_logit_minus_market_logit",
"expected_total_goals",
"history_min_log",
"history_gap",
"season_progress",
"lambda_imbalance",
"home_attack_strength",
"home_defense_strength",
"away_attack_strength",
"away_defense_strength",
"newcomer_home",
"newcomer_away",
"league__787ef53ef6aaa63e299c3de2e064d8ff0bacf00a",
"league__d6696a57d064756df605440f8ed399e496f2dbb3",
"league__03b21abbf0d4c7b4bf6276904abc71fd8e9781ba",
"league__029373fe60e47c2e06041eed872b1c9de9a083c6",
"league__67d96333beca94ff7f67a7a7d7f6e18f02f24be4",
"league__dae49a978b80c49996fb27e320b6f875a2c5a43e"
],
"means": {
"v2_logit_minus_market_logit": -0.025589252182191994,
"expected_total_goals": 2.724029866580132,
"history_min_log": 2.308639324886586,
"history_gap": 1.8755899902039361,
"season_progress": 0.5679568630991849,
"lambda_imbalance": 0.25540964041289643,
"home_attack_strength": 1.0063701305925206,
"home_defense_strength": 0.993371245626392,
"away_attack_strength": 1.0011201884037053,
"away_defense_strength": 0.9984326430584235,
"newcomer_home": 0.00792590613589812,
"newcomer_away": 0.007391575385163416,
"league__787ef53ef6aaa63e299c3de2e064d8ff0bacf00a": 0.23697568795084156,
"league__d6696a57d064756df605440f8ed399e496f2dbb3": 0.16475198147653397,
"league__03b21abbf0d4c7b4bf6276904abc71fd8e9781ba": 0.14622851545106422,
"league__029373fe60e47c2e06041eed872b1c9de9a083c6": 0.12957520705316591,
"league__67d96333beca94ff7f67a7a7d7f6e18f02f24be4": 0.16065544572090124,
"league__dae49a978b80c49996fb27e320b6f875a2c5a43e": 0.1618131623474931
},
"scales": {
"v2_logit_minus_market_logit": 0.2652799589669113,
"expected_total_goals": 0.31477620767306763,
"history_min_log": 0.6053417281130792,
"history_gap": 2.555069822643817,
"season_progress": 0.3020956237233434,
"lambda_imbalance": 0.34862375763544856,
"home_attack_strength": 0.11284634637830572,
"home_defense_strength": 0.09347544912142465,
"away_attack_strength": 0.11118499678026528,
"away_defense_strength": 0.09458250446873898,
"newcomer_home": 0.08867404438628966,
"newcomer_away": 0.08565593965680125,
"league__787ef53ef6aaa63e299c3de2e064d8ff0bacf00a": 0.4252272466236083,
"league__d6696a57d064756df605440f8ed399e496f2dbb3": 0.37095655551031453,
"league__03b21abbf0d4c7b4bf6276904abc71fd8e9781ba": 0.3533351620204935,
"league__029373fe60e47c2e06041eed872b1c9de9a083c6": 0.33583548468004865,
"league__67d96333beca94ff7f67a7a7d7f6e18f02f24be4": 0.3672128449293481,
"league__dae49a978b80c49996fb27e320b6f875a2c5a43e": 0.36827932719419537
},
"coefficients": {
"intercept": 0.004104725244877421,
"v2_logit_minus_market_logit": -8.574374360139057e-5,
"expected_total_goals": 5.396387835055347e-5,
"history_min_log": 2.4316644764893276e-5,
"history_gap": -4.817502237372142e-5,
"season_progress": 2.107563670457102e-5,
"lambda_imbalance": 2.743590846677354e-5,
"home_attack_strength": 1.155647225928113e-5,
"home_defense_strength": 1.1944462322382415e-6,
"away_attack_strength": 1.4618346062100222e-5,
"away_defense_strength": 2.946723504216908e-5,
"newcomer_home": -6.41830398086575e-6,
"newcomer_away": 1.901841546805263e-5,
"league__787ef53ef6aaa63e299c3de2e064d8ff0bacf00a": -5.4967798495927776e-5,
"league__d6696a57d064756df605440f8ed399e496f2dbb3": 8.521820451018749e-6,
"league__03b21abbf0d4c7b4bf6276904abc71fd8e9781ba": 5.288176869639538e-5,
"league__029373fe60e47c2e06041eed872b1c9de9a083c6": 4.593693340777117e-5,
"league__67d96333beca94ff7f67a7a7d7f6e18f02f24be4": 4.405852309642354e-6,
"league__dae49a978b80c49996fb27e320b6f875a2c5a43e": -4.21352614032761e-5
}
}
{
"M0": "Opening no-vig market probability; no fitted parameters.",
"M1": "logit(P_final) = logit(P_market) + intercept + regularized coefficients × standardized pre-match features.",
"features": [
"Poisson v2 logit difference versus market",
"Poisson v2 expected total goals and lambda imbalance",
"historical sample size and imbalance",
"season phase",
"home\/away attack and defence strength",
"newcomer flags",
"league one-hot features learned from development league names; no league removed after results were seen"
],
"rolling": "Development is evaluated season by season: each season is predicted from earlier development seasons, then added to the training history. Validation is predicted from all development rows without validation refit.",
"selection": "Regularization is selected only by development Brier score, then development log loss. ROI, thresholds, validation, and later holdout results are excluded.",
"market_role": "Market is the M0 baseline and the M1 logit offset. No bookmaker-specific historical feed is used.",
"candidates": [
"M0 market baseline",
"M1 market residual"
],
"deferred": [
"M2 expanded features",
"XGBoost\/LightGBM",
"paid bookmaker-specific odds history"
],
"holdout": "The later holdout season is not queried, read, trained on, tuned on, or evaluated in this report.",
"main_metrics": [
"Brier score",
"log loss"
],
"immutable_result": true
}