Model Methodology
Full technical description of the prediction pipeline, calibration approach, and bet sizing logic. Published for transparency — no other retail betting tool does this.
1. Daily Pipeline
Every morning at 04:00 UTC the pipeline runs five sequential stages for all matches with kickoff that day:
- 1Fixtures. Fetch all matches from API-Football (280+ leagues). Store in matches table with team IDs, league, kickoff, venue, referee.
- 2Enrichment. Fetch standings, H2H records, team stats, and injury reports. Runs again at 12:00 and 16:00 UTC to pick up late injury news.
- 3Odds. Fetch pre-match odds from 13 bookmakers via API-Football bulk endpoint. Runs every 2 hours 07:00–22:00 UTC. Closing line snapshot taken at 13:30 and 17:30 UTC.
- 4Predictions. Run Poisson model + XGBoost ensemble for each match. Compute ensemble probability. Store to predictions table.
- 5Betting. Apply calibration + Kelly sizing. 16 strategies in our ensemble evaluate their configured markets independently. Qualifying bets are stored to simulated_bets — each tagged with the originating strategy so per-strategy ROI + CLV remain auditable on /performance.
2. Prediction Model
2a. Poisson Model
Goals for each team are modelled as independent Poisson processes:
λ_away = attack_away × defence_home
P(score = k) = e^(−λ) × λ^k / k!
A Dixon-Coles correction (ρ = −0.13) reduces systematic overestimation of 0-0 and 1-0 draws. Attack and defence parameters are estimated from the last 10 matches with an exponential decay weighting (recent matches count more).
The Poisson model is computed for every match regardless of data availability — it serves as the baseline and as the fallback for leagues where XGBoost has insufficient training data.
2b. XGBoost Classifier
A gradient-boosted tree trained on 95,000+ historical matches predicts 1X2 and Over/Under outcomes. Training features include:
ELO ratings
Home/away ELO from an independent system updated after every match
Form PPG
Points per game (last 10 matches, exponentially weighted)
Form slope
Is form trending up or down? Linear regression over last 6 results
Venue splits
Home/away form computed separately — some teams are dramatically better at home
Rest days
Days since last match for each team. Fatigue and rotation risk
League standings
Position, GD, pts gap to top/relegation. Motivation proxy
H2H record
Last 10 head-to-head results and typical goal counts
Injuries
Count of first-team players out, severity-weighted
Market structure
Pinnacle/best-price implied probability as a feature — uses market wisdom
Bookmaker agreement
Spread across bookmakers. High divergence = uncertainty
XGBoost is only deployed for Grade A/B matches (European top leagues + secondary leagues with sufficient historical data). Grade C/D matches use Poisson only.
2c. Ensemble Blending
The final ensemble probability blends Poisson + XGBoost using a tier-specific alpha parameter:
Tier 1 (Premier League, etc.): α = 0.20 — trust market more
Tier 2 (Championship, etc.): α = 0.30
Tier 3 (lower leagues): α = 0.50
Tier 4 (minor leagues): α = 0.65 — trust model more
Lower alpha in efficient markets (Premier League) reflects the bookmakers' superior information. Higher alpha in less liquid markets (lower league) reflects that our Poisson model likely captures information the bookmaker's line doesn't fully price in.
2d. Platt Scaling (Post-hoc Calibration)
After blending, a Platt sigmoid correction is applied per market using parameters fit on settled predictions:
α and β are fit by minimising log-loss on settled 1X2 predictions every Sunday. Requires 100+ settled predictions per market. This corrects systematic over- or under-confidence that survives the blending step.
3. Signal Collection (58 per match)
Separately from the model, the pipeline collects up to 58 signals per match into a normalised EAV (entity-attribute-value) table. Signals inform the Intelligence Summary on the match detail page and feed the meta-model (training, not yet live).
Market signals (8)
Opening implied probs, bookmaker disagreement spread (BDM), overnight line move, odds volatility (24h std dev), steam move detection
Team quality signals (22)
ELO rating, form PPG (home/away/overall), form slope, venue split, season goal stats, xG, clean sheet rate, scoring rate
Context signals (10)
Fixture importance index, motivation asymmetry, rest day differential, referee cards avg, referee home-win%, referee Over 2.5%
News & injury signals (6)
Home/away injury count, away injury severity, suspension risk, lineup confirmation flag, AI news impact score
Model signals (4)
Poisson home/draw/away probs, XGBoost probability where available
Live signals (8)
Minute, score, xG pace, shots on target, possession, red cards — updated every 30s during matches
4. Bet Sizing (Kelly Criterion)
Stakes are sized using fractional Kelly:
stake = kelly × 0.15 × bankroll × data_tier_multiplier
max_stake = 1% of bankroll
Kelly fraction
0.15× (quarter-Kelly)
Conservative — reduces variance, prevents ruin on model error
Max stake cap
1% bankroll
Hard cap regardless of Kelly output. Prevents single-match blow-ups
Grade A
1.0× multiplier
Full tier weight for top-league matches with rich feature sets
Grade B
0.75×
Reduced stake for Poisson-only matches
Grade C
0.5×
Minimal stake for AF-prediction-only matches
Minimum stake
€1.00
Below this threshold the bet is skipped — micro-stakes add no useful signal
5. Track Record & CLV
The track record page shows every settled prediction — no cherry-picking, no removing losses. The two metrics we use to evaluate model quality:
Hit Rate
What % of predictions were correct. A useful sanity check — a profitable model must be right more often than the odds imply (or right enough when it is right).
Closing Line Value (CLV)
Did we get better odds than the closing price? CLV is the gold standard metric in professional betting: a model that consistently beats the closing line is finding real value, even when short-term results disappoint due to variance.
CLV = (entry_odds / closing_odds) − 1
Positive CLV over a large sample is a stronger predictor of long-term profitability than raw hit rate. Results take hundreds of bets to converge; CLV signal appears much sooner.
5b. What Variance Actually Looks Like
Every honest value-betting service shows drawdowns. WinnerOdds — one of the longest-running tracked services in this space — publicly discloses a worst drawdown of −39%in October 2019. A model that has never had a losing month is either cherry-picking its public record or hasn't been running long enough.
Our current drawdown profile (sampled live from simulated_bets as of 2026-06-05):
Worst drawdown to date
−€398 over 9 days (peak 2026-05-13 +€404 → trough 2026-05-22 +€6). One bad nine-day stretch in May wiped out the cumulative May peak. Currently ~€100 below the May peak; not yet recovered.
Worst week
Week 21 of 2026 (May 18–24): −€204 across 758 bets. This is what a value-betting bad week looks like — normal variance, not a broken model. CLV stayed positive throughout.
Important caveat: our public chain only has ~35 days of settled bets so far. Drawdown numbers have meaningful statistical weight only after 500+ settled bets. Numbers above will move materially as the chain extends — by design. The chain is published live and never edited; you can inspect every individual bet at /performance.
Honest disclosure on verification: these numbers are self-reported. We are the ones running the database the chain lives in. Independent third-party verification — via Bet-Analytix or Smart Betting Club — is on the roadmap and intentionally gated until our v2-model cohort has stabilised, because the first verified number we publish becomes a permanent public anchor. We'd rather publish a verified honest number than an unverified flattering one.
Why we publish this: drawdown isn't evidence the model is broken — it's the cost of being a +EV bettor. CLV is the leading indicator of edge; drawdown is the lagging price you pay for short-term variance. Services that hide drawdowns are either lucky-sampled or fabricated.
6. What We Don't Do
No survivor bias
The track record includes every bet placed. We do not remove underperforming strategies or retroactively adjust the model based on results — losing strategies stay visible on /performance for the full transparency story.
No selective publishing
Predictions are generated and stored before kickoff. They cannot be modified after the result is known.
No guarantee of profit
Expected value betting is long-run positive, but variance over short samples is high. Any 50-bet sample can be negative even with a genuine edge.
No single-source data
Odds are sourced from 13 bookmakers via API-Football. Settlement results are cross-checked against ESPN as a backup. No single data source failure breaks the pipeline.