Hypotheses · trajectory · H-e2cae105
Rival: the chase unseat lift is a jockey-change effect
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
Part of the thread “H85: fell when going well” 20 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- rival-explanation
- Created
- 17 Oct, 03:03
- Tests logged
- 14
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-9f59a0ed (Sharpen: chase unseaters with no jumping error recorded last time) is unstable: 2 of 4 neighbouring rules lose the effect (base A/E 1.41; e.g. drop: race_type = 'Chase' -> 0.9; drop: last_non_finish_code = 'UR' -> 0.99). O-4e460c4e
- H-a44d6bdc (Rival: the chase unseater lift is a long-price artefact; test unseater) passed discovery as a niche: A/E 1.35 on 122 bets (p 0.084), same-race control 0.94. O-c1cf83dc
- AskedIs the chase unseat lift carried by runs where the rider has changed since the unseat, rather than by the horse's hidden ability? answered
- MechanismTrainers often replace the rider who came off with a stronger or more experienced jockey. That upgrade, not hidden ability, could be what wins the next race.
- Why the market misses itThe market may mark the horse down for the U without fully crediting the change of rider, especially at mid-range prices.
- Predictedpositive, A/E 1.40 to 1.60 on 100+ bets if the rival holds
- Falsified ifSwitched-jockey unseaters score at or below the full pool's 1.26 to 1.40, which would mean the lift does not depend on the change of rider.
- Rule sketch
Mechanism and rationale
Trainers often replace the rider who came off with a stronger or more experienced jockey. That upgrade, not hidden ability, could be what wins the next race.
The rule
race_type = 'Chase' AND last_non_finish_code = 'UR' AND jockey_id <> last_jockey_id
Reads: race_type, last_non_finish_code, jockey_id, last_jockey_id
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 42e3272785e0fb2bc7339b4ad6f8b150720f7077b7e7061b7375949274731d50
- Frozen
- 17 Oct, 03:10
- Nothing in the definition can change after this.
- Confounders
- Claimers or conditional riders being replaced by senior jockeys: their allowance is lost, so the horse carries more weight. This works against the effect and mixes up 'upgrade' with weight.
- Trainer or yard: big yards switch to their stable jockey more often and may also place horses better after a U.
- Price band: most of the unseater profit sits at 16/1 or bigger (4 wins from 91). A few long-price winners could drive either group.
- Handicap mark: a U leaves the mark unchanged, which helps both groups equally and is not specific to the rider change.
- Last run's rider being unavailable (injured in the fall, or booked elsewhere) instead of sacked. Not every switch is an upgrade.
- Data window: last_non_finish_code only exists from 2025-01-01, so the sample is short and seasonally clustered.
- Control
{ "description": "The decisive comparison is unseaters that keep the same rider. If the rival holds, same-jockey chase unseaters should sit near par (A/E about 1.0 to 1.15) while switched-jockey unseaters carry the lift (1.40+). If both groups show similar lift (both around 1.3 to 1.4), the lift does not depend on the change of rider and the rival fails. Also, the other runners in the same races should be at par (about 0.95 to 1.0), as they were for the full unseater pool (0.94 to 0.96). Rows with a null jockey_id or last_jockey_id fall out of both groups, so the two groups will not add up to the 213-bet full pool. Report the size of the gap and do not compare the groups by subtracting one from the full pool.", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND jockey_id = last_jockey_id" }
Discovery result
pass broad rule (niche) · 17 Oct, 03:09
- Bets
- 116
- 14 winners
- A/E
- 1.36
- 95%: 0.74 to 2.28
- SP return
- -0.6%
- level stakes
- Betfair SP return
- +47.1%
- 116 bets with a BSP
Strike rate 12.1%. p = 0.16. 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. 3 of 5 survived.
- control: Same-rider chase unseaters (decisive control)pass
97 bets · A/E 1.45 (0.81 to 2.39) · control 0.95 · 17 Oct, 03:10
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-27621.67after 2026-04-2735–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - partition: Switched rider, under 16/1 only (strip the long-price winners)pass
59 bets · A/E 1.35 (0.70 to 2.37) · control 0.95 · 17 Oct, 03:10
Breakdown
Sealed holdout (vault)
- Bets
- 0
- 17 Oct, 03:10
- A/E
- –
- p = 1.0
- BH threshold then
- 0.0020
- over every vault test so far
- Outcome
- Failed
- vault query (supportive)pass
0 bets · · 17 Oct, 03:10
Breakdown
betsA/E0.71.01.32020-220–2023 to Sept 20250–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Forward record
- forward vs bar {'min_bets': 100, 'min_ae': 1.0, 'max_p': 0.2}info
0 bets · · 17 Oct, 03:10
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: drop: race_type = 'Chase'pass
341 bets · A/E 1.14 (0.78 to 1.62) · control 0.98 · 17 Oct, 03:10
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-271631.18after 2026-04-271781.11Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: drop: last_non_finish_code = 'UR'fail
6,765 bets · A/E 0.99 (0.93 to 1.07) · control 1.01 · 17 Oct, 03:10
Breakdown
Lineage
Agent runs
designer v1ok · 37s · 17 Oct, 03:04
Output (schema-checked)
{ "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND jockey_id <> last_jockey_id", "refinements": [ { "label": "Mid-range prices (under 16/1), where the market_miss says the rider change is under-credited", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND jockey_id <> last_jockey_id AND sp_decimal < 17" }, { "label": "Upgrade to an established, winning jockey (the mechanism's 'stronger or more experienced' rider)", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND jockey_id <> last_jockey_id AND jockey_runs >= 100 AND jockey_wins >= 0.12 * jockey_runs" } ], "control": { "description": "The decisive comparison is unseaters that keep the same rider. If the rival holds, same-jockey chase unseaters should sit near par (A/E about 1.0 to 1.15) while switched-jockey unseaters carry the lift (1.40+). If both groups show similar lift (both around 1.3 to 1.4), the lift does not depend on the change of rider and the rival fails. Also, the other runners in the same races should be at par (about 0.95 to 1.0), as they were for the full unseater pool (0.94 to 0.96). Rows with a null jockey_id or last_jockey_id fall out of both groups, so the two groups will not add up to the 213-bet full pool. Report the size of the gap and do not compare the groups by subtracting one from the full pool.", "rule": "race_type = 'Chase' AND last_non_finish_code = 'UR' AND jockey_id = last_jockey_id" }, "pass_criteria": { "min_bets": 150, "min_ae": 1.05, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1, "max_p": 0.2 }, "confounders": [ "Claimers or conditional riders being replaced by senior jockeys: their allowance is lost, so the horse carries more weight. This works against the effect and mixes up 'upgrade' with weight.", "Trainer or yard: big yards switch to their stable jockey more often and may also place horses better after a U.", "Price band: most of the unseater profit sits at 16/1 or bigger (4 wins from 91). A few long-price winners could drive either group.", "Handicap mark: a U leaves the mark unchanged, which helps both groups equally and is not specific to the rider change.", "Last run's rider being unavailable (injured in the fall, or booked elsewhere) instead of sacked. Not every switch is an upgrade.", "Data window: last_non_finish_code only exists from 2025-01-01, so the sample is short and seasonally clustered." ], "mechanism": "After a chase unseat, trainers often replace the rider who came off with a stronger or more experienced jockey. The rival explanation says this rider upgrade, not hidden ability shown before the unseat, is what produces the next-time lift (A/E 1.40 on 213 for all chase unseaters). If so, the lift should sit in the switched-jockey runs and be absent when the same rider keeps the ride.", "market_miss": "The market marks the horse down for the U in the form figures. It may not fully price in that the rider who came off has been replaced by a better one, especially at mid-range prices, where the jockey booking moves the price less than it does for favourites.", "prediction": { "direction": "positive", "size": "A/E 1.40 to 1.60 on roughly 100 to 150 bets for switched-jockey chase unseaters, with the same-jockey control near 1.0 to 1.15.", "falsified_if": "Switched-jockey unseaters score at or below the full pool's 1.26 to 1.40, or the same-jockey control shows a similar lift (within about 0.1 A/E of the switched group). Either would mean the lift does not depend on the change of rider." }, "notes": "I kept the rule sketch as written. jockey_id, last_jockey_id and last_non_finish_code are all pre-off. last_non_finish_code is only available from 2025-01-01, so the full pool is 213 bets and the switched subset will probably fall short of the 150-bet floor. If it points the right way it should go to falsification and forward tracking rather than be killed for size. The test that matters is the gap between the switched group and the same-jockey control. A lift in the switched group alone is not enough. The NULL-safe inequality excludes rows with a missing jockey id. Earlier findings showed that flag subsets in this family do not reconcile, so compare the two groups directly and do not derive either one by subtraction. The jockey-quality cutoff in refinement 2 (100+ runs, 12%+ strike rate) is pre-registered as a rough 'established jockey' threshold and must not be tuned." }
Timeline
Job 2605 finished
· engine:compute-1
hypothesis note H-e2cae105
· engine:perturb
perturbation result for H-e2cae105 (neighbour: drop: jockey_id <> last_jockey_id): pass
· engine:perturb
perturbation result for H-e2cae105 (neighbour: drop: last_non_finish_code = 'UR'): fail
· engine:perturb
perturbation result for H-e2cae105 (neighbour: drop: race_type = 'Chase'): pass
· engine:perturb
compute-1 took job 2605 (mutate, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Job 2600 finished
· engine:compute-1
forward result for H-e2cae105 (forward vs bar {'min_bets': 100, 'min_ae': 1.0, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 2600 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 2596 finished
· engine:compute-1
H-e2cae105 Vault → SHADOW vault SUPPORTIVE: A/E None on 0 bets, p 1 against BH threshold 0.002 over 50 vault tests
· engine:orchestrator
vault result for H-e2cae105 (vault query (supportive)): pass
· engine:orchestrator
H-e2cae105 Frozen → FROZENvault vault query started
· engine:orchestrator
compute-1 took job 2596 (vault, attempt 1)
· compute-1
Job 2589 finished
· engine:compute-1
Queued vault on the compute lane: frozen: one sealed vault query
· engine:scheduler