Hypotheses · trajectory · H-9f59a0ed
Sharpen: chase unseaters with no jumping error recorded last time
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
Part of the thread “H85: fell when going well” 20 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- sharpen
- Created
- 17 Oct, 02:36
- Tests logged
- 14
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-2ac5dd09 (Test-mechanism: unseated (not fell) chasers not going well carry the g) passed discovery as a niche: A/E 1.26 on 190 bets (p 0.157), same-race control 0.97. O-98ba927e
- AskedIs the unseat bounce-back strongest when the race comment records no jumping error, so the unseat looks like rider error rather than a blunder by the horse? answered
- MechanismThe over-punishment mechanism says the mispricing is largest where the horse did nothing wrong. A clean-jumping unseat is mostly rider or interference, so the horse's next run should be the least affected. This direction was set before seeing any split.
- Why the market misses itThe U is read as a jumping problem whatever caused it. Only the race comment shows that the horse jumped soundly.
- Predictedpositive, A/E 1.20 to 1.40 on 100+ bets
- Falsified ifA/E at or below the unseat pool's 1.26, or below 1.10.
- Rule sketch
race_type = 'Chase' AND last_non_finish_code = 'UR' AND COALESCE(last_jumping_error, 0) = 0 - question id
Mechanism and rationale
The over-punishment mechanism says the mispricing is largest where the horse did nothing wrong. A clean-jumping unseat is mostly rider or interference, so the horse's next run should be the least affected. This direction was set before seeing any split.
The rule
race_type = 'Chase' AND last_non_finish_code = 'UR' AND COALESCE(last_jumping_error, 0) = 0 AND race_date >= '2025-11-01'
Reads: race_type, last_non_finish_code, last_jumping_error, race_date
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 5ba2d01713718d2af94c66e741d5b67316cfd1dc928c01df21a5a81af424602a
- Frozen
- 17 Oct, 02:44
- Nothing in the definition can change after this.
- Confounders
- Coverage gap: last_jumping_error only exists from 2025-11-01. Before then COALESCE turns NULL into 0, which would wrongly label every earlier unseater as clean, so the rule is limited to race_date >= '2025-11-01'. The sample will be small, probably below 150.
- Under-recording: race readers often leave out the error before an unseat, so the 'clean' group will contain some real jumping unseats. That pushes the result towards the general UR pool.
- Interference unseats happen more in big fields and big handicaps, whose runners carry their own price dynamics. The same-race control covers this.
- Overlap with the going-well flag: some clean-jump unseaters were travelling well, and that edge is GB-led and fails in IRE. Check the split by region and by going-well.
- Longshot concentration: earlier F/U profit came from a few big-priced winners. Read A/E next to the win count and the price split.
- Control
{ "description": "Two comparisons. (1) The other runners in the same races should come out near 1.00 (the earlier unseat pool's control was 0.97), which shows the lift is not a property of the race. (2) The key contrast for this sharpen is chase unseaters in the same window whose last run DID record a jumping error. Under the mechanism these should score clearly lower than the clean-jump group, somewhere around par to 1.15. If they score as well or better, the 'did nothing wrong' story fails and the lift is just a general UR effect.", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND last_jumping_error = 1 AND race_date >= '2025-11-01'" }
Discovery result
pass broad rule (niche) · 17 Oct, 02:43
- Bets
- 110
- 14 winners
- A/E
- 1.41
- 95%: 0.77 to 2.36
- SP return
- +67.5%
- level stakes
- Betfair SP return
- +259.7%
- 110 bets with a BSP
Strike rate 12.7%. p = 0.13. Same-race control: the other runners in these races had A/E 0.96, 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 5 survived.
- control: Control: same-window chase unseaters WITH a recorded jumping errorpass
100 bets · A/E 1.43 (0.78 to 2.40) · control 0.95 · 17 Oct, 02:44
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-27571.73after 2026-04-27430.99Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - price_band: Longshots removed: clean-jump unseaters at 14/1 or shorterpass
57 bets · A/E 1.29 (0.64 to 2.30) · control 0.96 · 17 Oct, 02:44
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, 02:58
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: drop: race_type = 'Chase'fail
294 bets · A/E 0.90 (0.55 to 1.37) · control 1.01 · 17 Oct, 03:02
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-271540.93after 2026-04-271400.85Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: drop: last_non_finish_code = 'UR'fail
9,180 bets · A/E 0.99 (0.94 to 1.05) · control 1.03 · 17 Oct, 03:02
Breakdown
Lineage
Agent runs
designer v1ok · 47s · 17 Oct, 02:37
Output (schema-checked)
{ "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND COALESCE(last_jumping_error, 0) = 0 AND race_date >= '2025-11-01'", "refinements": [ { "label": "not-going-well (matches the 1.26 unseat pool)", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND COALESCE(last_jumping_error, 0) = 0 AND race_date >= '2025-11-01' AND COALESCE(last_fell_going_well, 0) = 0" }, { "label": "14/1 or shorter (F/U longshots went 0 from 98 at 16/1+)", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND COALESCE(last_jumping_error, 0) = 0 AND race_date >= '2025-11-01' AND sp_decimal <= 15" } ], "control": { "description": "Two comparisons. (1) The other runners in the same races should come out near 1.00 (the earlier unseat pool's control was 0.97), which shows the lift is not a property of the race. (2) The key contrast for this sharpen is chase unseaters in the same window whose last run DID record a jumping error. Under the mechanism these should score clearly lower than the clean-jump group, somewhere around par to 1.15. If they score as well or better, the 'did nothing wrong' story fails and the lift is just a general UR effect.", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND last_jumping_error = 1 AND race_date >= '2025-11-01'" }, "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": [ "Coverage gap: last_jumping_error only exists from 2025-11-01. Before then COALESCE turns NULL into 0, which would wrongly label every earlier unseater as clean, so the rule is limited to race_date >= '2025-11-01'. The sample will be small, probably below 150.", "Under-recording: race readers often leave out the error before an unseat, so the 'clean' group will contain some real jumping unseats. That pushes the result towards the general UR pool.", "Interference unseats happen more in big fields and big handicaps, whose runners carry their own price dynamics. The same-race control covers this.", "Overlap with the going-well flag: some clean-jump unseaters were travelling well, and that edge is GB-led and fails in IRE. Check the split by region and by going-well.", "Longshot concentration: earlier F/U profit came from a few big-priced winners. Read A/E next to the win count and the price split." ], "mechanism": "The market over-punishes a U in the form figures. That over-punishment should be biggest when the horse did nothing wrong. If the comment records no jumping error before the unseat, the cause was most likely the rider, interference or bad luck, not the horse's jumping. Its next chase should then be the least affected while its price still carries the full jumping-risk penalty. So clean-jump unseaters should beat their SP by more than unseaters overall.", "market_miss": "Punters and compilers read the U as a jumping problem whatever caused it. Telling a rider or interference unseat from a jumping-error unseat takes reading the race comment, and most of the market does not weigh that.", "prediction": { "direction": "positive", "size": "A/E 1.20 to 1.40. Probably fewer than 150 bets because of the 2025-11 coverage window.", "falsified_if": "Falsified if the clean-jump group's A/E is at or below the matching unseat pool's 1.26 or below 1.10, or if it fails to beat the control (unseaters with a recorded jumping error in the same window)." }, "notes": "The rule sketch had a bug: last_jumping_error is only populated from 2025-11-01, while last_non_finish_code starts in 2025-01. Because of COALESCE, every pre-November unseater would count as 'no error', so the sketch would mostly have re-tested the whole UR pool. I added a race_date >= '2025-11-01' bound to fix this. The sample is now likely to be thin, so this will probably travel as a directional result to falsification and forward tracking, not pass at 150 on discovery. Judge it mainly against the error-recorded unseat control." }
Timeline
Job 2549 finished
· engine:compute-1
hypothesis note H-9f59a0ed
· engine:perturb
perturbation result for H-9f59a0ed (neighbour: drop: race_date >= '2025-11-01'): pass
· engine:perturb
perturbation result for H-9f59a0ed (neighbour: drop: COALESCE(last_jumping_error, 0) = 0): pass
· engine:perturb
perturbation result for H-9f59a0ed (neighbour: drop: last_non_finish_code = 'UR'): fail
· engine:perturb
perturbation result for H-9f59a0ed (neighbour: drop: race_type = 'Chase'): fail
· engine:perturb
compute-1 took job 2549 (mutate, attempt 1)
· compute-1
Job 2546 finished
· engine:compute-1
forward result for H-9f59a0ed (forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 2546 (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 2539 finished
· engine:compute-1
H-9f59a0ed Frozen → SHADOW vault skipped: last_jumping_error do not exist before the discovery zone; track it forward instead
· engine:orchestrator
compute-1 took job 2539 (vault, attempt 1)
· compute-1
Job 2531 finished
· engine:compute-1
Queued vault on the compute lane: frozen: one sealed vault query
· engine:scheduler