Hypotheses · story · H-48a2eca6
Test-mechanism: the edge sits with horses the market did not shorten after the excuse
falsified: 2 of 5 attacks broke it; IRE: too few bets to judge
Part of the thread “H19: momentum interrupted beaten narrowly” 11 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- test-mechanism
- Created
- 16 Oct, 14:45
- Tests logged
- 16
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
- H19-momentum-interrupted-beaten-narrowly (H19: momentum interrupted beaten narrowly) was GREEN in the earlier research: A/E 1.18 on 242 bets (periods 1.07 / 1.26); now PROMISING. O-a6c61d14
- AskedIs the edge biggest when the market ignores the excuse, i.e. when today's SP is no shorter than the last SP? answered
- MechanismIf H19 works because the market misses the excuse, value should be largest where the price did not shorten from the last run. Where the market did shorten, it has already priced the excuse.
- Why the market misses itBookmakers price from the finishing position and the margin. The in-running interruption is only in comments, and many punters skip them.
- Predictedpositive, A/E 1.20 or more on 100+ bets, above the shortened group
- Falsified ifA/E at or below that of the H19 runners whose price shortened, or below 1.05
- Rule sketch
last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND sp_decimal >= last_sp_decimal - question idQ-add4cdf8
- operatortest-mechanism
The question's answer so far: No. Runners whose SP did not shorten scored 1.236 on 104 bets, which puts the shortened runners at about 1.3 on the rest of the parent's 218. The edge is not concentrated where the market ignored the excuse.
Mechanism and rationale
If H19 works because the market misses the excuse, value should be largest where the price did not shorten from the last run. Where the market did shorten, it has already priced the excuse.
The rule
last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND last_sp_decimal IS NOT NULL AND sp_decimal >= last_sp_decimal
Reads: last_momentum_interrupted, last_position, last_beaten_lengths, last_sp_decimal, sp_decimal
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 70e6fb1058f7648a4c8720766eb14f6a7645e4cef12f42470eb2f63da1a3d27f
- Frozen
- not frozen
- The definition can still change.
- Confounders
- Class rise today: a drift may reflect a tougher race rather than an overlooked excuse (refinement 2 checks this; race_class is mostly missing in IRE before 2026-07, so those runners are kept)
- Trip, going or course change: these can cause the drift on their own, so a drifted horse may be facing a real new handicap and not be ignored
- Longshot noise: drifted runners lean towards bigger prices, where a few winners swing A/E (refinement 1 caps the price at 14/1)
- Sample split: H19 has about 242 bets, so each half is thin and the drifted group may fall short of 150 bets; that should be read as a direction check, not a pass
- Market-wide price level: last_sp_decimal comes from a different race with a different field size and overround, so the drift is noisy as a measure of the market's opinion
- Exchange vs SP: H19's edge was mainly at BSP (19.1% vs 6.4% SP ROI), so an SP-based A/E may understate the edge
- Control
{ "description": "The key comparison is the other half of H19: runners that also had their run interrupted, were beaten 2 lengths or less, but started at a shorter price than last time (the market made allowance for the excuse). The mechanism predicts this group sits near par (about 1.0), and clearly below the drifted/unchanged group. The same-race other runners should sit at about par (0.95 to 1.0 after overround), which shows the lift is not a property of the races these horses run in.", "rule": "last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND last_sp_decimal IS NOT NULL AND sp_decimal < last_sp_decimal" }
Discovery result
pass broad rule (niche) · 16 Oct, 14:46
- Bets
- 104
- 14 winners
- A/E
- 1.24
- 95%: 0.68 to 2.07
- SP return
- +11.9%
- level stakes
- Betfair SP return
- +33.9%
- 104 bets with a BSP
Strike rate 13.5%. p = 0.25. Same-race control: the other runners in these races had A/E 0.97, 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. 3 of 5 survived.
- control: Control: drifted narrow losers with no trouble last timefail
5,650 bets · A/E 0.98 (0.91 to 1.06) · control 1.00 · 16 Oct, 14:49
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-272,1670.96after 2026-04-273,4831.00Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: Perturb drift cut: price at least 20% longer than last timepass
81 bets · A/E 1.63 (0.86 to 2.78) · control 0.93 · 16 Oct, 14:49
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.
Other experiments
- neighbour: > 1 -> 0 (-20%)pass
164 bets · A/E 1.24 (0.80 to 1.85) · control 0.98 · 16 Oct, 14:46
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-27661.32after 2026-04-27981.17Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: > 1 -> 2 (+20%)pass
63 bets · A/E 1.43 (0.66 to 2.72) · control 0.95 · 16 Oct, 14:46
Breakdown
Lineage
Agent runs
designer v1ok · 32s · 16 Oct, 14:46
Output (schema-checked)
{ "rule": "last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND last_sp_decimal IS NOT NULL AND sp_decimal >= last_sp_decimal", "refinements": [ { "label": "not-a-longshot (14/1 or shorter)", "rule": "last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND last_sp_decimal IS NOT NULL AND sp_decimal >= last_sp_decimal AND sp_decimal <= 15" }, { "label": "no class rise today", "rule": "last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND last_sp_decimal IS NOT NULL AND sp_decimal >= last_sp_decimal AND (race_class IS NULL OR last_race_class IS NULL OR race_class >= last_race_class)" }, { "label": "clearly drifted (price at least 25% longer)", "rule": "last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND last_sp_decimal IS NOT NULL AND sp_decimal >= 1.25 * last_sp_decimal" } ], "control": { "description": "The key comparison is the other half of H19: runners that also had their run interrupted, were beaten 2 lengths or less, but started at a shorter price than last time (the market made allowance for the excuse). The mechanism predicts this group sits near par (about 1.0), and clearly below the drifted/unchanged group. The same-race other runners should sit at about par (0.95 to 1.0 after overround), which shows the lift is not a property of the races these horses run in.", "rule": "last_momentum_interrupted = 1 AND last_position > 1 AND last_beaten_lengths <= 2 AND last_sp_decimal IS NOT NULL AND sp_decimal < last_sp_decimal" }, "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": [ "Class rise today: a drift may reflect a tougher race rather than an overlooked excuse (refinement 2 checks this; race_class is mostly missing in IRE before 2026-07, so those runners are kept)", "Trip, going or course change: these can cause the drift on their own, so a drifted horse may be facing a real new handicap and not be ignored", "Longshot noise: drifted runners lean towards bigger prices, where a few winners swing A/E (refinement 1 caps the price at 14/1)", "Sample split: H19 has about 242 bets, so each half is thin and the drifted group may fall short of 150 bets; that should be read as a direction check, not a pass", "Market-wide price level: last_sp_decimal comes from a different race with a different field size and overround, so the drift is noisy as a measure of the market's opinion", "Exchange vs SP: H19's edge was mainly at BSP (19.1% vs 6.4% SP ROI), so an SP-based A/E may understate the edge" ], "mechanism": "H19 (stopped in its run last time, beaten 2 lengths or less) beats its price. If the reason is that the market does not see the in-running trouble, the value should sit where today's SP gives no credit for the excuse: the price is the same as or longer than last time. Where the price has shortened, the market has already priced the trouble and the edge should be gone.", "market_miss": "Bookmakers and most punters price from the result line: the finishing position and the margin. The interruption only shows in the race comments. A horse that drifts after a narrow, troubled defeat is one the market has read as 'beaten again', not 'unlucky'. When the price shortens, someone (connections, sharp punters, close readers of the comments) has already acted on the excuse.", "prediction": { "direction": "positive", "size": "A/E about 1.20 or more on the drifted/unchanged group (likely about 100 to 150 bets), clearly above the shortened group, which should sit near 1.0", "falsified_if": "A/E for the drifted/unchanged group below 1.05, or at or below the A/E of the shortened control group (sp_decimal < last_sp_decimal) over the same period" }, "notes": "The rule sketch was kept and one guard was added: last_sp_decimal IS NOT NULL, so the split is explicit. Equal prices count as 'not shortened', because the market made no allowance. Pass A/E was raised to 1.10, because this is a subset of an already-positive rule and needs to clear more than the floor to show a real concentration. The control comparison matters more than the absolute pass: if both halves come out about equal, the mechanism (market misses the excuse) is not supported, even though H19 itself may still work. The bet count will probably fall below 150. If so, judge the direction against the control and send it to falsification rather than reading it as a pass." }
Timeline
Job 1849 finished
· engine:compute-1
H-48a2eca6 Falsification → KILLED falsified: 2 of 5 attacks broke it; IRE: too few bets to judge
· engine:falsification
falsification result for H-48a2eca6 (partition: Partition: handicaps only, 14/1 or shorter): fail
· engine:evaluator
compute-1 took job 1849 (attack, attempt 1)
· compute-1
Job 1848 finished
· engine:compute-1
falsification result for H-48a2eca6 (perturbation: Perturb margin: beaten 2.5 lengths or less, drifted or unchanged): pass
· engine:evaluator
compute-1 took job 1848 (attack, attempt 1)
· compute-1
Job 1847 finished
· engine:compute-1
falsification result for H-48a2eca6 (perturbation: Perturb drift cut: price no more than 15% shorter than last time): pass
· engine:evaluator
compute-1 took job 1847 (attack, attempt 1)
· compute-1
Job 1846 finished
· engine:compute-1
falsification result for H-48a2eca6 (perturbation: Perturb drift cut: price at least 20% longer than last time): pass
· engine:evaluator
compute-1 took job 1846 (attack, attempt 1)
· compute-1
Job 1845 finished
· engine:compute-1
falsification result for H-48a2eca6 (control: Control: drifted narrow losers with no trouble last time): fail
· engine:evaluator
compute-1 took job 1845 (attack, attempt 1)
· compute-1
Job 1836 finished
· engine:ai-1
Queued attack on the compute lane: attack: Partition: handicaps only, 14/1 or shorter
· engine:scheduler
Queued attack on the compute lane: attack: Perturb margin: beaten 2.5 lengths or less, drifted or unchanged
· engine:scheduler