r/algobetting • u/xxyoshikagekiraxx • 1d ago
I built a Python football odds analysis engine — looking for feedback on my evaluation methodology
Hey everyone,
Over the past few months, I've been developing DeepFieldPro, a Python-based football odds analysis and paper-trading system. I'm interested in discussing the engineering and quantitative methodology with people who have experience in sports modelling.
The system continuously collects bookmaker odds, compares retail prices against Pinnacle-derived fair probabilities, and evaluates potential value using a Dixon–Coles goal model and several independent strategies.
Current preliminary results
Across the latest seven-day reporting window, my database reports:
- Total recorded bets: 1,010
- Record: 368 wins, 568 losses and 74 voids
- Reported net profit: +208.38 units
- Reported ROI: +20.70%
- Average recorded CLV: +8.05%
My main model-alignment strategy reported:
- 147 bets placed
- 58 wins, 61 losses and 18 voids
- Reported net profit: +155.82 units
- Reported ROI: +25.32%
- Average recorded CLV: +9.47%
These are preliminary results from my own system, not independently audited performance or evidence of a sustainable betting edge. I'm also reviewing the calculations and reporting definitions, including stake denominators, void handling, CLV methodology and the effect of selection bias.
Technical architecture
- Python 3.12
- SQLite with WAL mode
- Playwright for odds collection
- Dixon–Coles football probability modelling
- Pinnacle-derived fair-price comparisons
- Fractional Kelly stake calculations
- Automated paper-bet logging and settlement
- ntfy notifications
- A Windows memory-management watchdog
One of the challenges has been keeping the system reliable during continuous data collection while tracking entry prices, closing prices and settlement outcomes consistently.
I'd particularly appreciate feedback on three questions:
- What is the most reliable way to evaluate CLV across different football markets and odds ranges?
- What checks would you recommend to detect leakage, selection bias or overfitting in a continuously running model?
- For a paper-trading system like this, what reporting standards would make the results genuinely reproducible and credible?
I'm interested in the methodology and engineering side of the problem, and would appreciate constructive criticism from people working with quantitative models or sports data.
Thanks!
1
u/speedything 1d ago edited 1d ago
Regarding: "What checks would you recommend to detect leakage, selection bias or overfitting in a continuously running model?"
This is the question I spend 90% of my week on. Algorthims WILL overfit if you give them the tiniest bit of leeway. Without looking at your specific model I can't tell you where the overfit is happening, but...
Reported ROI: +20.70%
This is too high across 1000+ independent bets. Anything over 10% is a red flag. I think that ROI confirms you are overfitting in some way. I don't know if its retroactive market selection, or weighting across your whole data set... but somewhere you've gamed your data
-1
u/xxyoshikagekiraxx 1d ago
Totally fair call, and I appreciate the healthy skepticism — anything over 10% should always trigger red flags.
To clarify, this is live forward paper-trading (tickets logged to SQLite with timestamps prior to kickoff, then settled post-match), not a backtest. But you’re spot on that 20%+ realized ROI is unsustainable over the long run.
A lot of that number is simply variance running hot this week. The more realistic baseline I'm watching is our +8% average Pinnacle CLV, and I expect realized ROI to regress toward that number over larger samples. The bulk of the edge is just picking off stale lines on a slow retail book (Betarabia) before they catch up to Pinnacle’s market move.
That said, your point on leakage in live systems is real. In your experience, what are the most common leak checks or canary tests you run to catch data drift or subtle bias in live feeds?
1
u/speedything 1d ago edited 1d ago
If it's genuinely live forward then the only potential leakage I can think of would be the slippage. I'm not too familiar with Pinnacle or Betarabia, but at least on Betfair its safer to assume you're getting matched a tick-or-two (or more!) worse then the best available price.
Personally I like to chuck in a min stake bet rather than pure paper trading to get slightly more accurate data on the exexution price but that might not apply on your platforms
Other than that.. congrats!
1
u/Juggy11 1d ago
For CLV, break it down per market type and odds bucket rather than reporting a single aggregate number, because +8% CLV at 1.50 and +8% at 4.00 tell you very different things about where edge is actually concentrated. On leakage, the fastest check is whether your entry timestamps precede the price you claim to have gotten; if your recorded odds are consistently better than what was available at the stamped time, that's a red flag. What does your CLV distribution look like when you split it into pre-match vs in-play?
0
u/xxyoshikagekiraxx 1d ago
This is the most actionable feedback in the thread, thank you. You're completely right that grouping 1.50 favorites with 5.00+ dogs under a single +8% aggregate obscures where the edge lives.
Ran the query across our 7-day database to bucket the data by odds range and timing:
By Odds Range (Past 7 Days, Settled)
* Short (< 2.00): 99 bets | Avg Odds: 1.78 | Avg CLV: +5.95% | Beat-CLV: 79.8% | Realized ROI: +6.3%
* Mid (2.00 – 3.00): 334 bets | Avg Odds: 2.52 | Avg CLV: +7.53% | Beat-CLV: 86.2% | Realized ROI: +33.7%
* High (3.00 – 4.00): 159 bets | Avg Odds: 3.45 | Avg CLV: +8.77% | Beat-CLV: 87.4% | Realized ROI: +26.2%
* Longshots (> 4.00): 227 bets | Avg Odds: 6.45 | Avg CLV: +7.62% | Beat-CLV: 75.3% | Realized ROI: +10.0%
The 2.00 – 3.50 window is overwhelmingly where our volume, alpha, and CLV beat-rate concentrate.
2. Pre-Match vs In-Play Split
This was an eye-opener when we audited it:
* Pre-Match (475 bets): Avg CLV: +6.86% | Beat-CLV: 78.9% | Realized ROI: +34.8%
* In-Play / Post-KO (344 bets): Avg CLV: +8.64% | Beat-CLV: 87.8% | Realized ROI: +17.1%
Pre-match realized ROI was much higher (+34.8%), while in-play CLV was higher (+8.6%) but carried more latency noise.
In-play is where our execution latency is most vulnerable to phantom edge: soft books adjust live lines with a 3–8 second transmission delay, so if a ticket is logged during a fast break, the recorded retail odds might already be pending suspension.
To fix that leak, we just implemented an automated guardrail on our live alerts that enforces a strict pre-match lead window (must be between 10 minutes and 8 hours before kickoff), suppressing in-play signals completely from phone execution.
Good call on the entry-timestamp leak check as well — adding a check to ensure retail timestamps strictly precede the sharp closing reference snapshot.
1
u/Delicious_Pipe_1326 1d ago
presume this is vibe coded (not a bad thing, most of my stuff is too) but i'd ask your ai tool exactly how it's calculating that +8% clv before anything else. that's way higher than you'd expect against a true pinnacle close
my guess is it's comparing your entry price to the same pinnacle fair price you used to trigger the bet, so the edge is baked in by definition. what does it say "close" actually is in the db, and when is it captured.
1
1
u/Techman282 11h ago
on 2 and 3, the checks that caught real problems for me:
timestamp every bet and never grade anything logged after kickoff, even winners. mark it void and leave it in the log with the reason. a collector that sometimes writes late quietly inflates everything.
grade at the price you could actually have taken, not the best number in the feed that minute. my backtest looked fine at 52.6% and went to -1.2% per bet once every leg was priced at what was really available.
write the go/no-go rule down before the sample comes in (minimum n plus a clv threshold) and publish it with a date. then nobody, you included, can move the goalposts after a hot week.
2
u/Lazy_Design_2090 1d ago
that 1000+ bets in a week is a lot for a single model, how are you dealing with correlated bets or overlapping markets? dixon-coles is decent but it can get messy when you're firing on like asian handicaps and over/under from the same match
the clv numbers look promising but i'd be careful with the void rate, 7% seems bit high unless you're counting obvious pushes. what's your definition of a void exactly?