Hypotheses · seasonal · H-568b7703
Lightly raced four-year-old returners whose mark was raised: improvers the market doubts
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
Part of the thread “H126: lightly raced four year old returns” 32 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- test-mechanism
- Created
- 16 Oct, 12:23
- 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
- H-625f1f2d (Fewest prior runs: the mark has the least information) passed discovery but was falsified: driven by one price band (up to 14/1): the rest score 1.00. O-8d9fdbf6
- H-29eb96fe (Lightly raced four-year-olds back from the winter on turf only) passed discovery as a niche: A/E 1.2 on 379 bets (p 0.127), same-race control 0.97. O-94a1c4ce
- H-d1543740 (Lightly raced four-year-old returns whose mark has not been raised) was predicted positive but came out the other way: A/E 0.95 on 151 bets (p 0.498 for the opposite direction). O-fa53ff56
- AskedDo lightly raced four-year-old returners whose mark was raised during their three-year-old season carry the H126 edge, as an improver-trajectory mechanism would predict? testing
- MechanismA three-year-old that earned rises is on an upward curve. With few runs and a winter to strengthen, it often keeps improving faster than the handicapper raises it. Horses whose mark stood still or fell had shown they were not progressing.
- Why the market misses itPunters see a career-high mark after a long absence and expect the horse to need the run or to be held by the handicapper. The form book shows a raised horse coming back off a break, which looks like a negative.
- Predictedpositive, A/E 1.15 to 1.25 on 600+ bets
- Falsified if
Mechanism and rationale
A three-year-old that earned rises is on an upward curve. With few runs and a winter to strengthen, it often keeps improving faster than the handicapper raises it. Horses whose mark stood still or fell had shown they were not progressing.
The rule
race_type = 'Flat' AND is_handicap = 1 AND month IN (3, 4, 5) AND age = 4 AND prior_runs <= 10 AND days_since_last_run >= 150 AND rating_change > 0
Reads: race_type, is_handicap, month, age, prior_runs, days_since_last_run, rating_change
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 63ffb223b58becf6e005be6708fe97a3d4f695f59f102cbd9691b9bfee91536e
- Frozen
- 16 Oct, 12:29
- Nothing in the definition can change after this.
- Confounders
- Data window: rating_change exists only from Nov 2025, so discovery covers a single spring (2026). There, early versus late season is also all-weather versus turf, so a period split must get a surface check before it is read as instability.
- Overlap with last-time-out winners: a positive rating_change mostly follows a win or a close placing last time, so this may just rebuild the last-time-out winner system (SYS-four-year-old-returns-after-a-win). Check the result with and without last_position = 1.
- Price band concentration: earlier H126 cuts carried their lift in the up-to-14/1 band. Report the result by price band.
- Yard strength: the horses that got raises may come from stronger yards that ready them for first time out. Check whether a few trainers dominate.
- Turf dependence: the H126 edge looked turf-only (1.20 on turf). A raised-mark lift could just be the turf share.
- Control
{ "description": "Same-race other runners should score about 1.00 (H126 control ran 0.98 to 1.01), so any lift is not a property of the races. The direct comparison the question asks for is the unraised returner group in the same window: same H126 conditions with rating_change <= 0, which scored 0.95 on 151 before. The raised group must beat it by at least 0.10 A/E for the mechanism to hold. If both groups score alike, the edge is not about the raise.", "rule": "race_type = 'Flat' AND is_handicap = 1 AND month IN (3, 4, 5) AND age = 4 AND prior_runs <= 10 AND days_since_last_run >= 150 AND rating_change <= 0" }
Discovery result
pass broad rule (niche) · 16 Oct, 12:28
- Bets
- 41
- 8 winners
- A/E
- 1.38
- 95%: 0.59 to 2.71
- SP return
- +56.7%
- level stakes
- Betfair SP return
- +94.3%
- 41 bets with a BSP
Strike rate 19.5%. p = 0.23. Same-race control: the other runners in these races had A/E 0.94, 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. 1 of 6 survived.
- control: Raised mark without last-time-out winnersinfo
20 bets · A/E 0.98 (0.20 to 2.86) · control 1.01 · 16 Oct, 12:29
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-2714–after 2026-04-276–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - price_band: 14/1 or shorter only (drops the single 16/1+ winner)info
35 bets · A/E 1.24 (0.50 to 2.54) · control 0.96 · 16 Oct, 12:29
Breakdown
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 · · 16 Oct, 12:29
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: <= 10 -> 8 (-20%)pass
28 bets · A/E 1.70 (0.68 to 3.50) · control 0.88 · 16 Oct, 12:58
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-2718–after 2026-04-2710–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: <= 10 -> 12 (+20%)pass
48 bets · A/E 1.53 (0.73 to 2.81) · control 0.91 · 16 Oct, 12:58
Breakdown
bets
Lineage
Agent runs
designer v1ok · 39s · 16 Oct, 12:23
Output (schema-checked)
{ "rule": "race_type = 'Flat' AND is_handicap = 1 AND month IN (3, 4, 5) AND age = 4 AND prior_runs <= 10 AND days_since_last_run >= 150 AND rating_change > 0", "refinements": [ { "label": "turf only", "rule": "race_type = 'Flat' AND is_handicap = 1 AND month IN (3, 4, 5) AND age = 4 AND prior_runs <= 10 AND days_since_last_run >= 150 AND rating_change > 0 AND surface = 'Turf'" }, { "label": "14/1 or shorter", "rule": "race_type = 'Flat' AND is_handicap = 1 AND month IN (3, 4, 5) AND age = 4 AND prior_runs <= 10 AND days_since_last_run >= 150 AND rating_change > 0 AND sp_decimal <= 15" } ], "control": { "description": "Same-race other runners should score about 1.00 (H126 control ran 0.98 to 1.01), so any lift is not a property of the races. The direct comparison the question asks for is the unraised returner group in the same window: same H126 conditions with rating_change <= 0, which scored 0.95 on 151 before. The raised group must beat it by at least 0.10 A/E for the mechanism to hold. If both groups score alike, the edge is not about the raise.", "rule": "race_type = 'Flat' AND is_handicap = 1 AND month IN (3, 4, 5) AND age = 4 AND prior_runs <= 10 AND days_since_last_run >= 150 AND rating_change <= 0" }, "pass_criteria": { "min_bets": 150, "min_ae": 1.08, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.05, "max_p": 0.2 }, "confounders": [ "Data window: rating_change exists only from Nov 2025, so discovery covers a single spring (2026). There, early versus late season is also all-weather versus turf, so a period split must get a surface check before it is read as instability.", "Overlap with last-time-out winners: a positive rating_change mostly follows a win or a close placing last time, so this may just rebuild the last-time-out winner system (SYS-four-year-old-returns-after-a-win). Check the result with and without last_position = 1.", "Price band concentration: earlier H126 cuts carried their lift in the up-to-14/1 band. Report the result by price band.", "Yard strength: the horses that got raises may come from stronger yards that ready them for first time out. Check whether a few trainers dominate.", "Turf dependence: the H126 edge looked turf-only (1.20 on turf). A raised-mark lift could just be the turf share." ], "mechanism": "A lightly raced four-year-old (10 or fewer runs) whose official mark today is above its mark at its last run was raised for its latest three-year-old form, so it was on an upward curve. With few runs and a winter to strengthen, it keeps improving faster than the handicapper can raise it, so first time out in spring its true ability is above the new mark. Returners whose mark stood still or fell had shown no progress, and that group scored 0.95.", "market_miss": "Punters see a career-high mark after 150+ days off and assume the horse will need the run or be held by the handicapper. The form book reads a raise plus a layoff as a double negative, and the improvement a winter brings to an unexposed young horse is not visible in its figures.", "prediction": { "direction": "positive", "size": "A/E 1.15 to 1.25. Because rating_change starts in Nov 2025, expect about 150 to 300 bets rather than 600+.", "falsified_if": "A/E below 1.08 on 150+ bets, or raised-group A/E less than 0.10 above the unraised control (rating_change <= 0) in the same window, or a lift that disappears once last-time-out winners are removed." }, "notes": "Kept the draft rule. It uses only pre_off columns, and rating_change (today's mark minus the last run's) is pre_off. Rows where rating_change is NULL (no rating at the last run) drop out of both the rule and the control. I lowered the size expectation from 600+ bets because the column window covers only spring 2026. A thin but positive result should go on to falsification and forward tracking rather than be killed. I raised min_ae to 1.08 to match the falsification line, and set the forward bar at A/E 1.05." }
Timeline
Job 1477 finished
· engine:compute-1
hypothesis note H-568b7703
· engine:perturb
perturbation result for H-568b7703 (neighbour: > 0 -> 1 (+20%)): pass
· engine:perturb
perturbation result for H-568b7703 (neighbour: > 0 -> -1 (-20%)): pass
· engine:perturb
perturbation result for H-568b7703 (neighbour: >= 150 -> 180 (+20%)): pass
· engine:perturb
perturbation result for H-568b7703 (neighbour: >= 150 -> 120 (-20%)): pass
· engine:perturb
perturbation result for H-568b7703 (neighbour: <= 10 -> 12 (+20%)): pass
· engine:perturb
perturbation result for H-568b7703 (neighbour: <= 10 -> 8 (-20%)): pass
· engine:perturb
compute-1 took job 1477 (mutate, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Job 1358 finished
· engine:compute-1
forward result for H-568b7703 (forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 1358 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 1353 finished
· engine:compute-1
H-568b7703 Frozen → SHADOW vault skipped: rating_change do not exist before the discovery zone; track it forward instead
· engine:orchestrator