Sports Value Detector
Calcula sus propias probabilidades para mercados de fútbol y tenis y las compara con la cuota de cierre de casas de referencia, el listón más exigente. Ningún modelo la bate de forma consistente, y el proyecto lo cuenta tal cual.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.
- PeriodoPeriod
- 2026
- EquipoTeam
- Proyecto personalPersonal project
- ContextoContext
- Datos gratuitos, validación temporal y backtestsFree data, temporal validation and backtests
- Mi papelMy role
- Todo: datos, modelos, backtests y panelEverything: data, models, backtests and dashboard
- TecnologíasTech stack
- Python
- pandas
- NumPy
- scikit-learn
- SQLite
- FastAPI
- React
- pytest
Distancia a la línea de cierreDistance to the closing line
Log loss del modelo menos log loss de la cuota de cierre. Cuanto más corta la barra, más cerca del mercado.Model log loss minus closing-line log loss. The shorter the bar, the closer to the market.
| MercadoMarket | DistanciaGap | Modelo y cierreModel and close | |
|---|---|---|---|
| Más/menos 2,5 golesOver/under 2.5 goalsFútbol, 5 ligasFootball, 5 leagues | +0,009+0.009 | 0,683 frente a 0,6740.683 vs 0.674 | |
| 1X2Fútbol, 5 ligasFootball, 5 leagues | +0,015+0.015 | 0,993 frente a 0,9780.993 vs 0.978 | |
| Ganador del partidoMatch winnerTenis, ATPTennis, ATP | +0,026+0.026 | 0,626 frente a 0,6040.626 vs 0.604 |
Lectura:Takeaway: cuanto más líquido es un mercado, más difícil es acercarse a él. Si hay margen, está en los mercados con menos volumen.the more liquid a market, the harder it is to approach. Any edge lives in lower-volume markets.
Validación fuera de muestra: fútbol 2025/26 contra el cierre de Bet365 y tenis 2025 contra el de Pinnacle.Out-of-sample validation: football 2025/26 against the Bet365 close and tennis 2025 against the Pinnacle close.
Qué haceWhat it does
- Reúne 5 ligas de fútbol en 5 temporadas (unos 8.900 partidos) y unos 13.000 partidos de la ATP, cruzando dos fuentes con un 99,8 % de coincidencia.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.
- Calcula probabilidades con modelos propios y las compara con la cuota de cierre.Computes probabilities with its own models and compares them with the closing odds.
- Registra cuotas de mercados sin histórico gratuito, como córners y tarjetas, para construir uno propio.Logs odds for markets with no free history, such as corners and cards, to build its own.
- Un panel con FastAPI y React para explorar partidos, backtests y calibración.A FastAPI and React dashboard to explore matches, backtests and calibration.
Cómo está hechoHow it is built
- Sin fugas de información. Las variables se calculan en una sola pasada cronológica, y hay tests que truncan y alteran el futuro para comprobar que el pasado no cambia.No leakage. Features are computed in a single chronological pass, and tests truncate and perturb the future to check the past does not change.
- Validación temporal con dos temporadas distintas fuera de muestra, para no elegir un modelo por suerte.Temporal validation on two separate held-out seasons, so no model is picked by luck.
- Modelos: regresión logística para el 1X2, Dixon-Coles para los goles y Elo por superficie con regresión logística para el tenis.Models: logistic regression for 1X2, Dixon-Coles for goals and surface Elo with logistic regression for tennis.
- Escepticismo con los aciertos: un backtest con un ROI del +1,0 % resultó ser ruido (+0,24 sigmas) y se descartó.Skeptical of wins: a backtest with a +1.0% ROI turned out to be noise (+0.24 sigma) and was discarded.
En cifrasIn numbers
- distancia mínima al cierresmallest gap to the close
- +0,009+0.009
- partidos analizadosmatches analysed
- ~22.000~22,000
- tests automáticosautomated tests
- 86
GaleríaGallery




¿Hablamos?Let’s talk
Soy de Sevilla y ahora vivo en Madrid. Me gusta que las cosas funcionen de principio a fin: diseñar el sistema, escribir el código, desplegarlo y medir si de verdad responde bien.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.
Si buscas a alguien para backend, datos o IA aplicada, escríbeme y te respondo.If you’re looking for someone for backend, data or applied AI work, write to me and I’ll get back to you.