Hypotheses · story · H-d586e8a0
Rival: a ground or trip excuse alone, without recent close form, carries the heavy-beating rebound
falsified: IRE A/E 0.937
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
- rival-explanation
- Created
- 17 Oct, 04:27
- Tests logged
- 11
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-8db9d29e (Rival: the close-form rebound is just as strong when ground and trip a) passed discovery but was falsified: driven by one price band (up to 14/1): the rest score 0.94. O-7450bbe8
- H-8db9d29e (Rival: the close-form rebound is just as strong when ground and trip a) passed discovery as a niche: A/E 1.23 on 316 bets (p 0.132), same-race control 0.99. O-d32706f6
- H-c36bf81d (Test-mechanism: the heavy beating misleads most when ground or trip ch) survived falsification: 6 of 6 attacks left it standing; it is frozen for its one vault query. O-f4de77f6
- AskedDoes the heavy-beating rebound need a visible excuse (ground or trip change) when there is no recent close finish? answered
- MechanismA heavy beating on different ground or at a different trip has an obvious excuse that the horse's recent form tends to confirm. Without recent close form, the beating may simply be true.
- Why the market misses itPunters weight the last margin and pay little attention to whether the conditions of that run were against the horse.
- Predictedpositive, A/E 1.08 to 1.18 on 600+ bets if the excuse alone matters
- Falsified ifA/E at or below 1.03, which would mean the ground/trip rule rides on close recent form
- Rule sketch
is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten > 6 AND (going_group <> last_going_group OR distance_yards - last_distance_yards >= 440 OR last_distance_yards - distance_yards >= 440)
The question's answer so far: No. Without a recent close finish, a ground or trip change carries almost nothing: 1.05 on 4162 (p 0.21), with IRE at 0.937, and it was killed. The rebound needs recent close form.
Mechanism and rationale
A heavy beating on different ground or at a different trip has an obvious excuse that the horse's recent form tends to confirm. Without recent close form, the beating may simply be true.
The rule
is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6 AND going_group IS NOT NULL AND last_going_group IS NOT NULL AND distance_yards IS NOT NULL AND last_distance_yards IS NOT NULL AND (going_group <> last_going_group OR distance_yards - last_distance_yards >= 440 OR last_distance_yards - distance_yards >= 440)Reads: is_handicap, race_type, last_beaten_lengths, best_last3_beaten, going_group, last_going_group, distance_yards, last_distance_yards
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 33450040d37094c25ecbe7ba27ba6c5adce01d76abcf40e848b8194b49d71d7f
- Frozen
- not frozen
- The definition can still change.
- Confounders
- Class drop: horses dropping in class after a heavy beating may explain any lift; refinement 3 removes them.
- Longshot band concentration: earlier broad heavy-beating and wide-trip lifts leaned on 16/1+ with few winners; refinement 1 caps the price at 14/1.
- Overlap with the never-involved 14+ field rule (1.324 on 1215): that niche may carry the lift; refinement 2 excludes it.
- Short data window: best_last3_beaten only exists from 2025-11-01, so the sample is far smaller than the 600+ the hypothesis expected and comes from one season.
- Seasonal confounding: going changes cluster at the turns of the seasons and trip changes cluster in staying handicaps, so the rule may pick up a season or race-type mix rather than an excuse.
- Pulled-up and other non-finishing last runs drop out because last_beaten_lengths is NULL, so the rule covers finishers only.
- Control
{ "description": "Other runners in the same races should score about 1.0 (0.95 to 1.02); a lift there would mean a race property, not the excuse. The key comparison is the same heavy-beaten jumps handicappers with no close recent form whose last run was on the same going group and within 440 yards of today's trip. If the excuse is its own cause, the control scores well below the rule (around 1.0 or less). If the control matches the rule, the lift comes from heavy-beaten handicappers in general, not from the ground or trip change.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6 AND going_group IS NOT NULL AND last_going_group IS NOT NULL AND distance_yards IS NOT NULL AND last_distance_yards IS NOT NULL AND going_group = last_going_group AND distance_yards - last_distance_yards < 440 AND last_distance_yards - distance_yards < 440" }
Discovery result
pass broad rule (niche) · 17 Oct, 04:29
- Bets
- 4,162
- 281 winners
- A/E
- 1.05
- 95%: 0.93 to 1.18
- SP return
- -28.1%
- level stakes
- Betfair SP return
- -2.3%
- 4,160 bets with a BSP
Strike rate 6.8%. p = 0.21. Same-race control: the other runners in these races had A/E 1.00, 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. 4 of 6 survived.
- control: Control: same going group and trip within 440yfail
1,124 bets · A/E 0.93 (0.72 to 1.18) · control 1.02 · 17 Oct, 04:31
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-275880.93after 2026-04-275360.93Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - partition: Going-change excuse only (trip unchanged)fail
1,563 bets · A/E 0.98 (0.80 to 1.18) · control 1.01 · 17 Oct, 04:31
Sealed holdout (vault)
Not queried. Only a frozen idea can spend its one query against the 2020-25 holdout.
Forward record
No forward record. Shadow tracking starts after the vault and counts only races run after the freeze.
Lineage
Agent runs
designer v1ok · 35s · 17 Oct, 04:28
Output (schema-checked)
{ "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6 AND going_group IS NOT NULL AND last_going_group IS NOT NULL AND distance_yards IS NOT NULL AND last_distance_yards IS NOT NULL AND (going_group <> last_going_group OR distance_yards - last_distance_yards >= 440 OR last_distance_yards - distance_yards >= 440)", "refinements": [ { "label": "14/1 or shorter (longshot confounder)", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6 AND going_group IS NOT NULL AND last_going_group IS NOT NULL AND distance_yards IS NOT NULL AND last_distance_yards IS NOT NULL AND (going_group <> last_going_group OR distance_yards - last_distance_yards >= 440 OR last_distance_yards - distance_yards >= 440) AND sp_decimal <= 15" }, { "label": "Outside the never-involved big-field niche (overlap confounder)", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6 AND going_group IS NOT NULL AND last_going_group IS NOT NULL AND distance_yards IS NOT NULL AND last_distance_yards IS NOT NULL AND (going_group <> last_going_group OR distance_yards - last_distance_yards >= 440 OR last_distance_yards - distance_yards >= 440) AND NOT (last_never_involved = 1 AND last_field_size >= 14)" }, { "label": "No class drop today (class-drop confounder)", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6 AND going_group IS NOT NULL AND last_going_group IS NOT NULL AND distance_yards IS NOT NULL AND last_distance_yards IS NOT NULL AND (going_group <> last_going_group OR distance_yards - last_distance_yards >= 440 OR last_distance_yards - distance_yards >= 440) AND race_class IS NOT NULL AND last_race_class IS NOT NULL AND race_class <= last_race_class" } ], "control": { "description": "Other runners in the same races should score about 1.0 (0.95 to 1.02); a lift there would mean a race property, not the excuse. The key comparison is the same heavy-beaten jumps handicappers with no close recent form whose last run was on the same going group and within 440 yards of today's trip. If the excuse is its own cause, the control scores well below the rule (around 1.0 or less). If the control matches the rule, the lift comes from heavy-beaten handicappers in general, not from the ground or trip change.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten > 6 AND going_group IS NOT NULL AND last_going_group IS NOT NULL AND distance_yards IS NOT NULL AND last_distance_yards IS NOT NULL AND going_group = last_going_group AND distance_yards - last_distance_yards < 440 AND last_distance_yards - distance_yards < 440" }, "pass_criteria": { "min_bets": 150, "min_ae": 1.05, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1, "max_p": 0.2 }, "confounders": [ "Class drop: horses dropping in class after a heavy beating may explain any lift; refinement 3 removes them.", "Longshot band concentration: earlier broad heavy-beating and wide-trip lifts leaned on 16/1+ with few winners; refinement 1 caps the price at 14/1.", "Overlap with the never-involved 14+ field rule (1.324 on 1215): that niche may carry the lift; refinement 2 excludes it.", "Short data window: best_last3_beaten only exists from 2025-11-01, so the sample is far smaller than the 600+ the hypothesis expected and comes from one season.", "Seasonal confounding: going changes cluster at the turns of the seasons and trip changes cluster in staying handicaps, so the rule may pick up a season or race-type mix rather than an excuse.", "Pulled-up and other non-finishing last runs drop out because last_beaten_lengths is NULL, so the rule covers finishers only." ], "mechanism": "A jumps handicapper beaten 20+ lengths on different ground (going group) or at a trip at least a quarter-mile different from today has a plausible excuse for that run. This rule removes horses with any close finish (within 6 lengths) in their last three runs, so it tests whether the excuse alone predicts a rebound. The alternative is that the ground/trip lift seen earlier only works through runners whose recent close form shows the beating was out of character.", "market_miss": "Punters and the handicap-driven market price off the last margin and give little weight to whether that run's ground or trip suited the horse. Without a recent close finish to point to, an excused heavy beating looks like plain decline, so if the excuse matters this subset would be the most under-bet.", "prediction": { "direction": "positive", "size": "A/E about 1.08 to 1.18. Expect roughly 150 to 400 bets, not 600+, because best_last3_beaten only starts in November 2025.", "falsified_if": "A/E at or below 1.03 on the broad rule, or the same-ground same-trip control scoring within 0.05 of the rule. Either would mean the ground/trip lift rides on close recent form or on heavy-beaten handicappers in general, not on the excuse." }, "notes": "I kept the rule sketch and added explicit NOT NULL guards so missing going or distance data cannot enter through the OR branches. best_last3_beaten > 6 includes the last run itself, which is fine because that run was beaten 20+. Because the window starts in November 2025, a thin positive result should go to falsification and forward tracking, not be killed for its size." }
Timeline
Job 2950 finished
· engine:compute-1
H-d586e8a0 Falsification → KILLED falsified: IRE A/E 0.937
· engine:falsification
falsification result for H-d586e8a0 (perturbation: Perturb tighter: beaten 25+, close form > 7.5, trip gap 528y): pass
· engine:evaluator
compute-1 took job 2950 (attack, attempt 1)
· compute-1
Job 2949 finished
· engine:compute-1
falsification result for H-d586e8a0 (perturbation: Perturb looser: beaten 16+, close form > 5, trip gap 352y): pass
· engine:evaluator
compute-1 took job 2949 (attack, attempt 1)
· compute-1
Job 2948 finished
· engine:compute-1
falsification result for H-d586e8a0 (partition: Outside the never-involved 14+ field niche): pass
· engine:evaluator
compute-1 took job 2948 (attack, attempt 1)
· compute-1
Job 2947 finished
· engine:compute-1
falsification result for H-d586e8a0 (partition: Trip-change excuse only (same going)): pass
· engine:evaluator
compute-1 took job 2947 (attack, attempt 1)
· compute-1
Job 2946 finished
· engine:compute-1
falsification result for H-d586e8a0 (partition: Going-change excuse only (trip unchanged)): fail
· engine:evaluator
compute-1 took job 2946 (attack, attempt 1)
· compute-1
Job 2945 finished
· engine:compute-1
falsification result for H-d586e8a0 (control: Control: same going group and trip within 440y): fail
· engine:evaluator
compute-1 took job 2945 (attack, attempt 1)
· compute-1
Job 2927 finished
· engine:ai-1