Hypotheses · story · H-ef39e062
Rival: the unchanged-mark lift is a mechanical non-reassessment, not the handicapper excusing a handicap run
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, 05:10
- 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-4013e103 (Rival: the undropped lift is raised marks (late win penalties), not ma) survived falsification: 5 of 6 attacks left it standing; it is frozen for its one vault query. O-b3b8f97d
- H-4013e103 (Rival: the undropped lift is raised marks (late win penalties), not ma) passed discovery: A/E 1.44 on 392 bets (p 0.007), same-race control 0.96. O-b5e09f2e
- AskedIs an unchanged mark after the heavy beating often mechanical, because the beating came in a non-handicap or under the other code's rating, so the handicapper never judged the run? testing
- MechanismExcuse story: after a handicap run, the official handicapper reviewed the 20+ length beating and declined to drop the mark, so the run was written off. Rival: when the beating came in a non-handicap, the mark often stays put by default. Then rating_change = 0 is just a record that nobody reassessed, and the lift comes from close form plus a heavy beating in a race the punters overrated. If the excuse story is right, the lift must hold when the last run was itself a handicap.
- Why the market misses itThe form line shows a 20+ length beating, and bettors mark the horse down. The rating line, showing that the handicapper reviewed the handicap run and kept the mark, is not read as a sign that the run was a one-off.
- Predictedpositive, A/E 1.25 to 1.50 on 250+ bets with last_is_handicap = 1
- Falsified if
Mechanism and rationale
Excuse story: after a handicap run, the official handicapper reviewed the 20+ length beating and declined to drop the mark, so the run was written off. Rival: when the beating came in a non-handicap, the mark often stays put by default. Then rating_change = 0 is just a record that nobody reassessed, and the lift comes from close form plus a heavy beating in a race the punters overrated. If the excuse story is right, the lift must hold when the last run was itself a handicap.
The rule
is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_is_handicap = 1 AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6 AND rating_change IS NOT NULL AND rating_change = 0Reads: is_handicap, race_type, last_is_handicap, last_beaten_lengths, best_last3_beaten, rating_change
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- e90acb6054ea5b3017b4eca2d564b4b88a8cf45d2edc98b0129693247803996b
- Frozen
- 17 Oct, 05:13
- Nothing in the definition can change after this.
- Confounders
- Heavy overlap with the frozen H-4013e103 (unchanged mark, 1.444 on 392). This is a split of that rule, not an independent confirmation, and both halves share its in-sample selection
- Non-handicap last runs are often in better class (graded or novice races), so the last_is_handicap = 0 remainder may carry a class-drop lift that has nothing to do with reassessment
- IRE marks change less often, so rating_change = 0 is less informative there and the split may differ by region (the GB refinement checks this)
- rating_change can be 0 because the horse ran again before the handicapper's weekly review. That would make some handicap-last cases mechanical too, which dilutes the excuse reading
- One jumps season of data (from Nov 2025), with the unchanged-mark rule falling from 1.58 to 1.28 after April 2026. Spring and summer jumps could account for that, not edge decay
- The lift in the parent rules sits at mid and long prices, so a few long-priced winners can drive A/E on a few hundred bets
- Control
{ "description": "Two comparisons. (1) The standard same-race control: the other runners in the same handicaps should score about 1.0, which shows the lift belongs to the selected horses and not to the races. (2) The rival-explanation remainder: the same rule with last_is_handicap = 0, meaning the beating came in a non-handicap and the handicapper had no handicap run to judge. Under the excuse story the handicap-last split scores at least as high as this remainder, and probably higher. If the remainder scores higher, or the handicap-last split falls to 1.10 or below, the unchanged mark is a non-reassessment artefact.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_is_handicap = 0 AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6 AND rating_change IS NOT NULL AND rating_change = 0" }
Discovery result
pass broad rule · 17 Oct, 05:11
- Bets
- 350
- 50 winners
- A/E
- 1.48
- 95%: 1.10 to 1.96
- SP return
- +22.7%
- level stakes
- Betfair SP return
- +55.2%
- 349 bets with a BSP
Strike rate 14.3%. p = 0.0051. 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 6 survived.
- control: Rival remainder: same rule but last run was a non-handicapinfo
42 bets · A/E 0.99 (0.20 to 2.90) · control 1.02 · 17 Oct, 05:13
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-2734–after 2026-04-278–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - partition: Review window: handicapper had time to reassess (8+ days since last run)pass
337 bets · A/E 1.53 (1.14 to 2.02) · control 0.95 · 17 Oct, 05:13
Breakdown
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, 05:13
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
448 bets · A/E 1.32 (1.00 to 1.70) · control 0.97 · 17 Oct, 05:13
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-272381.41after 2026-04-272101.21Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: >= 20 -> 24 (+20%)pass
272 bets · A/E 1.52 (1.07 to 2.08) · control 0.96 · 17 Oct, 05:13
Breakdown
Lineage
Agent runs
designer v1ok · 41s · 17 Oct, 05:10
Output (schema-checked)
{ "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_is_handicap = 1 AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6 AND rating_change IS NOT NULL AND rating_change = 0", "refinements": [ { "label": "14/1 or shorter", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_is_handicap = 1 AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6 AND rating_change IS NOT NULL AND rating_change = 0 AND sp_decimal <= 15" }, { "label": "GB only (marks reviewed more actively; tests the IRE confounder)", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_is_handicap = 1 AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6 AND rating_change IS NOT NULL AND rating_change = 0 AND region = 'GB'" } ], "control": { "description": "Two comparisons. (1) The standard same-race control: the other runners in the same handicaps should score about 1.0, which shows the lift belongs to the selected horses and not to the races. (2) The rival-explanation remainder: the same rule with last_is_handicap = 0, meaning the beating came in a non-handicap and the handicapper had no handicap run to judge. Under the excuse story the handicap-last split scores at least as high as this remainder, and probably higher. If the remainder scores higher, or the handicap-last split falls to 1.10 or below, the unchanged mark is a non-reassessment artefact.", "rule": "is_handicap = 1 AND race_type IN ('Hurdle', 'Chase') AND last_is_handicap = 0 AND last_beaten_lengths >= 20 AND best_last3_beaten IS NOT NULL AND best_last3_beaten <= 6 AND rating_change IS NOT NULL AND rating_change = 0" }, "pass_criteria": { "min_bets": 200, "min_ae": 1.15, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.05, "max_p": 0.2 }, "confounders": [ "Heavy overlap with the frozen H-4013e103 (unchanged mark, 1.444 on 392). This is a split of that rule, not an independent confirmation, and both halves share its in-sample selection", "Non-handicap last runs are often in better class (graded or novice races), so the last_is_handicap = 0 remainder may carry a class-drop lift that has nothing to do with reassessment", "IRE marks change less often, so rating_change = 0 is less informative there and the split may differ by region (the GB refinement checks this)", "rating_change can be 0 because the horse ran again before the handicapper's weekly review. That would make some handicap-last cases mechanical too, which dilutes the excuse reading", "One jumps season of data (from Nov 2025), with the unchanged-mark rule falling from 1.58 to 1.28 after April 2026. Spring and summer jumps could account for that, not edge decay", "The lift in the parent rules sits at mid and long prices, so a few long-priced winners can drive A/E on a few hundred bets" ], "mechanism": "Excuse story: the last run was a handicap, so the official handicapper reviewed the 20+ length beating and chose not to drop the mark. That verdict writes the run off as a one-off, and the horse's recent close form (within 6 lengths in its last three runs) is the truer guide. Rival: when the beating came in a non-handicap, the mark often stays put by default. Then rating_change = 0 only records that nobody reassessed, and any lift comes from close form plus a heavy beating that punters overrate. Restricting to last_is_handicap = 1 isolates the cases where an actual verdict was made.", "market_miss": "Bettors read the form figure, a 20+ length beating, and mark the horse down. They do not treat the unchanged rating after a reviewed handicap run as information, even though it means the handicapper judged the run unrepresentative. The horse goes off at a price that reflects the bad run and not the close form the handicapper effectively endorsed.", "prediction": { "direction": "positive", "size": "A/E 1.25 to 1.50 on 250+ bets with last_is_handicap = 1, at or above the last_is_handicap = 0 remainder", "falsified_if": "A/E at or below 1.10 on 200+ bets with last_is_handicap = 1, or the last_is_handicap = 0 remainder scoring higher than the handicap-last split. Either would mean the unchanged-mark lift is a non-reassessment artefact and not the handicapper's excuse verdict." }, "notes": "I kept the rule sketch and only added explicit IS NOT NULL guards on best_last3_beaten and rating_change, to match the frozen parent H-4013e103. Pass criteria are stricter than the floor: 200 bets and A/E 1.15, which matches the falsification threshold. Both refinements come from the reasoning: the price band where the parent's lift sits, and the IRE mark-change confounder. The remainder comparison (last_is_handicap = 0) decides the question, so the lab should report it next to the same-race control." }
Timeline
Job 3187 finished
· engine:compute-1
hypothesis note H-ef39e062
· engine:perturb
perturbation result for H-ef39e062 (neighbour: drop: race_type IN ('Hurdle', 'Chase')): pass
· engine:perturb
perturbation result for H-ef39e062 (neighbour: drop: is_handicap = 1): pass
· engine:perturb
perturbation result for H-ef39e062 (neighbour: <= 6 -> 7 (+20%)): pass
· engine:perturb
perturbation result for H-ef39e062 (neighbour: <= 6 -> 5 (-20%)): pass
· engine:perturb
perturbation result for H-ef39e062 (neighbour: >= 20 -> 24 (+20%)): pass
· engine:perturb
perturbation result for H-ef39e062 (neighbour: >= 20 -> 16 (-20%)): pass
· engine:perturb
compute-1 took job 3187 (mutate, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Job 3182 finished
· engine:compute-1
forward result for H-ef39e062 (forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 3182 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 3179 finished
· engine:compute-1
H-ef39e062 Frozen → SHADOW vault skipped: last_beaten_lengths, best_last3_beaten, rating_change do not exist before the discovery zone; track it forward instead
· engine:orchestrator