Hypotheses · shock · S3-chase-not-completed-large-negative
S3: chase not completed large negative
holdout SUPPORTIVE: A/E 1.095 on 254 (GB 1.117, IRE 0.971), p 0.364 against BH 0.003448 over 29 tests
Starts the thread “S3: chase not completed large negative” 3 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Imported from the RaceiQ holdout
- Made by
- import
- Created
- 15 Oct, 23:10
- Tests logged
- 2
Mechanism and rationale
Shock test S3-chase-not-completed-large-negative (shock.py, frozen before the holdout was fetched)
The rule
code = 'Chase' AND finished = 0 AND s <= -1.5
Reads: code, finished, s
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 2bde6ddc55e333b65ea9a11201ec31aaab1ddc49184e9699039bab726f24d4ec
- Frozen
- 14 Oct, 01:00
- Nothing in the definition can change after this.
- Direction
positive
- Frozen in
research/experiments/raceiq/shock_tests
- Frozen on
2026-10-14
- Id
S3-chase-not-completed-large-negative
- Rule
code = 'Chase' AND finished = 0 AND s <= -1.5
Result (from the archive)
info discovery year (reference) · 15 Oct, 23:10
- Bets
- 214
- A/E
- 1.01
- winners vs the prices
- SP return
- -12.1%
- level stakes
- Betfair SP return
- +33.5%
- 213 bets with a BSP
Strike rate 8.4%.
By period
Falsification
No attacks yet. Only promising ideas are attacked.
Sealed holdout (vault)
- Bets
- 254
- 14 Oct, 13:00
- A/E
- 1.09
- p = 0.36
- BH threshold then
- 0.0034
- over every vault test so far
- Outcome
- Failed
- from the archive
Forward record
- forward check refusederror
· 15 Oct, 23:21
Lineage
Agent runs
investigator v1ok · 34s · 17 Oct, 02:41
Output (schema-checked)
{ "reflection": "This thread has one test so far. The rule is: the horse's last run was a chase, it did not finish, and its Jump Index came out at least 1.5 s.d. below expectation (code='Chase' AND finished=0 AND s<=-1.5). In discovery the rule was flat: A/E 1.007 on 214 bets. On the sealed holdout it pointed the right way, 1.095 on 254 bets, but p was 0.364 against a false-discovery threshold of 0.0034. That is noise-level, so the rule sits in SHADOW. The holdout lift is GB-only (GB 1.117, IRE 0.971). That matches the lab's chase-error findings, where non-finisher edges are GB-only and thin, and runners at 16/1 or bigger are at or below par in every cut. So we have not learned that the shock measure adds anything. The open issue is whether s carries information beyond the plain fact that the horse failed to complete a chase. The market sees that 'not completed' letter; it may not see how far below expectation the run was before it ended. If s adds nothing, the rule is just one more 'chase non-finisher' cut, and those have not worked.", "answers": [], "questions": [ { "question": "Among last-time chase non-finishers, does a deeper jumping shock (more negative s) lead to a higher A/E next time, or is s irrelevant once the horse failed to finish?", "rationale": "The holdout lift (1.095 on 254) could belong to all chase non-finishers rather than to the shock. A dose-response check would read s, finished, code and sp_decimal, comparing A/E across s bands (<=-2.5, -2.5 to -1.5, -1.5 to -0.5, >-0.5). If there is no gradient, the shock family adds nothing for non-finishers and this thread can be closed.", "observation_ids": [ "O-ddd7ee0a" ], "priority": 0.55 }, { "question": "Is the GB/IRE split (1.117 vs 0.971) in shocked chase non-finishers a real market difference or small-sample noise, given other chase-error cuts show the same split?", "rationale": "The same GB-only pattern appears in the one-off-error non-finisher finding (GB 1.588, IRE 0.433). A test would read region, code, finished, s, last_non_finish_code and sp_decimal, and would need forward bets from both countries over a second winter.", "observation_ids": [ "O-ddd7ee0a", "O-69d892e9" ], "priority": 0.35 } ], "hypotheses": [ { "title": "Rival: chase non-finishers with only a mild shock score the same as large-shock ones", "family": "shock", "operator": "rival-explanation", "question_id": null, "new_question": 0, "parent_id": "S3-chase-not-completed-large-negative", "reasoning": { "observation_ids": [ "O-ddd7ee0a" ], "question": "Does the size of the jumping shock carry the effect, or is it just the non-completion itself?", "mechanism": "If the lift comes from the market over-penalising any visible non-completion (the P/F/U letter), then chase non-finishers whose jumping was close to expectation should do as well as heavily shocked ones. If the shock is the cause, only the large-negative group should lift.", "market_miss": "Punters see the non-finish letter, not how far the run fell short of its expected Jump Index. Under the shock story, the market treats all non-finishers alike while only the badly shocked ones are one-off aberrations.", "prediction": { "direction": "positive", "size": "A/E 1.05 to 1.12 on 250+ bets, matching the large-shock group (the rival is supported)", "falsified_if": "A/E at or below 0.97 on 200+ bets while the large-shock group stays near 1.09, which would mean s carries the effect" }, "rule_sketch": "code = 'Chase' AND finished = 0 AND s > -1.5" }, "confounders": [ "pulled-up vs fell/unseated mix differs by shock size", "price band: deeper shocks may drift to bigger prices", "GB/IRE mix", "single-season sample" ], "expected_survival": 0.3 }, { "title": "Test-mechanism: shocked chase non-finishers under 16/1 in GB", "family": "shock", "operator": "sharpen", "question_id": null, "new_question": 1, "parent_id": "S3-chase-not-completed-large-negative", "reasoning": { "observation_ids": [ "O-ddd7ee0a", "O-69d892e9" ], "question": "Does the lift sit where the mechanism says: in horses the market still rates, in the country where non-finish edges have shown up?", "mechanism": "A one-off jumping shock only hides ability in a horse that has ability. Long-priced non-finishers are mostly horses that are simply poor. Previous chase cuts went 0 from 98 and 0 from 34 at 16/1 or bigger, so the effect should concentrate below 16/1. This band was chosen before the numbers, from those prior findings.", "market_miss": "For a fancied horse, a non-finish with a shocked Jump Index looks like lost form. The figures say it was an aberrant jumping run, which the form book records only as P or F.", "prediction": { "direction": "positive", "size": "A/E 1.12 to 1.25 on 120+ bets", "falsified_if": "A/E at or below 1.0 on 100+ bets" }, "rule_sketch": "code = 'Chase' AND finished = 0 AND s <= -1.5 AND region = 'GB' AND sp_decimal < 17" }, "confounders": [ "calendar effect after April 2026 seen in sibling cuts", "overlap with existing chase-error non-finisher shadow rule", "trainer concentration", "small bet count" ], "expected_survival": 0.2 } ], "findings": [ { "statement": "Chase non-finishers with a large negative jumping shock were flat in discovery (1.007 on 214) and only mildly positive on the holdout (1.095 on 254, p 0.364). The holdout lift was GB-only (GB 1.117, IRE 0.971), the same split as other chase non-finisher cuts.", "kind": "method", "observation_ids": [ "O-ddd7ee0a" ] } ] }
Timeline
Job 2108 gave up: OperationalError: no such column: code Traceback (most recent call last): File "/app/lab/src/gallops/orchestrator/loop
· engine:compute-1
compute-1 took job 2108 (forward_check, attempt 5)
· compute-1
Job 2108 will retry: OperationalError: no such column: code Traceback (most recent call last): File "/app/lab/src/gallops/orchestrator/loop
· engine:compute-1
compute-1 took job 2108 (forward_check, attempt 4)
· compute-1
Job 2108 will retry: OperationalError: no such column: code Traceback (most recent call last): File "/app/lab/src/gallops/orchestrator/loop
· engine:compute-1
compute-1 took job 2108 (forward_check, attempt 3)
· compute-1
Job 2108 will retry: OperationalError: no such column: code Traceback (most recent call last): File "/app/lab/src/gallops/orchestrator/loop
· engine:compute-1
compute-1 took job 2108 (forward_check, attempt 2)
· compute-1
Job 2108 will retry: OperationalError: no such column: code Traceback (most recent call last): File "/app/lab/src/gallops/orchestrator/loop
· engine:compute-1