Hypotheses · story · H-d97a030e
Rival: big-field beatings, not the heavy beating itself, carry the lift
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
- rival-explanation
- Created
- 17 Oct, 03:13
- Tests logged
- 18
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-1a646ca5 (Generalise: jumps handicappers beaten 20 lengths or more last time bea) passed discovery: A/E 1.08 on 6743 bets (p 0.041), same-race control 0.99. O-58c96d7b
- AskedAre big beaten distances in large fields less informative, so that the lift concentrates where last_field_size was big? answered
- MechanismIn fields of 14 or more, horses well down the order are routinely eased, and traffic costs ground. A big beaten distance there is weak evidence of inability.
- Why the market misses itBeaten lengths are read the same whatever the field size, so big-field beatings get over-penalised.
- Predictedpositive, A/E 1.12+ on 1500+ bets, clearly above the small-field subset
- Falsified ifA/E no higher than heavily beaten runners from fields of 10 or fewer, which would rule the rival out
- Rule sketch
is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND last_field_size >= 14 - question id
Mechanism and rationale
In fields of 14 or more, horses well down the order are routinely eased, and traffic costs ground. A big beaten distance there is weak evidence of inability.
The rule
is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths IS NOT NULL AND last_beaten_lengths >= 20 AND last_field_size IS NOT NULL AND last_field_size >= 14Reads: is_handicap, race_type, last_beaten_lengths, last_field_size
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 349ee6df3bc8d2da7dd1401a8c342a298bd577792807b4b9fb09fa07bc40c857
- Frozen
- 17 Oct, 03:21
- Nothing in the definition can change after this.
- Confounders
- Region: the parent effect holds in GB (1.087) and IRE (1.067), and big fields are more common at some GB/IRE meetings, so check both countries
- Festival meetings: big fields cluster at festivals, where beatings may be unrepresentative for other reasons such as the class step or ambitious targeting
- Race class: big-field handicaps tend to be higher class, so a class drop next time could carry the lift
- Going: big-field heavy beatings may come on testing ground, which stretches margins
- Price band: the parent rule is above par at 16/1+ (1.174), so a field-size split could just move runners between price bands; compare under and over 16/1
- Overlap with the parent rule: this is a subset of the frozen 6743-bet heavy-beating rule, so it has to beat the parent's 1.08, not just par
- Control
{ "description": "The rival claim is that field size carries the lift, so the key comparison is jumps handicappers beaten 20+ lengths last time in a field of 10 or fewer. If the rival is right, the big-field rule beats this small-field group clearly (by about 0.08 A/E or more) and the small-field group sits near par. The other runners in the same races should be near 0.99, as in the parent finding. If both field-size groups score about the same as the parent's 1.08, the heavy beating itself carries the lift and the rival is ruled out.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths IS NOT NULL AND last_beaten_lengths >= 20 AND last_field_size IS NOT NULL AND last_field_size <= 10" }
Discovery result
pass broad rule · 17 Oct, 03:18
- Bets
- 2,097
- 151 winners
- A/E
- 1.19
- 95%: 1.00 to 1.39
- SP return
- -22.4%
- level stakes
- Betfair SP return
- +15.3%
- 2,097 bets with a BSP
Strike rate 7.2%. p = 0.022. Same-race control: the other runners in these races had A/E 0.98, 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.
- control: Control: same heavy beating, last field of 10 or fewerpass
3,281 bets · A/E 1.02 (0.90 to 1.15) · control 1.01 · 17 Oct, 03:21
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-272,0931.02after 2026-04-271,1881.03Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - control: Dose-response control: last field of 11 to 13pass
1,509 bets · A/E 1.12 (0.93 to 1.33) · control 1.00 · 17 Oct, 03:21
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': 150, 'min_ae': 1.03, 'max_p': 0.2}info
0 bets · · 17 Oct, 03:21
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
2,523 bets · A/E 1.15 (0.99 to 1.32) · control 0.99 · 17 Oct, 03:30
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-271,3021.16after 2026-04-271,2211.12Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: >= 20 -> 24 (+20%)pass
1,758 bets · A/E 1.22 (1.01 to 1.45) · control 0.98 · 17 Oct, 03:30
Breakdown
Lineage
Agent runs
designer v1ok · 29s · 17 Oct, 03:14
Output (schema-checked)
{ "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths IS NOT NULL AND last_beaten_lengths >= 20 AND last_field_size IS NOT NULL AND last_field_size >= 14", "refinements": [ { "label": "Dose-response: last field of 18 or more", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths IS NOT NULL AND last_beaten_lengths >= 20 AND last_field_size IS NOT NULL AND last_field_size >= 18" }, { "label": "Easing mechanism: eased last time in a big field", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths IS NOT NULL AND last_beaten_lengths >= 20 AND last_field_size IS NOT NULL AND last_field_size >= 14 AND last_eased = 1" }, { "label": "Big-field beating came in a handicap (traffic-heavy races)", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths IS NOT NULL AND last_beaten_lengths >= 20 AND last_field_size IS NOT NULL AND last_field_size >= 14 AND last_is_handicap = 1" } ], "control": { "description": "The rival claim is that field size carries the lift, so the key comparison is jumps handicappers beaten 20+ lengths last time in a field of 10 or fewer. If the rival is right, the big-field rule beats this small-field group clearly (by about 0.08 A/E or more) and the small-field group sits near par. The other runners in the same races should be near 0.99, as in the parent finding. If both field-size groups score about the same as the parent's 1.08, the heavy beating itself carries the lift and the rival is ruled out.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths IS NOT NULL AND last_beaten_lengths >= 20 AND last_field_size IS NOT NULL AND last_field_size <= 10" }, "pass_criteria": { "min_bets": 500, "min_ae": 1.1, "max_p": 0.05 }, "forward_bar": { "min_bets": 150, "min_ae": 1.03, "max_p": 0.2 }, "confounders": [ "Region: the parent effect holds in GB (1.087) and IRE (1.067), and big fields are more common at some GB/IRE meetings, so check both countries", "Festival meetings: big fields cluster at festivals, where beatings may be unrepresentative for other reasons such as the class step or ambitious targeting", "Race class: big-field handicaps tend to be higher class, so a class drop next time could carry the lift", "Going: big-field heavy beatings may come on testing ground, which stretches margins", "Price band: the parent rule is above par at 16/1+ (1.174), so a field-size split could just move runners between price bands; compare under and over 16/1", "Overlap with the parent rule: this is a subset of the frozen 6743-bet heavy-beating rule, so it has to beat the parent's 1.08, not just par" ], "mechanism": "In handicap hurdles and chases of 14 or more runners, horses well down the order are routinely eased once their chance has gone, and traffic and wide trips cost extra ground. The beaten distance therefore overstates how far the horse was inferior. A 20+ length beating in a big field is weaker evidence of inability than the same margin in a small field, where it reflects the horse's true place more closely.", "market_miss": "Form readers and the market take beaten lengths at face value whatever the field size. Big-field beatings are penalised as heavily as small-field ones, so those horses drift beyond their true chance next time.", "prediction": { "direction": "positive", "size": "A/E about 1.12 or more on 1500+ bets, at least 0.08 above the small-field (10 or fewer) control", "falsified_if": "The big-field rule's A/E is no higher than the control (heavily beaten jumps handicappers from last fields of 10 or fewer), or is not above the parent rule's 1.08. Either result rules out the rival: field size does not carry the heavy-beating lift." }, "notes": "The sketch is kept as written, with explicit NOT NULL guards added. last_field_size and last_eased are pre-off columns about the previous run. The refinements test dose-response (18+ runners), the easing mechanism itself, and handicap traffic. The pass bar is stricter than the floor because a rival must beat its parent's 1.08 on a large subset." }
Timeline
Job 2659 finished
· engine:compute-1
hypothesis note H-d97a030e
· engine:perturb
perturbation result for H-d97a030e (neighbour: drop: race_type IN ('Hurdle', 'Chase')): pass
· engine:perturb
perturbation result for H-d97a030e (neighbour: drop: is_handicap = 1): pass
· engine:perturb
perturbation result for H-d97a030e (neighbour: >= 14 -> 17 (+20%)): pass
· engine:perturb
perturbation result for H-d97a030e (neighbour: >= 14 -> 11 (-20%)): pass
· engine:perturb
perturbation result for H-d97a030e (neighbour: >= 20 -> 24 (+20%)): pass
· engine:perturb
perturbation result for H-d97a030e (neighbour: >= 20 -> 16 (-20%)): pass
· engine:perturb
compute-1 took job 2659 (mutate, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Job 2653 finished
· engine:compute-1
forward result for H-d97a030e (forward vs bar {'min_bets': 150, 'min_ae': 1.03, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 2653 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 2649 finished
· engine:compute-1
H-d97a030e Frozen → SHADOW vault skipped: last_beaten_lengths do not exist before the discovery zone; track it forward instead
· engine:orchestrator