Methodology

The mechanism behind every claim on the landing page — model, tiers, comparison math, verification stack, code.

The model

Two predictors blended at training time:

Retrained weekly on every completed match across 280+ leagues via workers/jobs/weekly_retrain.py (Sunday 03:00 UTC). Promotion stays manual — a new model only goes live after a comparison report (scripts/compare_models.py) and the operator flips the MODEL_VERSION env on Railway.

Calibration

The raw model outputs are not betting probabilities yet — they tend to be over-confident at the tails. We run two calibration stages:

Platt weights refit weekly viascripts/fit_platt_live.py.

Bot strategies

Production runs ~16 paper-trading bots simultaneously, each with its own market / league / edge-threshold filter. They share the same prediction backbone; the filters differ:

How pick rows are computed

Every settled bet on the public ledger represents one row in our simulated_bets table. The pipeline writes a row before kickoff with:

After the match completes, settlement adds result, pnl, closing_odds, clv, clv_pinnacle. All historical rows are immutable — we never edit a settled bet.

How competitor comparisons work

For each competitor we pull their public per-bet history, filter to the same time window + same markets + same settlement state, and compute ROI assuming a €10 flat stake on every side. Scripts live in the engine repo:

The output of each audit lands at ledger/comparison_*.json — same hash committed by GitHub Actions, anyone can clone the repo and re-run.

Set your own stake

The landing comparison uses €10 flat as a clean apples-to-apples unit. Drag the slider below to see what the same matched-window ROI translates to at any per-bet stake.

Stake simulator

per bet · pnl scales linearly

OddsIntel · production
+€1
WinnerOdds
+€1
▲ +1
SignalOdds
€-0
▲ +1
DeepBetting
€-1
▲ +2
Tipstrr
€-1
▲ +2
Forebet
+€2
0

Per-bet stake assumed flat. Numbers scale linearly because ROI is a percentage — doubling the stake doubles every euro figure. For Kelly-sized comparisons see the next section.

Why flat stake, not Kelly

Conventional wisdom says Kelly sizing maximises bankroll growth when your edge estimate is well-calibrated. We checked. On the same n=1,181 production-cohort pre-match sample since 2026-05-04:

Flat beatsKelly by ~1.8pp on our current sample. Reason: Kelly sizes up the highest-edge picks, and our highest-edge picks are exactly where the model's known longshot miscalibration hurts most (see "Conditional miscalibration at high odds" in MODEL_WHITEPAPER §11). Kelly amplifies the bets we're most overconfident on.

We surface flat €10 as the publishable headline because (a) it honestly matches the comparison baseline, and (b) it's currently our best strategy. Once the calibration fix lands (CAL-ALPHA-ODDS), we'll re-run this comparison — Kelly should win after the high-odds correction.

Competitor stake methods, as best we can tell from their public surfaces: WinnerOdds publishes "unit" stakes (Kelly-like internally); SignalOdds shows EV%-weighted; DeepBetting shows per-confidence-tier flat; Tipstrr shows "level stakes" (flat); Forebet doesn't publish stake — we apply €10 flat at our end to settle their picks. Translation: our €10-flat comparison is internally consistent on OUR side; per-competitor stake differences add minor noise we can't correct for from outside their books.

Per-competitor caveats

Each competitor row on the landing is the headline number. A few have noteworthy structure worth knowing:

Why the comparison count differs from the hero count

The landing page hero shows 1,181 settled bets at +9.08% ROI— that's our full production cohort across 1X2 + O/U 2.5 + BTTS since the calibrated tier launched.

The comparison card on the landing shows 989 bets at +11.91% ROI — a subset, because SignalOdds and DeepBetting both publish 1X2 + O/U only, not BTTS. To stay apples-to-apples we drop BTTS from BOTH sides. Dropping BTTS actually lifts our ROI from +9.08% to +11.91% because our BTTS model is weaker than 1X2/OU (see Known Limitations in MODEL_WHITEPAPER.md). Both numbers are real; they measure different cohorts.

Why the window starts 2026-05-04: that's the day our calibrated bot tier launched. Going further back would mix in pre-calibration bets we don't deploy real money on. The window will grow as more weeks of live evidence accumulate.

Verification stack

Source code

Both repos are open source on GitHub:

What we're not

This is a research project that publishes its track record. It is not financial advice, not a guarantee of future returns, and not a substitute for your own judgment. Past results are real (every row is in the public ledger), but the future is variance. Bet responsibly.

Have a question this page doesn't answer? Open an issue on GitHub or message the Telegram channel.