Joaquín Borja León Projects ES

Sports Value Detector

It prices football and tennis markets with its own models and compares them with the closing odds of sharp bookmakers, the toughest bar there is. No model beats it consistently, and the project says so plainly.

Personal project2026

Period
2026
Team
Personal project
Context
Free data, temporal validation and backtests
My role
Everything: data, models, backtests and dashboard
Tech stack
  • Python
  • pandas
  • NumPy
  • scikit-learn
  • SQLite
  • FastAPI
  • React
  • pytest

Distance to the closing line

Model log loss minus closing-line log loss. The shorter the bar, the closer to the market.

MarketGapModel and close
Over/under 2.5 goalsFootball, 5 leagues+0.0090.683 vs 0.674
1X2Football, 5 leagues+0.0150.993 vs 0.978
Match winnerTennis, ATP+0.0260.626 vs 0.604

Takeaway: the more liquid a market, the harder it is to approach. Any edge lives in lower-volume markets.

Out-of-sample validation: football 2025/26 against the Bet365 close and tennis 2025 against the Pinnacle close.

Real results from the project, as reported in its README.

What it does

  • Gathers 5 football leagues over 5 seasons (about 8,900 matches) and about 13,000 ATP matches, joining two sources with a 99.8% match rate.
  • Computes probabilities with its own models and compares them with the closing odds.
  • Logs odds for markets with no free history, such as corners and cards, to build its own.
  • A FastAPI and React dashboard to explore matches, backtests and calibration.

How it is built

  • No leakage. Features are computed in a single chronological pass, and tests truncate and perturb the future to check the past does not change.
  • Temporal validation on two separate held-out seasons, so no model is picked by luck.
  • Models: logistic regression for 1X2, Dixon-Coles for goals and surface Elo with logistic regression for tennis.
  • Skeptical of wins: a backtest with a +1.0% ROI turned out to be noise (+0.24 sigma) and was discarded.

In numbers

smallest gap to the close
+0.009
matches analysed
~22,000
automated tests
86

Let’s talk

I’m from Seville and now live in Madrid. I like things to work end to end: designing the system, writing the code, deploying it and measuring whether it really holds up.

If you’re looking for someone for backend, data or applied AI work, write to me and I’ll get back to you.