← All findingssource · memory/project_odds_floor_validated.md
Measured 2026-08-03 on priced_lineedges, WNBA, 255 settled+priced rows
from /clv/picks (grading's own settlement, not hand-graded):
| bucket | record | hit% | units | ROI |
|---|---|---|---|---|
| served (decimal ≥ 1.70, i.e. −143 or better) | 99-61 | 61.9% | +27.32 | +17.1% |
| dropped by the floor (juicier than −143) | 58-37 | 61.1% | −1.57 | −1.7% |
The finding: hit rates are statistically identical across the split —
the model's signal is equally good on expensive picks. The entire ROI
difference is PRICE. A ~62% hit rate cannot outrun heavy juice, and
~−143 is empirically where it stops being outrunnable. This is the
cleanest natural experiment in the ledger (same formula, same night mix,
split only by price) and it validates defaultRecommendMinDecimalOdds
(see project_roi_guard_nightly_tiers) on money-weighted data rather
than reasoning alone.
SHIPPED 2026-08-03 — grading c71817d + 3355ceb (min_decimal_odds on
/clv/by-formula and /clv/curve; ints + epsilon, because bet_odds_american
is an INTEGER column and float bounds 500'd in prod on the first call),
nightly-picks 2b400f9 (headline record + curve pass
SERVED_MIN_DECIMAL_ODDS=1.70, disclosure line on the marketing scoreboard
and the ledger strip). Live-verified: the public record went
157-98/+10.1% -> 99-61 / +27.3u / +17.1%. The site had been
UNDERSTATING itself.
Worth testing next: raise the floor. Measured live the same day:
1.70 -> 99-61, +17.1% (n=160); 1.80 -> 77-45, +21.9% (n=122) — nearly
identical units (+26.8 vs +27.3) from 38 fewer bets. Tempting, but that
is in-sample selection on the same data that motivated the floor; run it
FORWARD via RECOMMEND_MIN_DECIMAL_ODDS before believing it. The −120..−143 band is where the
marginal served picks live; if the effect is monotone, a 1.80 floor may
beat 1.70. RECOMMEND_MIN_DECIMAL_ODDS makes this an env-var experiment.
The caveat that must travel with the number: +17.1% sits on +1.04¢ CLV. A ~1% closing-line edge does not generate 17% long-run — most of the gap is variance on a modest real edge, and the honest forecast for the served board is low single digits. Same "ROI running ahead of CLV" pattern the CLV veto exists to catch, now applying to our own best formula. Also not a holdout: the 1.70 floor was chosen by reasoning and then measured on this data.
Reporting discipline (my own error, 2026-08-03): I first reported the 8/02 night as "16-7, +29.2%" — true for the SERVED card — without showing that full capture was 19-16 / −0.9%. Always quote both the served subset and the full capture; the served slice alone flatters. See feedback_model_edge_calibration.
SHIPPED as a formula 2026-08-23 (grading-service 483c234):
priced_lineedges_floored applies the 1.70 floor at GENERATION, not at
reporting — the losing half no longer reaches the board. Re-measured on
priced_lineedges' own 808 decided picks: >=1.70 → 507 picks, +63.3u, +12.4%
ROI, CLV +1.30% vs <1.70 → 301 picks, -11.5u, -4.9% ROI, CLV +0.69% — at
hit rates of 59.6% and 60.1%. The losing bucket wins MORE often. Accuracy
cannot separate them; price is the whole difference.
The unfloored parent stays registered on purpose, so the floor's effect stays measurable forward rather than only in hindsight.
Implementation trap: compare in AMERICAN INTEGER space, not decimal.
(1.70-1)*100 is 70.00000000000002, so a naive Ceil rounds to 71 and
silently drops every +70 price. Boundaries: +70 in / +69 out / -142 in /
-143 out; bet_odds_american == 0 (no captured price) is never servable.
Canonical constant: defaultRecommendMinDecimalOdds in
internal/handlers/nightly_picks.go. See project-deepseek-migration for the
other live change the same day.