Horse racing as an ML ranking problem: 1.18M runners, walk-forward validation and a very strong market baseline [D]
Our take
The recent post detailing a long-term project applying machine learning to British and Irish horse racing, “Horse racing as an ML ranking problem,” is a fascinating case study in the challenges and potential rewards of applied AI in a complex, real-world domain. The author, u/gcampb41, highlights the inherent difficulties – variable field sizes, correlated competitors, missing data, and a remarkably efficient market – that make horse racing a surprisingly tough nut to crack for even sophisticated ML models. It's a problem space that resonates with efforts in other areas, like the intricate challenges of PhD branding question, where defining and communicating a specialized research area requires navigating a complex landscape of existing knowledge and competing narratives. What distinguishes this project is the sheer scale of the data – 1.18 million runner records spanning a decade – and the meticulous approach to walk-forward validation, ensuring rigorous testing and preventing data leakage.
The author's honesty regarding the market baseline is particularly insightful. Achieving decent discrimination with a model is one thing; extracting information the market *hasn't* already priced in is the real hurdle. The reported market-only AUC of 0.790 for win predictions underscores how efficiently the market already incorporates information, making it exceptionally difficult to consistently outperform it. This echoes the sentiment found in the Built a 100% Client-Side Vision Pipeline for Real-Time Chessboard & Multi-Board Detection post, where the author faced the challenge of building a complex system that still had to contend with the inherent limitations of the real-world data and environment. The reported strike rate of 43.5% for Top 1 selections after a recent data rebuild, while not a guaranteed win, demonstrates a tangible edge – a positive expected value – which is the ultimate goal in any predictive modeling application with financial implications. The author’s pragmatic approach, using the model’s outputs as a first layer of analysis alongside market data, is a sensible strategy for navigating this complex interplay.
This project’s significance extends beyond the world of horse racing. The challenges outlined – dealing with non-stationarity, missing data, and highly correlated variables – are common across numerous domains, from financial markets to healthcare. The author’s emphasis on chronological lineage and rigorous validation techniques offers valuable lessons for anyone working with time-series data and building predictive models. The use of a race-level confidence model, alongside the individual runner probability estimates, is a clever way to incorporate contextual information and refine predictions. The fact that such a substantial project has been largely conducted in relative obscurity speaks to the quiet dedication of many individuals exploring these problems, often without seeking widespread recognition. It reinforces the idea that impactful AI solutions can emerge from focused, persistent effort, even outside of the limelight of major tech companies.
Ultimately, the question remains: how scalable are these approaches? While 1.18 million runner records is a substantial dataset, the author’s acknowledgement of ongoing feature engineering and the potential for incorporating new data sources suggests there’s still room for improvement. The author's call for connection with others working on similar problems, whether in horse racing, betting exchanges, or other variable-sized ranking scenarios, is a compelling invitation for collaboration and knowledge sharing. Given the increasing availability of historical data and the continued advancements in ML techniques, what new approaches might emerge to further refine these models and consistently extract value from this challenging, yet surprisingly rich, data landscape?
Hi 👋 long time lurker
It’s been a few years since the last post about Horse Racing within this sub.
A few years ago I was reading a popular science book and came across the story Bill Benter and the statistical models his team developed for Hong Kong racing.
What stayed with me wasn’t simply the idea of using a model to gamble. Horse racing seemed like an unusually difficult applied ML problem: variable-sized fields, one winner per race, highly correlated competitors, missing and changing data, human decision-making, non-stationarity and an extremely efficient market baseline. What’s more, Hong Kong racing is a much smaller domain - two tracks, whereas in the UK & Ireland (where I am based and where my interest lies) there are over 80 tracks with a total track/distance/race type combinations exceeding over 900 configurations.
This ML problem became a personal project of mine called Hoofs, focused specifically on British and Irish racing.
I’ve assembled around 1.18 million historical runner records covering approximately ten years of racing. From this I’ve built a unified feature bank containing roughly 1,700 potential signals per runner, although individual models use much smaller selected subsets and not every newer data source is in the production models yet. I do have fairly novel data which I recently acquired and the feature engineering is what I’m going to be working on next.
The primary models estimate win and place probabilities at runner level, after which the runners are ranked within each race. I also have a separate race-level confidence model based on features such as field size, probability concentration, entropy and the separation between the leading runners.
The public Top 1–3 rankings are deliberately market-agnostic. Market information is evaluated separately as a benchmark and in experimental late-market models.
Everything is evaluated chronologically. Each walk-forward fold is trained only on earlier seasons, with out-of-fold calibration and explicit checks to prevent future information entering historical features.
I track AUC, log loss, Brier score and ranking metrics, but I also score the outputs in racing terms: how often the winner appears at rank 1, within the top three and within the top five.
On one large 2018–2025 benchmark covering approximately 886,000 runners and 94,000 races:
* Model-only win AUC: approximately 0.729
* Model-only place AUC: approximately 0.708
* Market-only win AUC: approximately 0.790
* Market-only place AUC: approximately 0.762
The strength of the market baseline has probably been the most difficult part of the project. Producing a model with decent discrimination is one thing; extracting information not already reflected in the price is quite another. Typically though I find positive EV before the market has fully formed.
I have been publishing daily reports for free, since the start of the year. And the whole project has developed quite a lot since then, introducing new models and different tankers etc and it’s constantly evolving.
I began noticing some degradation in the live strike rates. Going back through the pipeline exposed gaps and inconsistencies in parts of the historical data and feature coverage.
That led to a much larger rebuild: consolidating the raw datasets, rebuilding the feature bank, tightening the chronological lineage and retraining the model families.
The rebuilt reports had their first live day today. The Top 1 selection won 10 of 23 races after one non-runner, giving a 43.5% strike rate, while the winner appeared somewhere in the Top 1–3 in 16 of 24 races.
Practically speaking, I use the daily reports as first layer of analysis and I use market data as the second layer to dictate actual betting.
One reason I wanted to post this is that, I was surprised by how little discussion I could find about horse-racing models. I suspect there must be other people quietly experimenting with it.
I’d be particularly interested in speaking to anyone modelling horse racing, betting exchanges or other sports with similar structures. I’d love to hear from people working on variable-sized ranking problems, market prediction or large chronological tabular datasets etc
I’m not expecting anyone to reveal proprietary data 😉
[link] [comments]
Read on the original site
Open the publisher's page for the full experience