Image shows horses racing on turf in the summer, with a fountain and a forest behind.

Building a De Facto Classification System for Handicap Races

In last month’s article, we examined whether the BHA’s official handicap race ratings offered more meaningful insight than the broad-brush class labels (Class 1 to 6). Handicap ratings, such as 0–105, define eligibility thresholds and implicitly signal the standard of competition. By segmenting these rating bands within each class and tracking movement between them, we uncovered a far more detailed picture of the competitive landscape — one that allowed us to define tiers within class and reveal subtle shifts in race quality that class labels alone obscure.

However, even this BHA-based method has shortcomings:

  • The BHA classification system is still not easy to follow
  • Weights are often raised artificially if no high-rated contenders enter a race.
  • Different authorities (like in Ireland) use alternative class and race ratings systems.
  • Rules around top weights and class boundaries have changed over time.
  • Most critically: the actual competitors, not the published rating band, are the most accurate measure of any race’s given quality or class.

So, what if we ignore the rating intended for a race and instead build a classification system based on the actual ratings of the runners? Specifically, we can use the highest-rated horse in each race as a proxy for its true level. This yields a consistent, scalable metric: a de facto race rating.

Step 1: Extracting the Top-Rated Horses and creating de facto race ratings

Fortunately, creating any alternative race rating or algorithm is easy using the Smartform database, and in the era of AI is even easy for the non-programmer.  So, we created a simple table (even if you don’t follow SQL, it’s not many lines of code, and ChatGPT or similar will be happy to explain it for you), joining runner and race-level data to extract each race's maximum official rating (OR) and assign that as the adjusted_race_rating, as follows:

SELECT

hri.runner_id, hri.race_id, drb.meeting_date, drb.country,

hri.won, hri.placed, hri.handicap, hri.class, hri.race_type,

hrb2.starting_price_decimal, hrb2.official_rating,

drr.max_adj_or AS adjusted_race_rating

FROM historic_runners_insights AS hri

JOIN daily_races_beta AS drb USING(race_id)

JOIN historic_runners_beta AS hrb2 USING(race_id, runner_id)

LEFT JOIN daily_races_race_ratings AS drr USING(race_id)

WHERE drb.meeting_date >= ‘2011-01-01'

This race-level metric is our anchor. The official rating of the top-weighted horse tells us what really ran at the top of the handicap. We refer to this as the adjusted race rating, and it forms the backbone of our simple alternative classification system.

Step 2: Creating Tiers Within Each Class

We wanted to mimic how BHA rating bands carve up handicaps (like 0–65, 0–75) but do so empirically — based on the actual distribution of adjusted race ratings within each class.

So, for each class, we divided the adjusted ratings into three quantile tiers: A (top third), B (middle third), and C (bottom third). Here we switched to R which makes this code even simpler (anything that involves statistics, R is your friend)

vals <- dt[class == cl, adjusted_race_rating]

qs <- quantile(vals, probs = c(0, 1/3, 2/3, 1))

This percentile-based slicing ensures that each tier adapts dynamically to the rating structure of that class. Class 4 races might span 75–90, while Class 6 races might cluster around 50–65 — each gets its own custom thresholds, giving us a powerful way to contextualise movement within and between classes.

Each runner now has a tier assigned, such as C4-Tier A or C6-Tier C, which reflects both class and competition strength.

Step 3: Summary of Tier Movement Performance

To validate our framework, we track how horses move between tiers from one run to the next — identifying if they are:

  • Rising to race in more competitive company
  • Dropping into easier fields
  • Remaining in the same tier group

We then compute win rates, place rates, and ROI for each direction of movement.


Even with no modelling, the data shows a clear directional bias: horses dropped in tier (i.e., entered in weaker races) win more often and lose less money than those going up in class.  There is nothing surprising in this conclusion, but the great news is that it aligns with what we expect from using the official handicap range for a race where available – except with our new ratings, we may be able to improve upon it and make it more extensible (eg. For Irish racing, or when the BHA band is unknown)

Step 4: Visualising Tier Transitions

To illustrate this further, we charted the ROI for each tier-to-tier transition using a heatmap.

ROI by tier movement

This plot confirms our table: tier drops dominate the profitable pockets. Horses going from C5-C to C5-B, or C6-A to C4-A, return surprisingly solid ROIs, even after accounting for sample size.

However, as per the last article, if we reduce sample sizes used, there are still some surprising pockets of profitability for jumps up in class that are not shown in this heatmap (due to having under 50 runners qualifying), usually due to exceptional, improving horses on the upgrade rather than seasoned handicappers.

Conclusion: A New Lens for Handicap Classification

This article was not written to chase a betting edge. Its aim was to build a data-driven classification framework that can augment or even replace rigid class labels in certain contexts.

By using the top official rating in each race, we defined a flexible race quality metric. From there, we constructed tiers using empirical quantiles — letting the data decide what counts as “high” or “low” class within each group.

The results show this system stands up to scrutiny:

  • It reproduces known class movement trends.
  • It isolates subtle, profitable tier switches that would otherwise be lost.
  • It opens the door to more precise private handicap ratings, speed figures, and race class analysis.

In short, we now have an alternative and more adaptive classification tool, built from the ground up, with just one simple assumption: what matters is not what class the race was supposed to be — but what actually ran.

Colin Magee

https://www.betwise.co.uk/smartform