Hypotheses · story · H-528222df
Raised easy handicap winners turned out within 14 days beat their price
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
Part of the thread “H34: won easily last time” 18 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- test-mechanism
- Created
- 16 Oct, 16:20
- 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-97b1373c (Sharpen: easy handicap winners back within 14 days with no rise in the) pointed the predicted way but failed the bar: A/E 1.1 on 247 bets (p 0.208), control 0.95. O-d1dc9455
- H-5c714267 (Test-mechanism: easy-winner quick-return lift lives in handicap-to-han) survived falsification: 5 of 5 attacks left it standing; it is frozen for its one vault query. O-e4c510dc
- AskedWithin the handicap-to-handicap fortnight rule, is the lift carried by runners already raised by the handicapper (rating_change > 0), or by the rows where rating_change is missing? answered
- MechanismThe handicapper raises the horse by its winning margin, and an easy win means the margin understated it, so the new mark still lags. A yard that brings it straight back is using a horse at its peak before the next rise and before its form fades.
- Why the market misses itThe form book shows 'up 5lb for winning', a visible penalty that punters read as a reason to oppose. The 'won easily' comment that says the rise was too small is buried in the in-running notes.
- Predictedpositive, A/E 1.20 to 1.35 on 150+ bets
- Falsified ifA/E at or below the parent's 1.188, or below 1 in either period, or no better than 0.03 above the same-race control
Mechanism and rationale
The handicapper raises the horse by its winning margin, and an easy win means the margin understated it, so the new mark still lags. A yard that brings it straight back is using a horse at its peak before the next rise and before its form fades.
The rule
last_position = 1 AND last_won_easily = 1 AND days_since_last_run IS NOT NULL AND days_since_last_run <= 14 AND is_handicap = 1 AND last_is_handicap = 1 AND rating_change IS NOT NULL AND rating_change > 0
Reads: last_position, last_won_easily, days_since_last_run, is_handicap, last_is_handicap, rating_change
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- b9f9241a781bd07b0fbccc0e68ace54fc9c43b4419c0f6122ba41e821cc98e45
- Frozen
- 16 Oct, 16:26
- Nothing in the definition can change after this.
- Confounders
- rating_change is NULL for some parent rows (missing ratings, first handicap-mark issues); the rule excludes them, so part of the implied ~1.28 complement may sit in NULLs and not in raised horses
- rating_change and last_won_easily only run from 2025-11, so the sample is short and from one season-and-a-bit; period splits will be thin
- Irish runners have thin coverage (IRE no-rise subset was 9 bets); any result is in effect GB-only
- the complement estimate (~231 bets, implied ~1.28) is arithmetic from two noisy numbers and may not repeat
- raised winners often go up in class too; class rises may confound the rating effect
- long-priced runners (16/1+) went 0 from 24 in the parent; the price mix of the raised subset may differ from the no-rise subset
- Control
{ "description": "Two comparisons. (1) The other runners in the same races should be at or below 1 (the parent's same-race control was 0.92); the rule must beat them by more than 0.03. (2) The question is whether the parent lift sits with already-raised horses, so the direct comparison is the same parent with no rise (rating_change <= 0). That subset already scored 1.096 on 247; the raised group must score clearly above it and above the parent's 1.188 for the mechanism to hold.", "rule": "last_position = 1 AND last_won_easily = 1 AND days_since_last_run IS NOT NULL AND days_since_last_run <= 14 AND is_handicap = 1 AND last_is_handicap = 1 AND rating_change IS NOT NULL AND rating_change <= 0" }
Discovery result
pass broad rule · 16 Oct, 16:22
- Bets
- 231
- 68 winners
- A/E
- 1.33
- 95%: 1.04 to 1.69
- SP return
- +12.0%
- level stakes
- Betfair SP return
- +30.3%
- 229 bets with a BSP
Strike rate 29.4%. p = 0.013. Same-race control: the other runners in these races had A/E 0.91, 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. 6 of 6 survived.
- perturbation: Tighter turnaround: back within 11 dayspass
131 bets · A/E 1.18 (0.82 to 1.65) · control 0.95 · 16 Oct, 16:26
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-27641.25after 2026-04-27671.12Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - perturbation: Looser turnaround: back within 17 dayspass
342 bets · A/E 1.32 (1.07 to 1.61) · control 0.91 · 16 Oct, 16:26
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.0, 'max_p': 0.2}info
0 bets · · 16 Oct, 16:26
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: <= 14 -> 11 (-20%)pass
131 bets · A/E 1.18 (0.82 to 1.65) · control 0.95 · 16 Oct, 16:22
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-27641.25after 2026-04-27671.12Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: <= 14 -> 17 (+20%)pass
342 bets · A/E 1.32 (1.07 to 1.61) · control 0.91 · 16 Oct, 16:22
Breakdown
Lineage
Agent runs
designer v1ok · 40s · 16 Oct, 16:20
Output (schema-checked)
{ "rule": "last_position = 1 AND last_won_easily = 1 AND days_since_last_run IS NOT NULL AND days_since_last_run <= 14 AND is_handicap = 1 AND last_is_handicap = 1 AND rating_change IS NOT NULL AND rating_change > 0", "refinements": [ { "label": "16/1 or shorter", "rule": "last_position = 1 AND last_won_easily = 1 AND days_since_last_run IS NOT NULL AND days_since_last_run <= 14 AND is_handicap = 1 AND last_is_handicap = 1 AND rating_change IS NOT NULL AND rating_change > 0 AND sp_decimal <= 17" }, { "label": "modest rise (1-7lb): the mark most likely still lags", "rule": "last_position = 1 AND last_won_easily = 1 AND days_since_last_run IS NOT NULL AND days_since_last_run <= 14 AND is_handicap = 1 AND last_is_handicap = 1 AND rating_change IS NOT NULL AND rating_change > 0 AND rating_change <= 7" } ], "control": { "description": "Two comparisons. (1) The other runners in the same races should be at or below 1 (the parent's same-race control was 0.92); the rule must beat them by more than 0.03. (2) The question is whether the parent lift sits with already-raised horses, so the direct comparison is the same parent with no rise (rating_change <= 0). That subset already scored 1.096 on 247; the raised group must score clearly above it and above the parent's 1.188 for the mechanism to hold.", "rule": "last_position = 1 AND last_won_easily = 1 AND days_since_last_run IS NOT NULL AND days_since_last_run <= 14 AND is_handicap = 1 AND last_is_handicap = 1 AND rating_change IS NOT NULL AND rating_change <= 0" }, "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": [ "rating_change is NULL for some parent rows (missing ratings, first handicap-mark issues); the rule excludes them, so part of the implied ~1.28 complement may sit in NULLs and not in raised horses", "rating_change and last_won_easily only run from 2025-11, so the sample is short and from one season-and-a-bit; period splits will be thin", "Irish runners have thin coverage (IRE no-rise subset was 9 bets); any result is in effect GB-only", "the complement estimate (~231 bets, implied ~1.28) is arithmetic from two noisy numbers and may not repeat", "raised winners often go up in class too; class rises may confound the rating effect", "long-priced runners (16/1+) went 0 from 24 in the parent; the price mix of the raised subset may differ from the no-rise subset" ], "mechanism": "After a handicap win the handicapper raises the horse by roughly its winning margin. An easy win means the margin understated its ability, so the new mark still lags its true level. A yard that brings it back within 14 days runs it at peak form before the next reassessment and before the form fades. So among quick-returning easy handicap winners, the lift should sit with those already carrying the rise (rating_change > 0) and not with those still running off the old mark.", "market_miss": "The form book shows 'up Xlb for winning', a visible penalty that punters read as a reason to oppose. The 'won easily' in-running comment, which says the rise was too small, is buried in the race notes and is not reflected in the price.", "prediction": { "direction": "positive", "size": "A/E 1.20 to 1.35 on about 150-230 bets", "falsified_if": "A/E at or below the parent's 1.188, or below 1 in either period, or no more than 0.03 above the same-race control, or not above the no-rise control (rating_change <= 0)" }, "notes": "The sketch is kept, with explicit NULL guards on days_since_last_run and rating_change. rating_change is pre_off and available from 2025-11 in both GB and IRE, the same window as last_won_easily, so no rows are lost to the window. The bet count may come in under 150 because NULL rating_change rows are excluded; a thin result pointing the right way goes on to falsification. The refinements come from the reasoning: the price cap from the parent's 0-from-24 at 16/1+, and the modest rise from the mechanism (a small rise after an easy win is the most likely to understate the horse)." }
Timeline
Job 1997 finished
· engine:compute-1
forward result for H-528222df (forward vs bar {'min_bets': 100, 'min_ae': 1.0, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 1997 (forward_check, attempt 1)
· compute-1
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 1995 finished
· engine:compute-1
H-528222df Frozen → SHADOW vault skipped: last_won_easily, rating_change do not exist before the discovery zone; track it forward instead
· engine:orchestrator
compute-1 took job 1995 (vault, attempt 1)
· compute-1
Job 1994 finished
· engine:compute-1
Queued vault on the compute lane: frozen: one sealed vault query
· engine:scheduler
H-528222df Falsification → FROZEN survived falsification
· engine:falsification
falsification result for H-528222df (partition: Competitive fields: 8 or more runners): pass
· engine:evaluator
compute-1 took job 1994 (attack, attempt 1)
· compute-1
Job 1993 finished
· engine:compute-1
falsification result for H-528222df (partition: Flat handicaps only): pass
· engine:evaluator
compute-1 took job 1993 (attack, attempt 1)
· compute-1
Job 1992 finished
· engine:compute-1
falsification result for H-528222df (partition: No class rise: same or lower class than the win): pass
· engine:evaluator
compute-1 took job 1992 (attack, attempt 1)
· compute-1
Job 1991 finished
· engine:compute-1
falsification result for H-528222df (partition: Real rise only: raised 3lb or more): pass
· engine:evaluator