Hypotheses · story · H-d61d2109
Sharpen: held-up PU in an attritional race where many failed to finish
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, 01:33
- 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
- H36-pulled-up-after-being-held-up (H36: pulled up after being held up) was GREEN in the earlier research: A/E 1.19 on 1451 bets (periods 1.07 / 1.41); now PROMISING. O-309e6a2d
- AskedIs the lift strongest when the last race was attritional, with many runners not finishing, so the PU says little about this horse? answered
- MechanismWhen a large share of a field does not finish (testing ground, a strong pace, a long trip), held-up runners are pulled up because the race fell apart in front of them. That says nothing about their ability or wellbeing.
- Why the market misses itThe form figure is the same P whether 1 or 6 runners pulled up. The context sits only in the full result, which most punters do not read.
- Predictedpositive, A/E 1.25 to 1.45 on 300+ bets
- Falsified ifA/E below 1.10, or not above the low-DNF-share complement (last_race_dnf_share < 0.25)
- Rule sketch
last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_dnf_share >= 0.25 - question id
Mechanism and rationale
When a large share of a field does not finish (testing ground, a strong pace, a long trip), held-up runners are pulled up because the race fell apart in front of them. That says nothing about their ability or wellbeing.
The rule
last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_dnf_share IS NOT NULL AND last_race_dnf_share >= 0.25Reads: last_pulled_up, last_run_style, last_race_dnf_share
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 1c0d4decadaf0efee767c255b6c1a84673dff621cfe3ec2855630e6dee780b50
- Frozen
- 17 Oct, 01:36
- Nothing in the definition can change after this.
- Confounders
- Attritional races are mostly soft/heavy staying chases in winter; today's run may be on similar ground, so going/season could drive the result (H101 going-change rival was killed, but ground level itself is not excluded)
- Last-race field size: a 25% DNF share in a small field is 1-2 horses, so share is noisy in small fields
- Price drift after a PU: the lift may be a generic 'PU horses go off too big' effect common to both high and low DNF share (the control tests this)
- Overlap with the one-off chase-error pool (many PUs follow errors) already found in discovery in this family
- Only ~12 months of data (last_pulled_up and last_run_style from 2025-11-01), so a single season's ground can dominate
- Run-style labelling: 'held_up'/'midfield' values are taken from the observation; mislabelled styles would dilute the test
- Control
{ "description": "Primary control is the low-attrition complement: held-up/midfield runners pulled up last time in a race where under 25% failed to finish, i.e. an individual PU that more plausibly signals a problem. The mechanism predicts this group is at or near par (A/E ~0.9-1.05) and clearly below the test rule. The lab's same-race other runners should sit near 1.0; if they also show a lift, the effect is a property of today's race (e.g. weak fields after attritional meetings), not of the context-free P.", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_dnf_share IS NOT NULL AND last_race_dnf_share < 0.25" }
Discovery result
pass broad rule (niche) · 17 Oct, 01:35
- Bets
- 921
- 63 winners
- A/E
- 1.15
- 95%: 0.88 to 1.46
- SP return
- -29.3%
- level stakes
- Betfair SP return
- +5.3%
- 919 bets with a BSP
Strike rate 6.8%. p = 0.16. Same-race control: the other runners in these races had A/E 0.99, 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.
- perturbation: DNF-share cut lowered to 0.20pass
1,072 bets · A/E 1.17 (0.92 to 1.47) · control 0.99 · 17 Oct, 01:36
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-276821.14after 2026-04-273901.24Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: DNF-share cut raised to 0.30pass
689 bets · A/E 1.17 (0.86 to 1.54) · control 0.99 · 17 Oct, 01:36
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, 01:36
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: >= 0.25 -> 0.2 (-20%)pass
1,072 bets · A/E 1.17 (0.92 to 1.47) · control 0.99 · 17 Oct, 01:36
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-276821.14after 2026-04-273901.24Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: >= 0.25 -> 0.3 (+20%)pass
689 bets · A/E 1.17 (0.86 to 1.54) · control 0.99 · 17 Oct, 01:36
Breakdown
Lineage
Agent runs
designer v1ok · 39s · 17 Oct, 01:34
Output (schema-checked)
{ "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_dnf_share IS NOT NULL AND last_race_dnf_share >= 0.25", "refinements": [ { "label": "held-up only (purest form of 'race fell apart in front of them')", "rule": "last_pulled_up = 1 AND last_run_style = 'held_up' AND last_race_dnf_share IS NOT NULL AND last_race_dnf_share >= 0.25" }, { "label": "14/1 or shorter today (story-family edges die at big prices)", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_dnf_share IS NOT NULL AND last_race_dnf_share >= 0.25 AND sp_decimal <= 15.0" }, { "label": "highly attritional last race (a third or more failed to finish)", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_dnf_share IS NOT NULL AND last_race_dnf_share >= 0.33" } ], "control": { "description": "Primary control is the low-attrition complement: held-up/midfield runners pulled up last time in a race where under 25% failed to finish, i.e. an individual PU that more plausibly signals a problem. The mechanism predicts this group is at or near par (A/E ~0.9-1.05) and clearly below the test rule. The lab's same-race other runners should sit near 1.0; if they also show a lift, the effect is a property of today's race (e.g. weak fields after attritional meetings), not of the context-free P.", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_dnf_share IS NOT NULL AND last_race_dnf_share < 0.25" }, "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": [ "Attritional races are mostly soft/heavy staying chases in winter; today's run may be on similar ground, so going/season could drive the result (H101 going-change rival was killed, but ground level itself is not excluded)", "Last-race field size: a 25% DNF share in a small field is 1-2 horses, so share is noisy in small fields", "Price drift after a PU: the lift may be a generic 'PU horses go off too big' effect common to both high and low DNF share (the control tests this)", "Overlap with the one-off chase-error pool (many PUs follow errors) already found in discovery in this family", "Only ~12 months of data (last_pulled_up and last_run_style from 2025-11-01), so a single season's ground can dominate", "Run-style labelling: 'held_up'/'midfield' values are taken from the observation; mislabelled styles would dilute the test" ], "mechanism": "When a large share of a field fails to finish (testing ground, strong pace, long trip), held-up and midfield runners are often pulled up because the race collapsed ahead of them and the jockey looked after the horse, not because the horse was unwell or lacking ability. Such a PU carries little negative information about the horse's next run, unlike a PU where the rest of the field finished.", "market_miss": "The form figure reads 'P' whether one or six runners pulled up; the race-wide context is only visible in the full result. Punters and price-makers reading form figures mark the horse down uniformly, so held-up PUs from attritional races go off bigger than their chance.", "prediction": { "direction": "positive", "size": "A/E 1.25 to 1.45 on 300+ bets", "falsified_if": "A/E below 1.10 on the broad rule, or A/E not above the low-DNF-share control (last_race_dnf_share < 0.25), or the same-race other runners show a comparable lift" }, "notes": "Kept the sketch, adding a NULL guard on last_race_dnf_share. Key columns are available only from 2025-11-01, so discovery covers about one season. I checked that the columns exist but could not check the run-style labels ('held_up', 'midfield'). If the rule returns almost no rows, check those labels first. The min_ae is raised to 1.10 to match the falsification threshold." }
Timeline
Job 2305 finished
· engine:compute-1
hypothesis note H-d61d2109
· engine:perturb
perturbation result for H-d61d2109 (neighbour: drop: last_race_dnf_share >= 0.25): pass
· engine:perturb
perturbation result for H-d61d2109 (neighbour: drop: last_race_dnf_share IS NOT NULL): pass
· engine:perturb
perturbation result for H-d61d2109 (neighbour: drop: last_run_style IN ('held_up', 'midfield')): pass
· engine:perturb
perturbation result for H-d61d2109 (neighbour: drop: last_pulled_up = 1): fail
· engine:perturb
perturbation result for H-d61d2109 (neighbour: >= 0.25 -> 0.3 (+20%)): pass
· engine:perturb
perturbation result for H-d61d2109 (neighbour: >= 0.25 -> 0.2 (-20%)): pass
· engine:perturb
compute-1 took job 2305 (mutate, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Job 2301 finished
· engine:compute-1
forward result for H-d61d2109 (forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 2301 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 2297 finished
· engine:compute-1
H-d61d2109 Frozen → SHADOW vault skipped: last_pulled_up, last_run_style do not exist before the discovery zone; track it forward instead
· engine:orchestrator