Hypotheses · story · H-807e3cb2
Sharpen: winners beaten 20+ lengths on their first run after winning
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:16
- 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
- H-332b49e9 (Rival: the lift is a one-bad-run rebound after close recent form, need) survived falsification: 5 of 5 attacks left it standing; it is frozen for its one vault query. O-3ba2c8ff
- H-363890c3 (Sharpen: recent winners beaten 20+ lengths next time over jumps) passed discovery: A/E 1.34 on 669 bets (p 0.006), same-race control 0.97. O-c88bca5b
- AskedIs the winner effect strongest when the heavy beating was the first run after the win: a bounce or a mark-hike run that the market reads as the horse being found out? answered
- MechanismA first run after a win is where one-off causes cluster: a bounce after a hard race, a fresh mark rise, a step up in grade. These are temporary, so the horse is close to the one that won. A horse that has run twice since winning has had more chance to show a real decline.
- Why the market misses itThe form line reads win and then 20+ lengths beaten, which looks like the handicapper has caught up with the horse. The market prices it as found out, when the beating may only be a bounce.
- Predictedpositive, A/E 1.30 to 1.50 on 300+ bets, at or above the winner parent's 1.34
- Falsified ifA/E below 1.15, or no higher than winners whose win came two or more runs back
Mechanism and rationale
A first run after a win is where one-off causes cluster: a bounce after a hard race, a fresh mark rise, a step up in grade. These are temporary, so the horse is close to the one that won. A horse that has run twice since winning has had more chance to show a real decline.
The rule
is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND days_since_win IS NOT NULL AND last_days_since_last_run IS NOT NULL AND days_since_win = days_since_last_run + last_days_since_last_runReads: is_handicap, race_type, last_beaten_lengths, days_since_win, last_days_since_last_run, days_since_last_run
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- b78906dae4c6c4cb6ef75c9288775f3b6d17bd3f10356028bf0ff447471ef9da
- Frozen
- 17 Oct, 04:23
- Nothing in the definition can change after this.
- Confounders
- Mark rise after the win: the handicapper's rise may be what caused the beating, and the rebound may only come if the mark is later eased. Check rating_change across the selection.
- Class rise after the win: a step up in grade for the beating, with a step back down today, would explain both the beating and the rebound.
- Days since last run: a quick return after the beating and a long break behave differently, and the timing equality ties the selection to specific gaps.
- Longshot concentration: the winner parent's lift leaned on 16/1-plus winners (2.01 on 222 from only 12 wins). The rule needs the sub-16/1 refinement to hold up.
- Trainer patterns after a win: some yards run winners quickly again under a penalty or rise and then drop them back down.
- GB/IRE split: without recent winners, the parent scored 1.03 in GB and 1.50 in IRE, so check each region separately.
- Control
{ "description": "Same-race rivals should score around 1.0 (slightly below for the favourite-longshot pattern), so the lift belongs to the selected horses and not to their races. The key comparison is the falsification test: jumps handicappers beaten 20+ lengths last time whose most recent win came exactly two runs before that beating (the third run back), so there was a run in between. The rule predicts the first-run-after-win group beats this control. If the control scores as high or higher, the 'first run after the win' timing adds nothing beyond the winner parent (1.34). The control needs best_last3_beaten, which has a short window, so it may be thin.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten = 0 AND days_since_win IS NOT NULL AND last_days_since_last_run IS NOT NULL AND days_since_win > days_since_last_run + last_days_since_last_run" }
Discovery result
pass broad rule · 17 Oct, 04:22
- Bets
- 502
- 61 winners
- A/E
- 1.25
- 95%: 0.96 to 1.61
- SP return
- +18.4%
- level stakes
- Betfair SP return
- +72.4%
- 502 bets with a BSP
Strike rate 12.2%. p = 0.049. 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: win came two or more runs before the 20+ length beatingpass
3,831 bets · A/E 1.03 (0.92 to 1.16) · control 1.00 · 17 Oct, 04:23
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-272,3770.96after 2026-04-271,4541.17Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: Perturb beaten-lengths threshold down to 16pass
647 bets · A/E 1.22 (0.96 to 1.51) · control 0.99 · 17 Oct, 04:23
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:24
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
647 bets · A/E 1.22 (0.96 to 1.51) · control 0.99 · 17 Oct, 04:24
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-274131.28after 2026-04-272341.12Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: >= 20 -> 24 (+20%)pass
394 bets · A/E 1.29 (0.94 to 1.71) · control 0.98 · 17 Oct, 04:24
Breakdown
Lineage
Agent runs
designer v1ok · 40s · 17 Oct, 04:16
Output (schema-checked)
{ "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND days_since_win IS NOT NULL AND last_days_since_last_run IS NOT NULL AND days_since_win = days_since_last_run + last_days_since_last_run", "refinements": [ { "label": "shorter than 16/1 (tests the longshot-concentration confounder)", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND days_since_win IS NOT NULL AND last_days_since_last_run IS NOT NULL AND days_since_win = days_since_last_run + last_days_since_last_run AND sp_decimal < 17" }, { "label": "quick turnaround after the win (bounce after a hard race)", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND days_since_win IS NOT NULL AND last_days_since_last_run IS NOT NULL AND days_since_win = days_since_last_run + last_days_since_last_run AND last_days_since_last_run <= 28" } ], "control": { "description": "Same-race rivals should score around 1.0 (slightly below for the favourite-longshot pattern), so the lift belongs to the selected horses and not to their races. The key comparison is the falsification test: jumps handicappers beaten 20+ lengths last time whose most recent win came exactly two runs before that beating (the third run back), so there was a run in between. The rule predicts the first-run-after-win group beats this control. If the control scores as high or higher, the 'first run after the win' timing adds nothing beyond the winner parent (1.34). The control needs best_last3_beaten, which has a short window, so it may be thin.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_beaten_lengths >= 20 AND best_last3_beaten = 0 AND days_since_win IS NOT NULL AND last_days_since_last_run IS NOT NULL AND days_since_win > days_since_last_run + last_days_since_last_run" }, "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": [ "Mark rise after the win: the handicapper's rise may be what caused the beating, and the rebound may only come if the mark is later eased. Check rating_change across the selection.", "Class rise after the win: a step up in grade for the beating, with a step back down today, would explain both the beating and the rebound.", "Days since last run: a quick return after the beating and a long break behave differently, and the timing equality ties the selection to specific gaps.", "Longshot concentration: the winner parent's lift leaned on 16/1-plus winners (2.01 on 222 from only 12 wins). The rule needs the sub-16/1 refinement to hold up.", "Trainer patterns after a win: some yards run winners quickly again under a penalty or rise and then drop them back down.", "GB/IRE split: without recent winners, the parent scored 1.03 in GB and 1.50 in IRE, so check each region separately." ], "mechanism": "A first run after a win is where one-off causes of a bad run cluster: a bounce after a hard winning race, a fresh mark rise, a step up in grade or a penalty. These causes are temporary, so the horse that was beaten 20+ lengths is still close in ability to the one that won. A horse with another run between the win and the beating has had more chance to show a lasting decline. The win-then-thrashed pattern is therefore the most likely to be a one-off.", "market_miss": "The form line reads a win and then a 20+ length beating. Punters read that as the handicapper having caught up with the horse, so it is priced as found out. In fact the beating is often a bounce or a rise-and-grade effect that does not carry into today's race. The most recent form figure dominates the price, and the win just before it is under-weighted.", "prediction": { "direction": "positive", "size": "A/E 1.30 to 1.50 on 300+ bets, at or above the winner parent's 1.34", "falsified_if": "A/E below 1.15 on the broad rule, or no higher than the control group (winners whose win came two runs before the beating), or a lift that disappears below 16/1" }, "notes": "I dropped best_last3_beaten = 0 from the rule. The catalogue only has it from 2025-11, so keeping it would shrink the discovery sample, and it is redundant anyway. When days_since_win equals days_since_last_run + last_days_since_last_run, the last win was on the run before last, which is exactly the 'first run after winning' condition. last_beaten_lengths >= 20 already excludes a win last time. Note that days_since_win counts the most recent win only, which is the intended case. Pass criteria are slightly stricter than the floor (A/E 1.10) because the prediction is to beat the 1.34 parent." }
Timeline
Job 2907 finished
· engine:compute-1
hypothesis note H-807e3cb2
· engine:perturb
perturbation result for H-807e3cb2 (neighbour: drop: days_since_win IS NOT NULL): pass
· engine:perturb
perturbation result for H-807e3cb2 (neighbour: drop: last_beaten_lengths >= 20): pass
· engine:perturb
perturbation result for H-807e3cb2 (neighbour: drop: race_type IN ('Hurdle', 'Chase')): pass
· engine:perturb
perturbation result for H-807e3cb2 (neighbour: drop: is_handicap = 1): pass
· engine:perturb
perturbation result for H-807e3cb2 (neighbour: >= 20 -> 24 (+20%)): pass
· engine:perturb
perturbation result for H-807e3cb2 (neighbour: >= 20 -> 16 (-20%)): pass
· engine:perturb
compute-1 took job 2907 (mutate, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Job 2902 finished
· engine:compute-1
forward result for H-807e3cb2 (forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 2902 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 2884 finished
· engine:compute-1
H-807e3cb2 Frozen → SHADOW vault skipped: last_beaten_lengths do not exist before the discovery zone; track it forward instead
· engine:orchestrator