Hypotheses · story · H-dc628b02
Test-mechanism: changed going lifts held-up pull-ups even on a quick return
falsified: driven by one price band (up to 14/1): the rest score 0.97; 2 of 5 attacks broke it
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
- test-mechanism
- Created
- 17 Oct, 01:48
- Tests logged
- 9
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-995c6f24 (Rival: held-up PU lift comes from a change of ground since the pull-up) passed discovery: A/E 1.3 on 940 bets (p 0.02), same-race control 0.98. O-67404c8b
- H-d084cd23 (Rival: held-up PU lift is a small-field summer artefact) pointed the predicted way but failed the bar: A/E 1.09 on 595 bets (p 0.282), control 0.99. O-d92d9ec3
- AskedDoes the changed-going lift for held-up pull-ups survive among horses brought back within 35 days, where freshening cannot be the cause? answered
- MechanismIf the pull-up was caused by that day's ground and not by fatigue or lack of fitness, then a quick return on different ground removes the cause without any rest being needed. The lift should then appear in quick returners too.
- Why the market misses itThe form shows a recent P. A quick turnaround looks like the yard chasing a horse that has just failed, so the market lays it. The change of going is not priced as removing the cause.
- Predictedpositive, A/E 1.15 to 1.35 on 300+ bets, clearly above the quick-return same-going pool
- Falsified ifA/E below 1.08, or no better than held-up pull-ups returning within 35 days on the same going. Either would leave freshening, not ground, as the cause.
- Rule sketch
last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_going_group IS NOT NULL AND going_group IS NOT NULL AND going_group <> last_going_group AND days_since_last_run <= 35
The question's answer so far: Barely. Changed going among horses back within 35 days scored 1.09 on 449, close to the quick-return pool's 1.027. Only the up-to-14/1 band carried it, and it was killed (rest 0.97, 2 of 5 attacks broke it).
Mechanism and rationale
If the pull-up was caused by that day's ground and not by fatigue or lack of fitness, then a quick return on different ground removes the cause without any rest being needed. The lift should then appear in quick returners too.
The rule
last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_going_group IS NOT NULL AND going_group IS NOT NULL AND going_group <> last_going_group AND days_since_last_run IS NOT NULL AND days_since_last_run <= 35Reads: last_pulled_up, last_run_style, last_going_group, going_group, days_since_last_run
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 56aff0b17875a1a41d330eda2b99dcff525ae2581b28266c879b149704a3cbba
- Frozen
- not frozen
- The definition can still change.
- Confounders
- season: quick returns on changed ground may bunch at the spring and autumn going changeovers. Earlier cuts in this thread got their lift after 27 April 2026, so check both periods (before and after 27 April 2026).
- price: 16/1 or bigger has been at or below par in every held-up pull-up split. Any lift may be only in shorter-priced runners (refinement 1).
- race_type: a chase pull-up may come from jumping problems, not the ground, which weakens the mechanism there (refinement 2).
- overlap with the parent changed-going pool (1.296 on 940): this is a subset of it, so a pass mostly restates the parent unless it also beats the same-going quick-return control.
- freshening and general bounce-back: within-35-day held-up pull-ups scored 1.027 on 777 overall, so the lift has to come from the going change and not from the quick return.
- region: results in this thread have been led by GB, so check GB and IRE separately.
- Control
{ "description": "The key comparison is held-up or midfield pull-ups back within 35 days on the SAME going group as the pull-up. The mechanism says the ground caused the pull-up, so this group should sit near par, around the 0.93 of the same-going parent. The test rule needs to beat it by at least 0.10 A/E. If both groups show similar lifts, freshening or a general pull-up bounce explains it, not the ground. The other runners in the same races should sit at about 1.0. If they also score well above par, the effect belongs to the race (changed-ground meetings, the season) and not to the horse.", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_going_group IS NOT NULL AND going_group IS NOT NULL AND going_group = last_going_group AND days_since_last_run IS NOT NULL AND days_since_last_run <= 35" }
Discovery result
pass broad rule (niche) · 17 Oct, 01:53
- Bets
- 449
- 27 winners
- A/E
- 1.09
- 95%: 0.72 to 1.59
- SP return
- -38.4%
- level stakes
- Betfair SP return
- -17.7%
- 447 bets with a BSP
Strike rate 6.0%. p = 0.35. Same-race control: the other runners in these races had A/E 1.00, 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: Same-going quick-return control (no going change)fail
327 bets · A/E 0.90 (0.47 to 1.57) · control 1.01 · 17 Oct, 01:53
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-271820.80after 2026-04-271451.03Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: Tighter quick return: back within 28 dayspass
354 bets · A/E 1.17 (0.72 to 1.78) · control 0.99 · 17 Oct, 01:53
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.
Lineage
Agent runs
designer v1ok · 26s · 17 Oct, 01:48
Output (schema-checked)
{ "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_going_group IS NOT NULL AND going_group IS NOT NULL AND going_group <> last_going_group AND days_since_last_run IS NOT NULL AND days_since_last_run <= 35", "refinements": [ { "label": "shorter than 16/1", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_going_group IS NOT NULL AND going_group IS NOT NULL AND going_group <> last_going_group AND days_since_last_run IS NOT NULL AND days_since_last_run <= 35 AND sp_decimal < 17" }, { "label": "non-chase (ground, not jumping, as the pull-up cause)", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_going_group IS NOT NULL AND going_group IS NOT NULL AND going_group <> last_going_group AND days_since_last_run IS NOT NULL AND days_since_last_run <= 35 AND race_type <> 'Chase'" } ], "control": { "description": "The key comparison is held-up or midfield pull-ups back within 35 days on the SAME going group as the pull-up. The mechanism says the ground caused the pull-up, so this group should sit near par, around the 0.93 of the same-going parent. The test rule needs to beat it by at least 0.10 A/E. If both groups show similar lifts, freshening or a general pull-up bounce explains it, not the ground. The other runners in the same races should sit at about 1.0. If they also score well above par, the effect belongs to the race (changed-ground meetings, the season) and not to the horse.", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_going_group IS NOT NULL AND going_group IS NOT NULL AND going_group = last_going_group AND days_since_last_run IS NOT NULL AND days_since_last_run <= 35" }, "pass_criteria": { "min_bets": 200, "min_ae": 1.08, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.05, "max_p": 0.2 }, "confounders": [ "season: quick returns on changed ground may bunch at the spring and autumn going changeovers. Earlier cuts in this thread got their lift after 27 April 2026, so check both periods (before and after 27 April 2026).", "price: 16/1 or bigger has been at or below par in every held-up pull-up split. Any lift may be only in shorter-priced runners (refinement 1).", "race_type: a chase pull-up may come from jumping problems, not the ground, which weakens the mechanism there (refinement 2).", "overlap with the parent changed-going pool (1.296 on 940): this is a subset of it, so a pass mostly restates the parent unless it also beats the same-going quick-return control.", "freshening and general bounce-back: within-35-day held-up pull-ups scored 1.027 on 777 overall, so the lift has to come from the going change and not from the quick return.", "region: results in this thread have been led by GB, so check GB and IRE separately." ], "mechanism": "If the pull-up was caused by that day's ground (the horse could not act on it) and not by fatigue, lack of fitness or a problem, then running on a different going group removes the cause straight away. No rest is needed, so held-up or midfield pull-ups back within 35 days on changed ground should keep the changed-going lift. The matching runners on the same going should not.", "market_miss": "The form figures show a fresh P, and a quick turnaround looks like the yard chasing a horse that has just failed, so the market lays it. Punters and odds compilers read the P as a sign of form or well-being. They do not price the change of going as removing the reason it pulled up.", "prediction": { "direction": "positive", "size": "A/E 1.15 to 1.35 on 300+ bets, at least 0.10 above the quick-return same-going control", "falsified_if": "A/E below 1.08, or not at least 0.10 above held-up or midfield pull-ups back within 35 days on the same going. Either would leave freshening or a general bounce-back, not the ground, as the cause." }, "notes": "I kept the rule sketch and added only days_since_last_run IS NOT NULL to handle missing values. Pass criteria are tighter than the floor (200 bets, A/E 1.08) to match the prediction's falsifier, and the forward bar is raised to A/E 1.05. sp_decimal < 17 gives prices shorter than 16/1. I did not add a refinement on the direction of the going change because the reasoning does not ask for one." }
Timeline
Job 2370 finished
· engine:compute-1
H-dc628b02 Falsification → KILLED falsified: driven by one price band (up to 14/1): the rest score 0.97; 2 of 5 attacks broke it
· engine:falsification
falsification result for H-dc628b02 (partition: Handicaps only): pass
· engine:evaluator
compute-1 took job 2370 (attack, attempt 1)
· compute-1
Job 2369 finished
· engine:compute-1
falsification result for H-dc628b02 (partition: Non-chase only (ground, not jumping, as the cause)): fail
· engine:evaluator
compute-1 took job 2369 (attack, attempt 1)
· compute-1
Job 2368 finished
· engine:compute-1
falsification result for H-dc628b02 (partition: Shorter than 16/1 only): pass
· engine:evaluator
compute-1 took job 2368 (attack, attempt 1)
· compute-1
Job 2367 finished
· engine:compute-1
falsification result for H-dc628b02 (perturbation: Tighter quick return: back within 28 days): pass
· engine:evaluator
compute-1 took job 2367 (attack, attempt 1)
· compute-1
Job 2366 finished
· engine:compute-1
falsification result for H-dc628b02 (control: Same-going quick-return control (no going change)): fail
· engine:evaluator
compute-1 took job 2366 (attack, attempt 1)
· compute-1
Job 2365 finished
· engine:ai-1
Queued attack on the compute lane: attack: Handicaps only
· engine:scheduler
Queued attack on the compute lane: attack: Non-chase only (ground, not jumping, as the cause)
· engine:scheduler
Queued attack on the compute lane: attack: Shorter than 16/1 only
· engine:scheduler