06 — Edge Identification, Bankroll & Bet Sizing
TL;DR. Compare your probability to the no-vig (de-vigged) line, not the raw price — your edge is
p_model − p_fair. Because σ ≈ 13.5, a 1-point disagreement is worth only ~2.9% of cover probability, so you generally need >~1–1.5 points of disagreement (ideally crossing a key number) before there's exploitable edge after vig. Size with fractional Kelly (¼–½): full Kelly has a ~50% chance of a 50% drawdown, and overbetting past 2× Kelly drives expected growth negative even when every bet is +EV. Track CLV as the leading indicator that the edge is real.
1. Where edge actually comes from
Most NFL games are efficiently priced at the close (Doc 1 §6). The realistic sources of edge for a non-syndicate operator:
- Stale lines — a book slow to move after an injury / weather / news.
- Number shopping — taking the best price/side across books, especially across a key number (3, 7).
- Betting early, before sharp money tightens the opener (Benter: "profits have gone, and will go, to those who are 'in action' first").
- Specific, persistent biases — Levitt (2004): books shade lines toward public favorites/overs/home-dogs; a documented bias is home teams covering as big underdogs. Recent work finds residual statistical inefficiencies in spreads and totals — small, but where the money is.
Beating the close via early/stale numbers is the practical edge — not out-predicting the closing line head-on.
2. The break-even math
- −110 implied probability =
110/210 =52.38% → you must win >52.4% ATS to profit at flat −110. - De-vig first. Convert both sides to implied prob, normalize to sum to 1 (Doc 1 §2). Your edge is:
edge_prob = p_model − p_fair (p_fair = de-vigged market probability)
Compare to p_fair, never to the raw quoted price (the raw price has the
vig baked in and overstates the bar).
3. How big must a disagreement be?
With σ ≈ 13.5, a 1-point spread disagreement is worth:
Φ(1/13.5) − 0.5 ≈ 0.529 − 0.5 = 2.9% of cover probability
That barely clears the ~2.4% vig — almost no margin. So:
- Require your model to differ from the fair line by > ~1–1.5 points (and ideally cross 3 or 7) before flagging a bet.
- Demand an estimated win probability comfortably above 52.4% — not 52.5%,
because your
p_modelis itself uncertain. A common practical floor is needing ~54–55%+ to act after accounting for model error.
Our engine's edge thresholds (configurable spread/total edges, default ~3/4 points) are in the right ballpark — they already demand a multi-point disagreement. The upgrade is to compare against the de-vigged line and to prefer disagreements that cross key numbers.
4. Kelly criterion — optimal bet sizing
f* = (b·p − q) / b = p − q/b ( = edge / odds )
where b = decimal odds − 1 (−110 → b = 0.909), p = your win prob, q = 1−p.
Worked −110 example, p = 0.55:
f* = (0.909·0.55 − 0.45) / 0.909 = (0.500 − 0.45)/0.909 ≈ 0.055 → 5.5% full Kelly
Always use fractional Kelly (¼–½)
- Growth scales ~linearly with the fraction; variance scales with the square.
- Half Kelly keeps ~75% of the growth while cutting variance ~75%.
- Drawdown: full Kelly ≈ 50% chance of a 50% drawdown; half Kelly ≈ 12.5%, losing only ~25% of growth.
- Overbetting is strictly bad: at 2× Kelly excess growth = 0; beyond 2×,
expected growth goes negative even though each bet is +EV. Since
pis an estimate, true Kelly is unknown — assume you're overbetting and fraction down.
Correlated / simultaneous bets
A full NFL slate is many simultaneous wagers on one bankroll. Naively summing Kelly fractions ignores correlation; correlated bets (same game, same QB, parlays) raise true risk of ruin. Cap total simultaneous exposure and shrink sizes for correlated positions.
Sources: Kelly criterion, uncertainty & Kelly, betstamp Kelly.
5. Why accuracy ≠ profitability
A model that predicts final scores beautifully but always agrees with the line makes zero bets and zero profit. Profit comes only from systematic disagreement with the no-vig close that is right more often than the vig requires. Therefore:
- Optimize and report ROI / CLV vs. the close, with confidence intervals.
- Use CLV as the leading indicator: positive CLV over 200+ bets is the real signal of an edge; short-run win% is mostly noise.
6. A staking & flagging policy for our engine
- Compute
p_modelfor spread cover and over/under (Doc 5 probability layer). - De-vig the market →
p_fair,fair_spread,fair_total. - Flag a bet only if
|model_number − fair_number| > thresholdandp_model − p_fair > min_edge, with a bonus for crossing a key number. - Size = fractional Kelly (start at ¼ Kelly) on
p_model, capped per bet (e.g. ≤2–3% bankroll) and capped in total weekly exposure. - Record the number we took vs. the closing number → CLV per bet and in aggregate. CLV is our weekly scorecard, ROI is the long-run one.
Today the engine flags bets on point-disagreement and a heuristic confidence score. Replace/augment that with: de-vigged comparison, a real cover/over probability, key-number awareness, fractional Kelly sizing, and CLV tracking.
Sources: J. Econ. Finance 2018 — residual inefficiencies, OddsJam CLV, arXiv 1211.4000.
→ Continue to Doc 7 — Engine Improvement Roadmap.