Hypotheses · story · H-baef90d8
Sharpen: never-involved heavy beatings by horses with a recent close finish
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
Part of the thread “H36: pulled up after being held up” 60 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- sharpen
- Created
- 17 Oct, 04:06
- Tests logged
- 16
Reasoning
Why this hypothesis exists: what the lab saw, the question it asked, the mechanism it proposed, what it predicted, and the result that would prove it wrong. Written before the test was run.
- Observed
- H-f956317c (Test-mechanism: big-field heavy beatings where the horse was never inv) survived falsification: 5 of 6 attacks left it standing; it is frozen for its one vault query. O-298ba57a
- H-f956317c (Test-mechanism: big-field heavy beatings where the horse was never inv) passed discovery: A/E 1.32 on 1215 bets (p 0.005), same-race control 0.98. O-86a41341
- AskedIs the never-involved lift strongest when the heavy beating was a one-off, meaning the horse finished close in one of its other recent runs? testing
- MechanismIf the margin was inflated because the horse was not ridden out, a horse that recently finished close has ability that the latest result hides. A horse with no close runs is more likely to be truly out of form, and for that horse 'never involved' is an accurate description.
- Why the market misses itPrices are drawn mostly from the latest run, and a 20-length 'never involved' line looks worse than an older close finish looks good. The one-off bad run is overweighted.
- Predictedpositive, A/E 1.35 to 1.60 on 300+ bets, above the parent's 1.324
- Falsified ifA/E no higher than the same rule with best_last3_beaten > 6, or A/E below 1.15
- Rule sketch
Mechanism and rationale
If the margin was inflated because the horse was not ridden out, a horse that recently finished close has ability that the latest result hides. A horse with no close runs is more likely to be truly out of form, and for that horse 'never involved' is an accurate description.
The rule
is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND last_field_size >= 14 AND last_never_involved = 1 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6Reads: is_handicap, race_type, last_beaten_lengths, last_field_size, last_never_involved, best_last3_beaten
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 59fb647c5272eee9ce6a0fbe616768d72651df6a3eb7cb1d699c50ecd6e5a646
- Frozen
- 17 Oct, 04:10
- Nothing in the definition can change after this.
- Confounders
- best_last3_beaten and last_beaten_lengths both start on 2025-11-01, so the window is short; best_last3_beaten is null for horses with few runs, so those horses drop out non-randomly
- the close run may have come in a lower class or a smaller field, which would overstate the horse's ability
- the horse's handicap mark may have changed since the close run (a rise after it, or a drop after the heavy beating)
- the sample thins quickly, especially in GB, and a close-finish subset of the parent may not reach 150 bets
- the close run may have been over a different trip or on different ground, so the heavy beating could reflect conditions rather than a quiet ride
- best_last3_beaten may count a win as 0, which mixes recent winners (who carry a higher mark) in with close losers
- Control
{ "description": "The other runners in the same races should score close to 1.0, which shows the lift is not a property of the races. The comparison that tests the mechanism is the same parent with no close recent finish (best_last3_beaten > 6). The hypothesis needs the close-finish group to beat that comparison clearly. If both groups score about the same, the recent close finish carries nothing beyond the parent's never-involved flag.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND last_field_size >= 14 AND last_never_involved = 1 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6" }
Discovery result
pass broad rule · 17 Oct, 04:09
- Bets
- 236
- 33 winners
- A/E
- 1.72
- 95%: 1.18 to 2.41
- SP return
- +33.2%
- level stakes
- Betfair SP return
- +83.9%
- 236 bets with a BSP
Strike rate 14.0%. p = 0.0026. Same-race control: the other runners in these races had A/E 0.95, so the selection beat its own races. Zone: discovery. Evaluator eval-1.0, data 6a4e98be18e83933
By period
Falsification
Each attack is a deliberate attempt to kill the idea. 6 of 6 survived.
- perturbation: Tighter close-finish and margin cuts (best_last3 <= 4.5, beaten >= 24)pass
177 bets · A/E 1.83 (1.21 to 2.66) · control 0.94 · 17 Oct, 04:10
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-27791.63after 2026-04-27982.00Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: Looser cuts (best_last3 <= 7.5, beaten >= 16, field >= 12)pass
470 bets · A/E 1.43 (1.08 to 1.86) · control 0.97 · 17 Oct, 04:10
Sealed holdout (vault)
Not queried. Only a frozen idea can spend its one query against the 2020-25 holdout.
Forward record
- forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}info
0 bets · · 17 Oct, 04:10
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: >= 20 -> 16 (-20%)pass
279 bets · A/E 1.48 (1.02 to 2.07) · control 0.97 · 17 Oct, 04:10
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-271301.46after 2026-04-271491.49Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: >= 20 -> 24 (+20%)pass
208 bets · A/E 1.79 (1.21 to 2.55) · control 0.94 · 17 Oct, 04:10
Breakdown
Lineage
Agent runs
designer v1ok · 29s · 17 Oct, 04:07
Output (schema-checked)
{ "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND last_field_size >= 14 AND last_never_involved = 1 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6", "refinements": [ { "label": "below 16/1", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND last_field_size >= 14 AND last_never_involved = 1 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6 AND sp_decimal < 17" } ], "control": { "description": "The other runners in the same races should score close to 1.0, which shows the lift is not a property of the races. The comparison that tests the mechanism is the same parent with no close recent finish (best_last3_beaten > 6). The hypothesis needs the close-finish group to beat that comparison clearly. If both groups score about the same, the recent close finish carries nothing beyond the parent's never-involved flag.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND last_field_size >= 14 AND last_never_involved = 1 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6" }, "pass_criteria": { "min_bets": 150, "min_ae": 1.1, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.05, "max_p": 0.2 }, "confounders": [ "best_last3_beaten and last_beaten_lengths both start on 2025-11-01, so the window is short; best_last3_beaten is null for horses with few runs, so those horses drop out non-randomly", "the close run may have come in a lower class or a smaller field, which would overstate the horse's ability", "the horse's handicap mark may have changed since the close run (a rise after it, or a drop after the heavy beating)", "the sample thins quickly, especially in GB, and a close-finish subset of the parent may not reach 150 bets", "the close run may have been over a different trip or on different ground, so the heavy beating could reflect conditions rather than a quiet ride", "best_last3_beaten may count a win as 0, which mixes recent winners (who carry a higher mark) in with close losers" ], "mechanism": "A 20+ length beating in a big field marked 'never involved' often means the horse was not asked for an effort once it was out of contention, so the margin overstates how poorly it ran. If the horse finished within 6 lengths in one of its other two recent runs, it has shown ability that the latest result hides, and the heavy beating is more likely to be a one-off. A horse with no close finish is more likely to be truly out of form, and for that horse 'never involved' is an accurate description.", "market_miss": "Prices lean mostly on the latest run. A 20-length 'never involved' line looks worse than an older close finish looks good, so the market overweights the one-off bad run and lets the horse drift beyond its true chance.", "prediction": { "direction": "positive", "size": "A/E about 1.35 to 1.60, above the parent's 1.324, on whatever volume the post-2025-11 window allows (target 300+ bets)", "falsified_if": "A/E below 1.15, or no higher than the control rule (same parent with best_last3_beaten > 6)" }, "notes": "I kept the draft rule unchanged. Every column is pre-off. last_beaten_lengths has the same 2025-11-01 start as best_last3_beaten, so this rule covers the same window as its parent and adds no extra loss of sample. The only refinement is the under-16/1 cut (sp_decimal < 17), because the family findings put the parent's lift below 16/1. I raised discovery min_ae to 1.10 because a sharpen should clear its parent's control. If the result is thin but points the right way, it should go to falsification and forward tracking rather than be killed for its size." }
Timeline
Job 2818 finished
· engine:compute-1
hypothesis note H-baef90d8
· engine:perturb
perturbation result for H-baef90d8 (neighbour: <= 6 -> 7 (+20%)): pass
· engine:perturb
perturbation result for H-baef90d8 (neighbour: <= 6 -> 5 (-20%)): pass
· engine:perturb
perturbation result for H-baef90d8 (neighbour: >= 14 -> 17 (+20%)): pass
· engine:perturb
perturbation result for H-baef90d8 (neighbour: >= 14 -> 11 (-20%)): pass
· engine:perturb
perturbation result for H-baef90d8 (neighbour: >= 20 -> 24 (+20%)): pass
· engine:perturb
perturbation result for H-baef90d8 (neighbour: >= 20 -> 16 (-20%)): pass
· engine:perturb
compute-1 took job 2818 (mutate, attempt 1)
· compute-1
Job 2817 finished
· engine:compute-1
forward result for H-baef90d8 (forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 2817 (forward_check, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 2815 finished
· engine:compute-1
H-baef90d8 Frozen → SHADOW vault skipped: last_beaten_lengths, last_never_involved, best_last3_beaten do not exist before the discovery zone; track it forward instead
· engine:orchestrator