Hypotheses · yard-planned-move · H-e5b7656a
Test-mechanism: good fresh yards pay when the break followed a good run
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
Part of the thread “Fresh from a yard good with returners, when the last run before the break was ugly” 2 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- test-mechanism
- Created
- 17 Oct, 05:02
- Tests logged
- 18
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-53ab001f (Recruit to a yard good with new arrivals, after a heavy beating for it) was predicted positive but came out the other way: A/E 0.93 on 422 bets (p 0.399 for the opposite direction). O-0f113025
- H-348bbae0 (Fresh from a yard good with returners, when the last run before the br) was predicted positive but came out the other way: A/E 0.89 on 500 bets (p 0.332 for the opposite direction). O-4973b39e
- AskedDoes a good fresh-yard record pay mainly when the break followed a good last run (a planned rest), not a bad one (a forced break)? testing
- MechanismA yard that rests a horse after a good run is choosing to: the horse is sound and the yard has a target. A break after a pulled-up or tailed-off run is more often forced by injury or illness, and the yard's skill with returners cannot undo that. The yard's fresh record should therefore carry forward most strongly for planned rests.
- Why the market misses itPunters mark a long absence down as a generic fitness worry. They do not tell a chosen rest from a forced one, so the good-run returner from a skilled yard gets the same absence discount as everything else.
- Predictedpositive, A/E 1.08 to 1.18 on 400+ bets
- Falsified ifA/E below 1.03 on 300+ bets, or not above the ugly-last-run subset (0.89) by at least 0.10
Mechanism and rationale
A yard that rests a horse after a good run is choosing to: the horse is sound and the yard has a target. A break after a pulled-up or tailed-off run is more often forced by injury or illness, and the yard's skill with returners cannot undo that. The yard's fresh record should therefore carry forward most strongly for planned rests.
The rule
days_since_last_run >= 90 AND tx_fresh_runs >= 25 AND tx_fresh_wins >= 1.3 * tx_fresh_exp AND last_position <= 3 AND last_field_size >= 5
Reads: days_since_last_run, tx_fresh_runs, tx_fresh_wins, tx_fresh_exp, last_position, last_field_size
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- d2b198ca51c1b20f2ad21c57e84efd8542e5bd979cfbd012a5f54a72da9ea994
- Frozen
- 17 Oct, 05:11
- Nothing in the definition can change after this.
- Confounders
- A good last run usually means a higher handicap mark, so returning handicappers may carry stiffer marks than the absence discount allows for
- Top-3 last-run horses go off shorter, and short prices compress A/E. Check with the 14/1-or-shorter cut and by price band
- A few big yards (the leading jumps yards with autumn reappearances) may supply most bets. Check the share by trainer and the result with the top 3 yards removed
- Seasonal pattern: autumn jumps and spring Flat returners from good runs may differ by code. Report GB/IRE and Flat/jumps separately
- The tx_fresh record starts 2021-03, so the early discovery window is thin and leans toward big yards that reach 25 fresh runs quickly
- Selection on the yard record: tx_fresh_wins >= 1.3 x exp partly picks yards on luck, which regresses toward 1.0 whatever the last run
- Control
{ "description": "Same-race rivals should score about 1.00, so any lift belongs to the runner and not to the race. The main comparison is the forced-break subset: the same skilled-fresh-yard returners whose last run was ugly (did not finish, or finished in the back 40% of a field of 5 or more). H-348bbae0 measured this at 0.89 on 500. The mechanism needs the good-run rule to beat this control by at least 0.10 A/E. If both score about the same, the last run does not separate planned rests from forced ones.", "rule": "days_since_last_run >= 90 AND tx_fresh_runs >= 25 AND tx_fresh_wins >= 1.3 * tx_fresh_exp AND last_field_size >= 5 AND (last_position IS NULL OR last_position >= 0.6 * last_field_size)" }
Discovery result
pass broad rule (niche) · 17 Oct, 05:05
- Bets
- 402
- 64 winners
- A/E
- 1.20
- 95%: 0.93 to 1.53
- SP return
- -23.5%
- level stakes
- Betfair SP return
- -7.5%
- 390 bets with a BSP
Strike rate 15.9%. p = 0.084. 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. 4 of 5 survived.
- control: Control: same good-run returners from yards with no proven fresh recordfail
1,255 bets · A/E 0.94 (0.81 to 1.10) · control 1.01 · 17 Oct, 05:11
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-278420.92after 2026-04-274130.99Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: Perturbation looser: 75+ days, 1.15x yard record, top-4 last time, field 4+pass
1,125 bets · A/E 1.11 (0.95 to 1.29) · control 0.98 · 17 Oct, 05:11
Sealed holdout (vault)
- Bets
- 1,689
- 17 Oct, 05:11
- A/E
- 1.03
- p = 0.30
- BH threshold then
- 0.0018
- over every vault test so far
- Outcome
- Failed
- vault query (supportive)pass
1,689 bets · A/E 1.03 (0.92 to 1.16) · control 0.99 · 17 Oct, 05:11
Breakdown
betsA/E0.71.01.32020-226801.042023 to Sept 20251,0091.03
Forward record
- forward vs bar {'min_bets': 100, 'min_ae': 1.02, '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: >= 90 -> 72 (-20%)pass
402 bets · A/E 1.20 (0.93 to 1.53) · control 0.96 · 17 Oct, 05:05
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-272741.10after 2026-04-271281.44Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: >= 90 -> 108 (+20%)pass
402 bets · A/E 1.20 (0.93 to 1.53) · control 0.96 · 17 Oct, 05:05
Breakdown
Lineage
Agent runs
designer v1ok · 45s · 17 Oct, 05:02
Output (schema-checked)
{ "rule": "days_since_last_run >= 90 AND tx_fresh_runs >= 25 AND tx_fresh_wins >= 1.3 * tx_fresh_exp AND last_position <= 3 AND last_field_size >= 5", "refinements": [ { "label": "14/1 or shorter", "rule": "days_since_last_run >= 90 AND tx_fresh_runs >= 25 AND tx_fresh_wins >= 1.3 * tx_fresh_exp AND last_position <= 3 AND last_field_size >= 5 AND sp_decimal <= 15" }, { "label": "seasonal rest, not a year-plus absence", "rule": "days_since_last_run >= 90 AND days_since_last_run <= 365 AND tx_fresh_runs >= 25 AND tx_fresh_wins >= 1.3 * tx_fresh_exp AND last_position <= 3 AND last_field_size >= 5" }, { "label": "yard in 30-day form", "rule": "days_since_last_run >= 90 AND tx_fresh_runs >= 25 AND tx_fresh_wins >= 1.3 * tx_fresh_exp AND last_position <= 3 AND last_field_size >= 5 AND yard_30_runs >= 5 AND yard_30_wins >= yard_30_expected" } ], "control": { "description": "Same-race rivals should score about 1.00, so any lift belongs to the runner and not to the race. The main comparison is the forced-break subset: the same skilled-fresh-yard returners whose last run was ugly (did not finish, or finished in the back 40% of a field of 5 or more). H-348bbae0 measured this at 0.89 on 500. The mechanism needs the good-run rule to beat this control by at least 0.10 A/E. If both score about the same, the last run does not separate planned rests from forced ones.", "rule": "days_since_last_run >= 90 AND tx_fresh_runs >= 25 AND tx_fresh_wins >= 1.3 * tx_fresh_exp AND last_field_size >= 5 AND (last_position IS NULL OR last_position >= 0.6 * last_field_size)" }, "pass_criteria": { "min_bets": 300, "min_ae": 1.05, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.02, "max_p": 0.2 }, "confounders": [ "A good last run usually means a higher handicap mark, so returning handicappers may carry stiffer marks than the absence discount allows for", "Top-3 last-run horses go off shorter, and short prices compress A/E. Check with the 14/1-or-shorter cut and by price band", "A few big yards (the leading jumps yards with autumn reappearances) may supply most bets. Check the share by trainer and the result with the top 3 yards removed", "Seasonal pattern: autumn jumps and spring Flat returners from good runs may differ by code. Report GB/IRE and Flat/jumps separately", "The tx_fresh record starts 2021-03, so the early discovery window is thin and leans toward big yards that reach 25 fresh runs quickly", "Selection on the yard record: tx_fresh_wins >= 1.3 x exp partly picks yards on luck, which regresses toward 1.0 whatever the last run" ], "mechanism": "A yard that rests a horse after a top-3 run in a real field is choosing to: the horse is sound and the yard has a target, usually a seasonal one. A break after a pulled-up or tailed-off run is more often forced by injury or illness, and the yard's skill with returners cannot undo that. So the yard's proven skill at readying fresh horses should show mainly in planned rests. Last run top 3 in a field of 5+ stands in for a planned rest. The ugly-last-run subset stands in for a forced one.", "market_miss": "Punters, and the pricing models that follow them, mark a 90+ day absence down as a generic fitness worry and price the yard's fresh record only loosely. They do not separate a chosen rest after a good run from a forced lay-off after a bad one. So the sound, targeted returner from a yard proven with fresh horses gets the same absence discount as a horse coming back from injury.", "prediction": { "direction": "positive", "size": "A/E 1.08 to 1.18 on 400+ bets", "falsified_if": "A/E below 1.03 on 300+ bets, or not above the ugly-last-run control (about 0.89) by at least 0.10, or same-race rivals scoring as high as the selections" }, "notes": "I kept the rule sketch and added last_field_size >= 5, so that top 3 means a real good run and not a placing in a 3- or 4-runner field. last_position is NULL for non-finishers, so they drop out of the main rule. I used yard_30_* (to yesterday) rather than t30_*, because it is not clear whether t30_* includes today. The refinements follow the reasoning and findings: price compression, seasonal rests against year-plus absences, and the finding that 30-day yard form sharpens a planned move (fresh 1.11). Results here will overlap the broad fresh-yard rule and H-348bbae0's population, and should be read with that in mind." }
Timeline
Job 3181 finished
· engine:compute-1
forward result for H-e5b7656a (forward vs bar {'min_bets': 100, 'min_ae': 1.02, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 3181 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 3156 finished
· engine:compute-1
H-e5b7656a Vault → SHADOW vault SUPPORTIVE: A/E 1.033 on 1689 bets, p 0.3035 against BH threshold 0.001786 over 56 vault tests
· engine:orchestrator
vault result for H-e5b7656a (vault query (supportive)): pass
· engine:orchestrator
H-e5b7656a Frozen → FROZENvault vault query started
· engine:orchestrator
compute-1 took job 3156 (vault, attempt 1)
· compute-1
Job 3155 finished
· engine:compute-1
Queued vault on the compute lane: frozen: one sealed vault query
· engine:scheduler
H-e5b7656a Falsification → FROZEN survived falsification
· engine:falsification
falsification result for H-e5b7656a (partition: Partition: seasonal planned rest, 90 to 365 days): pass
· engine:evaluator
compute-1 took job 3155 (attack, attempt 1)
· compute-1
Job 3154 finished
· engine:compute-1
falsification result for H-e5b7656a (partition: Partition: handicaps at 14/1 or shorter (mark confounder, drops the 16/1+ drag)): pass
· engine:evaluator
compute-1 took job 3154 (attack, attempt 1)
· compute-1
Job 3153 finished
· engine:compute-1
falsification result for H-e5b7656a (perturbation: Perturbation tighter: 110+ days, 1.5x yard record, top-2 last time, 30+ yard runs): pass
· engine:evaluator