Hypotheses · letters · H-da5bbd88
Unseated or brought down and back within four weeks: the fresh-horse consequence
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
Part of the thread “H98: brought down or unseated” 12 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- test-mechanism
- Created
- 16 Oct, 13:14
- Tests logged
- 17
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
- H98-brought-down-or-unseated (H98: brought down or unseated) was GREEN in the earlier research: A/E 1.10 on 612 bets (periods 1.17 / 1.02); now PROMISING. O-9b549ef0
- AskedDoes a quick return after an unseat or brought-down beat a slow return, as the 'had no race, still fresh' mechanism requires? testing
- MechanismA horse that unseated its rider or was brought down did little racing. Its connections can run it again soon, while it is still at the fitness it had for the abandoned target. After a long break, the incident is irrelevant: the horse is just a returner.
- Why the market misses itThe form figure 'U' or 'B' reads as a failure, and the next run looks quick and unplanned. Punters do not credit that the horse arrives fresh and fit, with its last real form line still current.
- Predictedpositive, A/E 1.10 to 1.18 on 250+ bets, above the same rule with days_since_last_run > 28
- Falsified ifA/E below 1.03, or no better than the over-28-days complement
- Rule sketch
last_non_finish_code IN ('BD', 'UR') AND days_since_last_run <= 28
Mechanism and rationale
A horse that unseated its rider or was brought down did little racing. Its connections can run it again soon, while it is still at the fitness it had for the abandoned target. After a long break, the incident is irrelevant: the horse is just a returner.
The rule
last_non_finish_code IN ('BD', 'UR') AND days_since_last_run <= 28 AND race_type IN ('Hurdle', 'Chase')Reads: last_non_finish_code, days_since_last_run, race_type
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- e21bd8ce4210c86e2acec28e0af11f85402c433369b42c1cd6003c5821ce09d3
- Frozen
- 16 Oct, 13:22
- Nothing in the definition can change after this.
- Confounders
- A few longshot winners at 16/1+. The parent BD/UR edge was mostly BSP-driven (SP ROI +16.6% against BSP ROI +140%), so results must be reported by price band, and the capped refinement must hold.
- Chase versus hurdle mix: unseats are far more common in chases, and quick re-runs may differ by code.
- Yard habits: trainers who re-run horses quickly may be in form or skilled generally. The same-race runners and the over-28-days control address this.
- Period decay: the parent edge fell from 1.17 to 1.02 between periods, so a pooled result may overstate the current edge.
- Data window: last_non_finish_code only separates UR/BD from PU from 2025-01 onward (every earlier non-finisher is coded PU), which limits the sample to roughly 22 months.
- Brought down (no fault of the horse) and unseated (possibly a jumping error) differ in cause; the pooled rule mixes them.
- Control
{ "description": "The main comparison is the same incident with a slow return: BD/UR last time, jumps, back after more than 28 days. The mechanism says this group is just ordinary returners, so it should score near 1.0 (roughly the 1.02 that the second-period BD/UR record settled to), and clearly below the quick-return rule. The lab's usual same-race comparison (the other runners in the qualifying races) should be close to 1.0. If those runners also score above 1.0, the lift belongs to the race type, not to the fresh horse.", "rule": "last_non_finish_code IN ('BD', 'UR') AND days_since_last_run > 28 AND race_type IN ('Hurdle', 'Chase')" }
Discovery result
pass broad rule (niche) · 16 Oct, 13:15
- Bets
- 355
- 39 winners
- A/E
- 1.17
- 95%: 0.83 to 1.59
- SP return
- +31.5%
- level stakes
- Betfair SP return
- +179.5%
- 355 bets with a BSP
Strike rate 11.0%. p = 0.19. 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. 5 of 6 survived.
- price_band: Capped at 14/1: does the quick-return lift survive without the 16/1+ longshots?pass
189 bets · A/E 1.08 (0.74 to 1.52) · control 0.99 · 16 Oct, 13:22
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-271161.18after 2026-04-27730.91Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: Perturb the turnaround down: back within 21 dayspass
283 bets · A/E 1.17 (0.80 to 1.66) · control 0.98 · 16 Oct, 13:22
Sealed holdout (vault)
- Bets
- 0
- 16 Oct, 13:22
- A/E
- –
- p = 1.0
- BH threshold then
- 0.0026
- over every vault test so far
- Outcome
- Failed
- vault query (supportive)pass
0 bets · · 16 Oct, 13:22
Breakdown
betsA/E0.71.01.32020-220–2023 to Sept 20250–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Forward record
- forward vs bar {'min_bets': 100, 'min_ae': 1.03, 'max_p': 0.2}info
0 bets · · 16 Oct, 13:23
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: <= 28 -> 22 (-20%)pass
291 bets · A/E 1.22 (0.85 to 1.71) · control 0.97 · 16 Oct, 13:23
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-271741.30after 2026-04-271171.06Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: <= 28 -> 34 (+20%)pass
400 bets · A/E 1.11 (0.79 to 1.50) · control 0.98 · 16 Oct, 13:23
Breakdown
Lineage
Agent runs
designer v1ok · 1m 1s · 16 Oct, 13:14
Output (schema-checked)
{ "rule": "last_non_finish_code IN ('BD', 'UR') AND days_since_last_run <= 28 AND race_type IN ('Hurdle', 'Chase')", "refinements": [ { "label": "capped at 14/1: tests the mechanism at sensible prices, since the parent BD/UR edge was carried by big BSP winners", "rule": "last_non_finish_code IN ('BD', 'UR') AND days_since_last_run <= 28 AND race_type IN ('Hurdle', 'Chase') AND sp_decimal <= 15" }, { "label": "back within three weeks: a dose-response check, since fitness carried over should matter more the quicker the return", "rule": "last_non_finish_code IN ('BD', 'UR') AND days_since_last_run <= 21 AND race_type IN ('Hurdle', 'Chase')" } ], "control": { "description": "The main comparison is the same incident with a slow return: BD/UR last time, jumps, back after more than 28 days. The mechanism says this group is just ordinary returners, so it should score near 1.0 (roughly the 1.02 that the second-period BD/UR record settled to), and clearly below the quick-return rule. The lab's usual same-race comparison (the other runners in the qualifying races) should be close to 1.0. If those runners also score above 1.0, the lift belongs to the race type, not to the fresh horse.", "rule": "last_non_finish_code IN ('BD', 'UR') AND days_since_last_run > 28 AND race_type IN ('Hurdle', 'Chase')" }, "pass_criteria": { "min_bets": 200, "min_ae": 1.07, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.03, "max_p": 0.2 }, "confounders": [ "A few longshot winners at 16/1+. The parent BD/UR edge was mostly BSP-driven (SP ROI +16.6% against BSP ROI +140%), so results must be reported by price band, and the capped refinement must hold.", "Chase versus hurdle mix: unseats are far more common in chases, and quick re-runs may differ by code.", "Yard habits: trainers who re-run horses quickly may be in form or skilled generally. The same-race runners and the over-28-days control address this.", "Period decay: the parent edge fell from 1.17 to 1.02 between periods, so a pooled result may overstate the current edge.", "Data window: last_non_finish_code only separates UR/BD from PU from 2025-01 onward (every earlier non-finisher is coded PU), which limits the sample to roughly 22 months.", "Brought down (no fault of the horse) and unseated (possibly a jumping error) differ in cause; the pooled rule mixes them." ], "mechanism": "A horse that unseated its rider or was brought down did little or no racing that day, so it was not drained the way a finisher or a horse pulled up exhausted would be. When its connections run it again within four weeks, it arrives at the fitness it had for the abandoned target, and its last completed form line is still current. After a long break that advantage is gone and the horse is just an ordinary returner, so the edge should sit in quick returns and fade as the gap grows.", "market_miss": "The form figure 'U' or 'B' reads as a failure and hides the last real form line. A quick turnaround looks unplanned rather than like a chance to use fitness already built. Prices therefore do not credit a fit, fresh horse whose underlying form is intact.", "prediction": { "direction": "positive", "size": "A/E 1.10 to 1.18 on 250+ bets, clearly above the over-28-days complement (expected near 1.0)", "falsified_if": "Falsified if the broad rule's A/E is below 1.03, if it is no better than the over-28-days complement, or if the lift disappears at 14/1 or shorter (capped A/E below 1.0)." }, "notes": "I added race_type IN ('Hurdle','Chase') because UR and BD are jump incidents and the mechanism is about jump racing; that also keeps out the rare Flat unseat. I used last_non_finish_code (available from 2025-01) rather than last_code (from 2025-11) to get a larger sample. The pass bar is a little stricter than the floor because the parent edge looks price-driven and has decayed. Read the vault result by price band." }
Timeline
Job 1601 finished
· engine:compute-1
hypothesis note H-da5bbd88
· engine:perturb
perturbation result for H-da5bbd88 (neighbour: drop: race_type IN ('Hurdle', 'Chase')): pass
· engine:perturb
perturbation result for H-da5bbd88 (neighbour: drop: days_since_last_run <= 28): pass
· engine:perturb
perturbation result for H-da5bbd88 (neighbour: drop: last_non_finish_code IN ('BD', 'UR')): pass
· engine:perturb
perturbation result for H-da5bbd88 (neighbour: <= 28 -> 34 (+20%)): pass
· engine:perturb
perturbation result for H-da5bbd88 (neighbour: <= 28 -> 22 (-20%)): pass
· engine:perturb
compute-1 took job 1601 (mutate, attempt 1)
· compute-1
Job 1600 finished
· engine:compute-1
forward result for H-da5bbd88 (forward vs bar {'min_bets': 100, 'min_ae': 1.03, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 1600 (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 1592 finished
· engine:compute-1
H-da5bbd88 Vault → SHADOW vault SUPPORTIVE: A/E None on 0 bets, p 1 against BH threshold 0.002632 over 38 vault tests
· engine:orchestrator
vault result for H-da5bbd88 (vault query (supportive)): pass
· engine:orchestrator