Hypotheses · yard-planned-move · H-53ab001f
Recruit to a yard good with new arrivals, after a heavy beating for its old trainer
fails: A/E 0.926, needs 1.08; p 0.6747, needs 0.05 or lower; periods [0.79, 1.07], each needs 1.0; A/E 0.926 against same-race control 1.002, needs 0.03 above (not a niche pass: A/E 0.926 below 1.08; p 0.6747490585626843 above 0.5; does not beat the same-race control 1.002; a period points the other
Starts the thread “Recruit to a yard good with new arrivals, after a heavy beating for its old trainer” 3 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Scout agent, v1
- Made by
- scout
- Created
- 17 Oct, 04:56
- Tests logged
- 1
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-2af132dc (Generalise: an unchanged mark after a heavy beating lifts close-form j) passed discovery: A/E 1.31 on 506 bets (p 0.026), same-race control 0.98. O-388a8a14
- H-6243bb06 (Test-mechanism: undropped recent winners after a heavy beating, given ) passed discovery: A/E 1.42 on 249 bets (p 0.034), same-race control 0.97. O-b3313152
- AskedIs the yard's new-recruit edge concentrated in horses whose last run for their old trainer was a heavy beating?
- MechanismOwners move horses after bad runs. A yard with a proven record of improving recruits brings a new routine, a new vet, new tack and a trip or ground better suited to the horse. That fixes what went wrong under the old trainer, and the heavy beating shows how much there was to fix.
- Why the market misses itThe form line shows a 15+ length beating, and the public reads it as declining ability. The trainer change is visible, but the market prices a generic switch. The receiving yard's specific record with recruits is not on the card, and the ugly run puts people off.
- Predictedpositive, A/E 1.12 to 1.25 on 200+ bets
- Falsified ifA/E below 1.03 on 150+ bets, or recruits to the same yards with a close last run score as high or higher
- Rule sketch
trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_beaten_lengths >= 15
Mechanism and rationale
Owners move horses after bad runs. A yard with a proven record of improving recruits brings a new routine, a new vet, new tack and a trip or ground better suited to the horse. That fixes what went wrong under the old trainer, and the heavy beating shows how much there was to fix.
The rule
trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_field_size >= 6 AND last_position >= 0.6 * last_field_size
Reads: trainer_id, last_trainer_id, tx_new_yard_runs, tx_new_yard_wins, tx_new_yard_exp, last_field_size, last_position
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- cbdd59a0e1c1efab831b112e8872ac5738d3cf02ed956e4a5e87ade7752a52b1
- Frozen
- not frozen
- The definition can still change.
- Confounders
- Overlap with the fresh-yard rule: moves often come with a break, so test the not-fresh refinement and read the two rules as sharing runners
- Concentration in a few big recruiting yards (point-to-point buyers, Irish mega-yards); check that no single trainer_id carries the lift
- Code split: the source slice was Flat, so report Flat and jumps separately
- Price band: if the lift sits only at 16/1+, it rests on a handful of winners
- Fake moves: a licence passing within a family or to a joint licence changes trainer_id without a new yard
- Proxy: finishing in the back 40% of the field stands in for 'beaten 15+ lengths', which only exists from 2025-11; in big fields and staying races the two mostly agree, in small sprint fields less so
- Selection by the yard's own record: tx_new_yard_wins >= 1.3*exp over 15+ runs partly selects lucky yards, so regression to the mean pulls the result down
- Control
{ "description": "Same-race rivals should score about 1.0 (A/E 0.95 to 1.02); if they also score high, the lift belongs to the race and not to the move. The key control is recruits to the same qualifying yards whose last run for the old trainer was close (placed 1st to 3rd). The hypothesis says the edge is concentrated after a heavy beating, so this group should score clearly lower than the broad rule. If it scores as high or higher, the 'heavy beating' part of the mechanism is falsified, even though the yard's recruit record itself may still be real.", "rule": "trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_position <= 3" }
Discovery result
fail broad rule · 17 Oct, 05:01
- Bets
- 422
- 25 winners
- A/E
- 0.93
- 95%: 0.60 to 1.37
- SP return
- -36.4%
- level stakes
- Betfair SP return
- -19.0%
- 404 bets with a BSP
Strike rate 5.9%. p = 0.67. Same-race control: the other runners in these races had A/E 1.00, so the selection did not beat its own races. Zone: discovery. Evaluator eval-1.0, data 6a4e98be18e83933
By period
Falsification
No attacks yet. Only promising ideas are attacked.
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 · 49s · 17 Oct, 04:57
Output (schema-checked)
{ "rule": "trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_field_size >= 6 AND last_position >= 0.6 * last_field_size", "refinements": [ { "label": "14/1 or shorter", "rule": "trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_field_size >= 6 AND last_position >= 0.6 * last_field_size AND sp_decimal <= 15.0" }, { "label": "not fresh (separates from the fresh-yard rule)", "rule": "trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_field_size >= 6 AND last_position >= 0.6 * last_field_size AND days_since_last_run <= 90" }, { "label": "dose: bottom quarter of a field of 8+", "rule": "trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_field_size >= 8 AND last_position >= 0.75 * last_field_size" } ], "control": { "description": "Same-race rivals should score about 1.0 (A/E 0.95 to 1.02); if they also score high, the lift belongs to the race and not to the move. The key control is recruits to the same qualifying yards whose last run for the old trainer was close (placed 1st to 3rd). The hypothesis says the edge is concentrated after a heavy beating, so this group should score clearly lower than the broad rule. If it scores as high or higher, the 'heavy beating' part of the mechanism is falsified, even though the yard's recruit record itself may still be real.", "rule": "trainer_id <> last_trainer_id AND tx_new_yard_runs >= 15 AND tx_new_yard_wins >= 1.3 * tx_new_yard_exp AND last_position <= 3" }, "pass_criteria": { "min_bets": 150, "min_ae": 1.08, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.03, "max_p": 0.2 }, "confounders": [ "Overlap with the fresh-yard rule: moves often come with a break, so test the not-fresh refinement and read the two rules as sharing runners", "Concentration in a few big recruiting yards (point-to-point buyers, Irish mega-yards); check that no single trainer_id carries the lift", "Code split: the source slice was Flat, so report Flat and jumps separately", "Price band: if the lift sits only at 16/1+, it rests on a handful of winners", "Fake moves: a licence passing within a family or to a joint licence changes trainer_id without a new yard", "Proxy: finishing in the back 40% of the field stands in for 'beaten 15+ lengths', which only exists from 2025-11; in big fields and staying races the two mostly agree, in small sprint fields less so", "Selection by the yard's own record: tx_new_yard_wins >= 1.3*exp over 15+ runs partly selects lucky yards, so regression to the mean pulls the result down" ], "mechanism": "Owners move horses after bad runs. A receiving yard with a proven record of improving recruits (15+ recruit runs, wins at least 1.3 times what the prices implied, to yesterday) brings a new routine, vet, tack and a choice of trip and ground. That fixes what went wrong under the old trainer. A heavy beating last time (back 40% of a field of 6+) marks a horse with the most to fix, so the yard's recruit edge should be biggest there.", "market_miss": "The form line shows a bad finish for the old yard, and punters read it as declining ability. The trainer change is printed on the card, but the market prices it as a generic switch. The receiving yard's specific record with recruits is not on the card, and the ugly last run puts people off, so the price stays too long.", "prediction": { "direction": "positive", "size": "A/E 1.12 to 1.25 on 200+ bets; the close-last-run control is clearly lower (by at least 0.05)", "falsified_if": "A/E below 1.03 on 150+ bets, or recruits to the same qualifying yards with a close last run (placed 1st to 3rd) score as high or higher than the broad rule" }, "notes": "I changed the rule sketch's last_beaten_lengths >= 15. That column, like last_official_rating and the comment flags, only exists from 2025-11-01, so it would leave the discovery zone almost empty. The rule uses a last finishing position in the back 40% of a field of 6+ instead (last_position and last_field_size go back to 2020-07). Non-finishers (last_position NULL) are left out, because before 2025 every non-finisher is coded PU, which mixes fallers and unseated riders in with real beatings. The tx_new_yard columns start in 2020-11. Read forward results alongside the fresh and handicap-debut yard rules in this family, because they will share runners. Once enough data exists, the original beaten-lengths version can be checked as a forward-only sanity check, but it is not a pre-registered refinement." }
Timeline
Job 3085 finished
· engine:compute-1
H-53ab001f Discovery → KILLED fails: A/E 0.926, needs 1.08; p 0.6747, needs 0.05 or lower; periods [0.79, 1.07], each needs 1.0; A/E 0.926 against same-race control 1.002, needs 0.03 above (not a niche pass: A/E 0.926 below 1.08; p 0.6747490585626843 above 0.5; does not beat the same-race control 1.002; a period points the other way [0.79, 1.07])
· engine:evaluator
discovery result for H-53ab001f (broad rule): fail
· engine:evaluator
H-53ab001f Designed → RESEARCHdiscovery measuring on the discovery zone
· engine:orchestrator
compute-1 took job 3085 (evaluate, attempt 1)
· compute-1
Job 3081 finished
· engine:ai-1
Queued evaluate on the compute lane: discovery run of the broad rule
· engine:scheduler
H-53ab001f Proposed → RESEARCHdesigned pre-spec written and hashed
· agent:designer@v1
ai-1 took job 3081 (design, attempt 1)
· ai-1
Queued design on the ai lane: write the pre-spec
· engine:scheduler
New idea H-53ab001f: Recruit to a yard good with new arrivals, after a heavy beating for its old trainer (scout)
· agent:scout@v1
Every change is an event with an actor: an agent and its version, an engine, a human, or the importer. Current stage: Killed.