FOOTBALLBETTING HUB

Evidence

This half asked whether a model can beat the closing line. It cannot — which is exactly why the other half uses the line instead of fighting it.

67,308 matches40 leaguesclosing oddswalk-forward
Return on investment
-4.49% 95% CI [-5.98%, -3.02%] over 19,211 bets
Reliably loses money
The interval lies entirely below zero.
Bets placed
19,211
67,308 matches
Win rate
45.5%
8,742 winners
Net P&L
-8,625
staked 192,110
Average claimed edge
6.0%
model vs de-vigged price

Equity curve

Cumulative profit, every bet in order. A flat-to-drifting line on a sample this size is the signature of no edge — not of bad luck.

By period

The same bets split into four consecutive stretches. An edge that only exists in one of them is a story about that period.

What the backtest actually says

The two findings that settle it

Is the model better than picking at random?

The model does 4.20 points WORSE than random selection
-4.20pp vs random

Random selection inside the same odds band, on the same fixtures, at the same best-of-bookmaker prices. It lands near zero rather than at a loss because shopping for the top price already strips out the bookmaker margin. The model finishes below that line, which means its selections are actively harmful rather than merely weak: it keeps backing the side the market prices as too short, and the market keeps being right. Every time this model 'finds value', what it has really found is its own largest error.

Selection ruleBetsROI
Random pick in band44,895-0.29%
This model19,211-4.49%
Difference-4.20pp

Model vs the closing price

The market forecasts 3.0% better than the model
0.6154 vs 0.5972

Brier score over every scored match, lower is better. This is the cleanest test there is: it uses all matches rather than only the ones the model liked. The closing price is the better forecaster. If the model cannot out-predict the market, no staking rule or filter will turn it into profit — the edge has to come from forecasting, not from bet selection.

Brier (lower better)Log loss
Model0.61541.0261
Market close0.59720.9990

Three rescues that did not survive

Do the filters survive out of sample?

exclude FL1 + cap edge at 8%: +0.45 points out of sample
+0.45pp out of sample

Filters like “drop this league” or “cap the edge” are chosen by a human looking at results, which is exactly how a backtest gets flattered. So the sample is split by date: the filters were picked on the first half and are scored here on the second, which never influenced them. The gain survived, which is the encouraging direction — a rule that only works on the data that produced it is a description of the past. Note the out-of-sample interval still includes zero, so this is a promising direction, not a demonstrated edge.

HalfSpanBetsROI beforeROI afterGain
Train (chose the filters)Apr 2021-Mar 20247,466-1.76%-1.74%+0.02pp
Test (never consulted)Mar 2024-Oct 20267,535-7.25%-6.80%+0.45pp

Small disagreements beat big ones

Lowest-edge bets returned -4.27%, highest-edge -4.73%
low -4.3% vs high -4.7%

Every bet split into ten equal groups by the edge the model claimed. The ranking is inverted: the model's *small* disagreements with the market pay, and its large ones lose. That is not a paradox — it follows from the market being the better forecaster. When this model says it is twenty points better than the closing line, the overwhelmingly likely explanation is that the model is wrong, not that the market is. A big claimed edge is a error signal, so capping edge from ABOVE is the counter-intuitive move that survives out-of-sample testing.

DecileEdge rangeBetsWin rateROI
13.0-3.4%1,92246.1%-5.23%
23.4-3.8%1,92146.3%-3.93%
33.8-4.2%1,92146.6%-3.67%
44.2-4.7%1,92145.5%-5.14%
54.7-5.3%1,92146.0%-3.83%
65.3-5.9%1,92146.2%-3.47%
75.9-6.7%1,92144.8%-5.44%
86.7-7.8%1,92145.4%-4.11%
97.8-9.5%1,92144.0%-6.62%
109.5-25.6%1,92144.1%-3.46%

Does a wider odds band help?

Every widening of the band made returns worse
corr(width, ROI) -0.80

The same model and edge threshold, run over different price ranges. The band is not an arbitrary restriction — it is a filter on the model's own worst errors. Removing it entirely (1.01-99.00) drops ROI to -6.92% with an interval that excludes zero, i.e. a reliably losing strategy: at extreme prices the model backs long-odds home underdogs, which is exactly its known bias. A narrow band buys accuracy at the cost of sample size. Note this table is a diagnostic, not a tuning dial — picking the best-scoring row would be fitting the parameter to the test set.

Odds bandBetsWin rateROI95% CI
1.70-2.005,57552.1%-2.26%[-4.7%, +0.2%]
1.60-2.5019,21145.5%-4.49%[-6.0%, -3.0%]
1.50-3.0028,93542.0%-4.89%[-6.2%, -3.6%]
1.01-99.0078,54427.9%-6.92%[-8.2%, -5.7%]

Where the bets actually came from

Which market is worth modelling?

O/U 2.5 gives the largest sample (14,775 bets)
2 markets

Totals (Over/Under) and 1X2 are separate bets on the same model. Totals produce far more qualifying selections, because a two-way market prices closer to even money more often — which means a much tighter confidence interval for the same seasons of data. Neither market's interval clears zero, so neither has demonstrated an edge — but the totals interval is narrow enough that a real edge of a few percent would have shown up by now.

MarketBetsAvg oddsWin rateROI95% CI
O/U 2.514,7752.0946.4%-4.22%[-5.9%, -2.5%]
1X24,4362.2542.4%-5.39%[-8.7%, -2.2%]

Which leagues carry the result?

8 of 39 leagues finished positive
8/39 positive

Each competition is modelled separately, so these are independent-ish samples of the same strategy. If profit comes from one league only, you have found a quirk of that league — or noise — rather than a method. Per-league samples are small; treat the ordering as indicative.

LeagueBetsWin rateROI
IRL-PREMIERD7450.0%+11.12%
CHN-SUPERLEA10450.0%+7.91%
ROU-SUPERLIG12345.5%+2.57%
ARG-LIGAPROF10343.7%+2.17%
FIN-VEIKKAUS8446.4%+1.60%
SWZ-SUPERLEA18146.4%+0.30%
BRA-SERIEA15644.9%+0.12%
GSL56547.1%+0.09%
BL262248.2%-0.11%
PPL69445.7%-0.55%
SC345149.2%-0.81%
ENL130548.1%-1.60%
SPL48746.2%-1.77%
PL77047.0%-2.04%
EL2120347.1%-2.15%
PD72145.2%-2.86%
BJL74746.2%-3.06%
BL164448.6%-3.80%
MEX-LIGAMX14343.4%-4.32%
ELC129845.1%-4.74%
SA81444.7%-4.75%
SD88646.4%-5.07%
FL277746.3%-5.15%
TSL71944.6%-6.09%
SB79844.5%-6.58%
SC243846.1%-6.82%
DED48944.8%-7.40%
NOR-ELITESER12642.9%-7.58%
SWE-ALLSVENS12843.0%-7.67%
EL1134643.4%-7.96%
SCH45144.6%-9.80%
USA-MLS36641.0%-9.81%
FL177642.1%-10.49%
RUS-PREMIERL13040.8%-11.88%
JPN-J1LEAGUE12440.3%-12.61%
POL-EKSTRAKL17038.8%-13.51%
ARG-COPADELA5236.5%-15.50%
AUT-BUNDESLI7436.5%-18.74%
DNK-SUPERLIG7231.9%-30.61%

What held up anyway

Does a bigger edge pay better?

Higher model edge did produce higher returns
rank corr +0.78

Bets grouped by the edge the model claimed at the time. If the edge number carries information, ROI should climb down this table. It does, which is weak evidence the estimate is meaningful.

Claimed edgeBetsWin rateROI
3-5%869946.0%-4.67%
5-8%692145.5%-4.37%
8-12%292044.4%-4.62%
12%+67144.1%-2.87%

Is the model calibrated?

Predictions are off by 1.5 percentage points on average
1.5pp mean gap

Every model probability bucketed against how often that outcome actually happened. A calibrated model sits on the diagonal. Miscalibration matters more than accuracy here: a model that says 45% when the truth is 40% will invent edge on exactly the bets it feels most confident about.

PredictedCasesAvg predictedActually happenedGap
5-15%2,39012.2%6.8%-5.4pp
15-25%36,95322.1%20.4%-1.7pp
25-35%77,75828.9%28.0%-0.9pp
35-45%36,12239.9%40.0%+0.2pp
45-55%21,43049.2%52.6%+3.4pp
55-65%6,36358.8%66.0%+7.2pp

Is the result stable over time?

ROI swings 7 points between periods
7pt spread

The sample split into four equal blocks by date. A real edge is boring — similar returns throughout. The periods broadly agree, which is what you want to see.

PeriodSpanBetsROI
Period 1Apr 2021 - Jan 20234803-1.74%
Period 2Jan 2023 - Mar 20244803-1.41%
Period 3Mar 2024 - Aug 20254803-7.94%
Period 4Aug 2025 - Oct 20264802-6.87%

By market

MarketBetsWin rateAvg oddsROI95% CI
O/U 2.514,77546.4%2.09-4.22%[-5.9%, -2.5%]
1X24,43642.4%2.25-5.39%[-8.7%, -2.2%]

Odds band sweep

Widening the band buys sample size and costs accuracy, monotonically. It is a diagnostic, not a dial: picking the best-scoring row would be fitting a parameter to the test set.

BandBetsWin rateROI95% CI
1.70-2.005,57552.1%-2.26%[-4.7%, +0.2%]
1.60-2.5019,21145.5%-4.49%[-6.0%, -3.0%]
1.50-3.0028,93542.0%-4.89%[-6.2%, -3.6%]
1.01-99.0078,54427.9%-6.92%[-8.2%, -5.7%]