18+ • Bet Responsibly • Racing Alpha does not accept betsBeGambleAware.org
RacingAlpha
← All posts
18 May 2026 · 4 min read·Racing Alpha

How Racing Alpha v1.3 went from -13.7% to +8.0% ROI over 5,877 races

When we first turned the rating engine loose on six months of historical racing data, it lost 13.7% per pound staked.

That's not catastrophic — it's roughly the cost of backing the favourite blind — but it's not a product. So we kept iterating. This post is the honest account of what worked, what broke, and why the version we now run live (v1.3) tips fewer than one race in four.

The rating model

Racing Alpha assigns every runner a 0–100 score based on four inputs, each weighted:

  • Ratings (50%) — average of the horse's Official Rating, Racing Post Rating, and Topspeed, scaled to 0–100
  • Trainer form (20%) — trainer's win percentage over the last 14 days
  • Recent form (20%) — last six finishing positions, weighted toward most recent
  • Freshness (10%) — days since last run, sweet spot 14–28

It's intentionally simple. We want to understand why a horse rates highly, not feed numbers into a black box. The full algorithm is in src/lib/rating/score.ts — readable in 200 lines, with 25 unit tests.

v1.0 — "naïve top": -13.7% ROI

Tip the highest-rated runner in every race. Across 4,678 picks in 5,877 UK & Irish races (Nov 2025 – May 2026):

  • 24.6% strike rate
  • 55.8% top-3 rate
  • -13.7% ROI

The top-3 rate of 55.8% is the genuinely interesting number — random would be ~30%. The model identifies competitive horses. But identifying competitive horses isn't enough: the market already knows they're competitive, so the prices don't compensate.

v1.1 — EV-based selection: -38.0% ROI (broken)

The natural next step seemed to be value-based: compute each horse's AI-implied probability, multiply by the market price, pick the highest expected value.

It broke catastrophically. Strike rate dropped to 2.2%. Why?

When ratings are compressed (most races: scores 45–65), dividing each rating by the sum of ratings gives near-uniform probabilities. With uniform probabilities, the longest-priced horse always has the highest EV — because EV = p × price - 1 scales linearly with odds. So the model was effectively backing 25/1 shots assuming they had a 12% real chance. They didn't.

Lesson: rating-share is not probability. Uniform priors plus long odds = value trap.

v1.2 — segment filter + price band: +5.4% ROI

We went back to picking the top-rated runner — but added two filters:

  1. Segment filter — skip races where v1.0's historical ROI was worse than -8% (derived from segmented backtest data: heavy/firm going good, Class 1 & 3 weak, etc.)
  2. Price band — only tip when our top pick is priced between 3.0 and 15.0 decimal. Avoids efficient-market favourites and AI-low-conviction outsiders.

Across the same 5,877 races, this reduced picks from 4,678 to 1,419 but turned ROI positive: +5.4%.

v1.3 — drop Soft going: +8.0% ROI

v1.2's segmented breakdown showed one clearly losing segment — Soft going (-13.9% ROI over 167 picks). We removed it.

v1.3 final numbers (same six months, same races):

Strike Top 3 ROI P&L
v1.3 (live) 22.4% 55.0% +8.0% +100.09 pts

1,252 picks across 5,877 races. We tip fewer than one in four races. That's the point.

What the segmented breakdown showed

  • Best race type: Hurdle (~4.2% ROI on 555 picks)
  • Best going: Heavy (+13.8% ROI), Standard AW (+4.0%), Good in v1.3 windows (+40.8% but small sample)
  • Best class: Class 6 (+10.8% ROI on 388 picks), Class 5 (+3.3% on 472)
  • Region: GB and IRE both profitable (+5.3% / +6.4%)

The model's edge is on less-fancied meetings — extreme ground, lower classes, longer-priced runners where the market isn't sharp. That's where careful analysis beats Sunday morning glance-and-go pricing.

Honest caveats

  • Past performance is not a guarantee. Six months is enough to suggest the model has real signal, not enough to rule out variance. We'll re-backtest after each three months of live data.
  • SP is unforgiving. The +8.0% number assumes you bet at starting price. If you can shop for early prices (Best Odds Guaranteed, exchange tops), the live edge is likely higher than the backtest shows — closing prices typically tighten on quality horses.
  • The model knows nothing about ground changes after declarations, jockey injuries, pace scenarios, or course bias on the day. Those are human-judgement layers we haven't tried to encode.

What's next

  • Daily live tipping — one tip a day from v1.3, published before the off, tracked on the public ledger. Every win and every loss.
  • Bigger backtest window — 12 months once we have it, segmented by season.
  • v1.4 — likely tweaks: dynamic Class 1 exclusion, course-specific edges, possibly a wind-surgery flag. Probably no Soft-going inclusion until we find a sub-segment where it works.
  • Eventually, v2.0 — a trained model on 12+ months of historical data, replacing the heuristic. But only after v1.x has banked enough live data to compare against.

Until then, the model is what it is: a transparent weighted heuristic, dropping bad segments, picked at sensible prices. +8.0% ROI in the backtest, settled live every day from here.

Racing Alpha

This is analysis, not advice. 18+ only. Bet responsibly. Free help at BeGambleAware.org and GamCare.

#model#backtest#methodology