Theory Register
Candidate edges from the literature β and what we did to them.
Every edge we ever found by mining our own data died out-of-sample. So a theory now arrives with a
source and a pre-registered test, and gets one verdict. The goal is to
kill candidates cheaply, not to find winners.
The baseline every theory must beat
Measured on 15,071 tips at the real Betfair SP — nothing modelled:
• Tipster picks carry zero alpha: win +0.73% ±3.54, place −1.43% ±1.59
• Backing a tip loses ~4% in either market — and that 4% is the commission
• Favourite–longshot bias is real in ROI terms but ~0.00% per unit of liability
• Past tipster ROI does not predict future ROI (r = −0.10); top-3 by past ROI returned −25.6% forward
So the bar is not “is it positive?” It is: does it beat the fair-price baseline,
out-of-sample, per unit of risk, after 6% commission, selected only on information available at bet time?
The four traps that killed our last four “edges”
1. Look-ahead. Selecting on the closing BSP isn’t a strategy — you don’t know it at bet time.
Fixing this alone moved the $2–5 place band from −1.1% to −3.4%.
2. Wrong denominator. A fat ROI-on-stake can be ~0% per unit of liability. That killed laying longshots.
3. Untradeable prices. morningwap sums to a 140% book — those prices never coexisted. If the book is over 100%, the price isn’t real.
4. Multiple comparisons. Slice 44 tipsters × 6 bands × 7 weeks and something will look brilliant. Pre-register the slice, or shrink the result.
Killed
Win-place coherence (Harville miscalibration)
P5
The Harville (1973) formula that maps win probabilities to place probabilities is systematically MISCALIBRATED, and the sign of the error is known: low-win-probability runners place MORE often than Harville predicts, high-probability runners LESS often, and the distortion is bigger for 3rd than 2nd. If the Betfair place market prices off naive Harville, its errors are predictable and we can bet the correction.
Reported: Snowberg & Wolfers (JPE 2010) regress the actual 2nd-place indicator on the Harville prediction: coefficient
0.793 (s.e. .0012), significantly below 1. Benter finds Z-stats to
−8.3 (n=26,481) and corrects with discounted exponents
p^γ (2nd) and
p^δ (3rd), ML-fitted γ=.81, δ=.65 — and warns these are VENUE-SPECIFIC, not universal. This is a property of order statistics, so it cannot decay.
Our test: Fit γ/δ on AU data by maximum likelihood from win BSP -> realised place strike. Then compare the corrected place probability against the ACTUAL place BSP. Bet only where the divergence exceeds commission. Train Jan-Apr, test May-Jul, per unit of liability.
Most likely to fool us: SCOPE. The entire literature is
pari-mutuel (US/HK/Japan), where place pools are derived from win money and the crowd may genuinely behave Harville-like. Betfair place is an
independently traded order book and may already embed the correction — which is exactly what our own "BSP is efficient to within commission" finding would predict. Also: our crude Harville pass already showed a real monotonic gradient but ~0% per unit of liability and NO place liquidity (median pre-play volume $0). The fitted-exponent version is the fair test; the liquidity problem may kill it regardless.
Source: Snowberg & Wolfers (NBER WP15923 / JPE 118); Benter (1994); Lo & Bacon-Shone
Our result: KILLED (Jul 12) — on 12,483 races with paired win+place BSP.
1. The literature is RIGHT. Naive Harville is genuinely miscalibrated on AU data: max-likelihood fit gives γ=0.70, δ=0.70 (vs 1.0/1.0), worth 643 log-likelihood points. Benter got .81/.65 on Hong Kong — same direction, venue-specific exactly as he warned. The mathematics is not in doubt.
2. But the market already knows. Out-of-sample Brier score for predicting who places: naive Harville 0.16887, our fitted Harville 0.16641, THE PLACE MARKET 0.16616. The Betfair place market is a BETTER predictor than the corrected formula. This is exactly the caveat the research flagged: the literature is all pari-mutuel (place pools derived from win money), while Betfair place is an independently traded book — and it has evidently already embedded the correction.
3. The apparent +24% was pure LOOK-AHEAD. Pricing the place market off the closing win BSP (which you cannot know at bet time) gave +23.7% at EV>20%. Repricing off ppwap — a pre-race price whose book sums to a coherent 101.8%, so it is genuinely tradeable — collapses it to +4.09% ±32.7, i.e. zero. At EV>0% the tradeable version is −0.58%.
4. And there is no market to trade anyway. 0% of the selected runners have ANY pre-play traded volume; median place BSP is $13.74. These are place-longshots in books that do not exist — our own money would BE the price. Scripts: scripts/theory_harville.py, theory_harville_v2.py
Killed
Fundamental model, Benter two-stage architecture
P5
A fundamental model built from runner metadata (jockey, trainer, barrier, weight, form string, days-since-run, rating, age) can add information the market price does NOT already contain — but ONLY if it is combined with the market price rather than used standalone. The correct form is a race-normalised conditional logit with log(market-implied prob) as a regressor alongside the fundamental estimate.
Reported: Benter: a standalone fundamental model is systematically biased, but combining log(fundamental) with log(public odds) yields well-calibrated probabilities (Z-stats ~0 across all deciles, n=3,198 races / 32,877 horses). The screening metric is
ΔR² — the pseudo-R² gain OVER the public price alone. His 9-factor fundamental model gained
ΔR²=.0090. This is the architecture that actually made money.
Our test: Conditional logit per race. Baseline = log(1/win_BSP) alone. Then add our metadata features. Measure ΔR² on a TIME-LOCKED holdout. If ΔR² is ~0, our features are already in the price and we stop — a cheap, decisive screen BEFORE any betting simulation.
Most likely to fool us: MULTIPLE COMPARISONS + look-ahead. Every feature we add is another trial. Bailey/Lopez de Prado show a pure random walk can be fit to an in-sample Sharpe of 1.27 with <1% apparent chance of being worthless, while 53% of its out-of-sample Sharpes are negative. Log the FULL trial grid and deflate. Also: use pre-race odds, never the closing BSP, as the market regressor at bet time.
Source: Benter (1994), in Hausch/Lo/Ziemba, "Efficiency of Racetrack Betting Markets"
Our result: KILLED (Jul 12). Out-of-sample pseudo-R² on a time-locked split, L2 tuned on an inner validation split (never on test):
• market price alone: 0.1719
• fundamentals alone: −0.1332 — worse than the base rate
• market + fundamentals: −0.0376
• market + fundamentals, jockey/trainer removed: 0.1492
ΔR² = −0.2095 (and −0.0228 even with the memorising features stripped out). Every version is NEGATIVE — our metadata does not merely fail to add information, it adds noise. Benter got +0.0090; we got worse than zero.
Note the middle line: fundamentals alone score below the base rate — exactly what Benter predicted for a standalone fundamental model. His architecture insight is validated even as our features fail.
Honest limits of this kill: only 2,014 usable rows (metadata capture began 17 May); official rating and weight — the two best handicapping variables — are at 1% coverage; and the sample is TIPPED runners, not full fields. To revisit we would need full-field metadata incl. rating and weight, which we do not currently collect. But the bar is brutal: the price alone already scores R² = 0.17, and nothing we have gets near it. Script: scripts/theory_benter_delta_r2.py
Killed
Tipsters know their LOCAL track (tipster x venue interaction)
P4
A tipster may have genuine, durable skill AT THEIR OWN TRACK — track bias, the going, how the circuit rides — and none anywhere else. This is a CONDITIONAL effect, and it is NOT the claim we already killed ("past tipster ROI predicts future ROI"). Our earlier test would not have seen it.
Reported: No formal literature, but the mechanism is plausible and it is the most common intuition punters have about tipsters. Proposed by the user, Jul 12.
Our test: PRE-REGISTERED two ways, because ~140 tipsters × ~100 venues = ~14,000 cells and something will look brilliant by chance:
(1) Home vs Away — "home" = the venue a tipster tips MOST (picked by VOLUME, never by performance), so the cell is chosen before we see any result. One comparison per tipster, not 14,000.
(2) Persistence — does a good tipster×venue cell in Jan-Apr stay good in May-Jul? Plus a null simulation: with this many thin cells, how good does the LUCKIEST look by chance?
Most likely to fool us: MULTIPLE COMPARISONS, in its most dangerous form: 14,000 cells, each tiny. The null simulation is not optional here — it IS the test.
Source: User hypothesis (Jul 12), tested against our own data
Our result: KILLED (Jul 12).
Test 1 — Home vs Away (34 tipsters with a definable home track):
alpha at home +0.81% ±7.19 | alpha away +1.06% ±4.63
mean per-tipster HOME − AWAY: −1.25pp ±8.38
tipsters better at home: 16/34 = 47% (chance gives 50%)
They are NOT better at their local track. It is a coin flip.
Test 2 — persistence across 71 tipster×venue cells:
correlation of train-alpha vs test-alpha: r = −0.004 — zero. A cell that was good does NOT stay good.
NULL simulation: with 71 thin cells, the LUCKIEST by pure chance averages +116.5% alpha (that is the MEDIAN), 95th pct +192.4%. Our actual best cell: +137.0% — below the 95th percentile of chance. Indistinguishable from luck.
Why the pre-registration mattered: the top cells look irresistible — Sky Racing’s Ben Walker is +64.1% at Tamworth vs −6.6% everywhere else (+70.7pp). But the tail is just as violent the other way (Cam Luke −53.2pp at Rosehill), and Rod Fuller — one of our two LIVE tipsters — is dramatically WORSE at his home track (−15.3% at Taree vs +31.8% away). That is not signal. That is what 34 coin-flips look like.
Honest limit: this test is UNDERPOWERED — only 34 tipsters have a definable home track and only 71 cells carry ≥15 tips in both halves, so a modest home effect could hide in it. But that cuts the way it always does: an effect small enough to hide from this test is smaller than the ~5% commission hurdle anyway. Script: scripts/theory_home_track.py
Killed
Late money / Crafts Ratio (a TIMING edge, not a price edge)
NEEDS DATA
P3
Money arriving late is informed. Runners whose share of the win pool RISES in the closing minutes outperform. The exploitable form is not a final-price edge but a timing/execution edge: get on at the earlier price, before the informed money arrives and shortens it.
Reported: Australian parimutuel, entire 2006 season (14,854 races, ~154k runners): returns are strongly increasing in the Crafts Ratio. Crucially the verified reading is that the edge lives in the PRELIMINARY price (locked at the last tote click), not the final price.
Our test: Needs timestamped pre-race price snapshots (we only hold morningwap / ppwap / BSP). Proxy test: does (ppwap -> BSP) shortening predict outperformance vs the BSP itself? That is really a CLV test and our own CLV runs ~−2%.
Most likely to fool us: UNTRADEABLE PRICES + wrong denominator. To capture it you must BEAT the closing price, and our measured CLV is negative — we are behind the market, not ahead of it. And morningwap is unusable (its book sums to 140%).
Source: Crafts Ratio / late-money literature; AU parimutuel 2006 season study
Our result: KILLED (Jul 12). The premise is "get on EARLY, before the informed money lands". It is backwards. Backing at ppwap (a genuinely tradeable pre-race price, book 101.8%) is WORSE than backing at the close, in every single band:
$2-3: −10.91% early vs −9.39% at BSP
$3-5: −7.08% vs −2.85%
$5-8: −11.72% vs −5.12%
$8-15: −11.51% vs −1.98%
$15-50: −18.73% vs −5.29%
Why: the median move (ppwap/BSP) is 0.897 — prices DRIFT OUT into the close, so the closing price is systematically BIGGER (better for a backer) than the pre-play average. And the early book carries a fatter overround (101.8% vs 100.3%). Getting on early does not beat the close; it hands you a worse price. Consistent with our own CLV of ~−2%: we are behind the market, not ahead of it. Script: scripts/theory_price_path.py
Killed
Price-path over-reaction (FADE the move, not follow it)
NEEDS DATA
P2
The odds are not fully efficient once you condition on the PATH they took. Participants over-react to price movement: drifters get under-estimated, steamers over-estimated. So the correct trade is CONTRARIAN — fade the move — not momentum.
Reported: EJOR 2019 (peer-reviewed, 6,058 exchange markets, 8.4M price points): a model correcting the trend-induced error "considerably improves" forecast quality.
But it demonstrates forecast accuracy only — never a net-of-commission ROI.
Our test: We hold only 2-3 points on the path (morningwap, ppwap, BSP) and morningwap is junk. This is thin for a path study. Would need denser pre-race snapshots to do it properly.
Most likely to fool us: UNTRADEABLE PRICES. This is the exact trap that produced our phantom "+19% edge": morningwap sums to a 140% book, so the "path" it implies never existed. Verification also REFUTED the momentum-continuation version outright (see below).
Source: European Journal of Operational Research 272(1) 2019
Our result: KILLED (Jul 12). The decisive test: conditional on the CLOSING BSP, does the DIRECTION of the move predict the result? If the close is efficient, a firmer and a drifter that close at the SAME price must win at the SAME rate. On 121,542 runners with real pre-play volume, they do:
$3-5: FIRM 25.9% / DRIFT 25.5% win — implied 25.9% / 25.4%
$5-8: FIRM 16.5% / DRIFT 15.0% — implied 15.9%
$8-15: FIRM 11.0% / DRIFT 9.3% — implied 9.4% / 9.2%
No consistent, replicable gap in EITHER direction — not the under-reaction #3 needs, not the over-reaction #4 needs. ROIs bounce with no sign consistency ($8-15 FIRM shows +11.5% but ±17.3, i.e. noise). The closing price fully absorbs the move. This also settles the three-way contradiction: momentum (refuted), over-reaction (EJOR), and late-money (Crafts) cannot all be right — on Betfair AU, none of them are. Script: scripts/theory_price_path.py
Killed
Tipster / expert consensus ("wisdom of crowds")
P1
A consensus of expert tipsters adds information over the market price.
Reported: Benter: a consensus of ~48 newspaper tipsters had a standalone pseudo-R² (.1014) almost identical to a 9-factor fundamental model (.1016) — but combined with the public price it added
ΔR² = .0002 (vs .0090 for the fundamental model). His conclusion: when the tipster and the public price disagree,
the public price is superior.
Our test: Done, twice, independently.
Most likely to fool us: n/a
Source: Benter (1994) + our own 15,071-tip measurement
Our result: CONFIRMED, and it is the single most replicated result we have. Our own measurement on 15,071 tips at real Betfair SP: win alpha +0.73% ±3.54, place alpha −1.43% ±1.59 — zero in both markets. Backing a tip loses ~4% either way, and that 4% IS the commission. Benter reached the same conclusion in 1994 with ΔR²=.0002. Independent convergence, 30 years apart. Tipster-following is structurally dead.
Killed
Favourite-longshot bias, simple strategies
P1
Back extreme favourites / lay extreme longshots to harvest the favourite-longshot bias.
Reported: Verification REFUTED the exploitable version: despite a large and persistent FLB in PRICES, there are NO simple strategies with positive expected return — including backing extreme favourites (contradicting the classic Thaler & Ziemba 1988 claim). FLB is also not universal: the fitted risk parameter is 1.10–1.16 at US tracks but only 1.04 (n.s.) at Happy Valley and 0.94 (reversed) elsewhere.
Our test: Done.
Most likely to fool us: WRONG DENOMINATOR — the classic way this one fools people.
Source: Verified refutation of Thaler & Ziemba; + our own per-liability test
Our result: CONFIRMED KILLED. Our data: backing every band at BSP is negative in train AND test. Laying longshots looks like a fat edge on ROI-of-stake (backing $40+ loses −10 to −15%) but is ~0.00% per unit of LIABILITY — the bias is entirely eaten by the money you must post. The market is efficient in risk-adjusted terms.
Killed
Steamer/drifter MOMENTUM (price-move continuation)
P1
A runner whose price is firming will keep firming / outperform — follow the money.
Reported: REFUTED in verification: Betfair horse-racing price series show rapidly decaying autocorrelation and NO long-range memory; Hurst estimates indicate MEAN REVERSION, not persistence. The markets assimilate information quickly. Momentum-continuation is not mechanically exploitable. (Note this is the opposite of the path-OVER-reaction theory above, which says fade the move — only one of them can be right, and the momentum version is the one that was refuted.)
Our test: Done.
Most likely to fool us: UNTRADEABLE PRICES.
Source: Betfair price-series autocorrelation / Hurst studies (refuted claim set)
Our result: CONFIRMED KILLED, and it cost us a scare. Our firm_follower shadow policy runs −15.7%. Worse, our "price-move" analysis produced a phantom +19% edge that turned out to be pure morningwap corruption (the implied book summed to 140%; two groups at the SAME closing price showed 6.7% vs 33.3% win rates — physically impossible). Using a trustworthy price (ppwap) the effect vanished entirely.
Killed
In-play inefficiency
NEEDS DATA
P1
In-play markets are less efficient than pre-race and can be traded.
Reported: The literature supports in-play inefficiency, but testing it requires data time-stamped to the second with the full observable information set — and capturing it requires automated in-play execution.
Our test: Not pursued.
Most likely to fool us: n/a
Source: In-play exchange microstructure literature
Our result: RULED OUT ON EXECUTION, not evidence. We cannot automate in-play betting, so even a real edge here is unreachable. Closed by decision, not by data.