2026-08-11 · 29de08d
Docs / 6 · Betting Strategy & Bankroll

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:

  1. Stale lines — a book slow to move after an injury / weather / news.
  2. Number shopping — taking the best price/side across books, especially across a key number (3, 7).
  3. Betting early, before sharp money tightens the opener (Benter: "profits have gone, and will go, to those who are 'in action' first").
  4. 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_model is 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 p is 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

  1. Compute p_model for spread cover and over/under (Doc 5 probability layer).
  2. De-vig the marketp_fair, fair_spread, fair_total.
  3. Flag a bet only if |model_number − fair_number| > threshold and p_model − p_fair > min_edge, with a bonus for crossing a key number.
  4. Size = fractional Kelly (start at ¼ Kelly) on p_model, capped per bet (e.g. ≤2–3% bankroll) and capped in total weekly exposure.
  5. 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.