vf-and-mba-targets draft
VF (vig-free) and MBA (Major Book Average) reference prices, and how to derive evaluation targets from them via the cross-side flip
- Tags
- reference-prices vf mba evaluation targets
- Vocabulary
- mba
- Major Book Average — the cross-book average of customer-facing American odds on each side of a market. Includes the vig (because customer-facing prices include the vig). Notation: MBA-Magic, MBA-Lakers.
- vf
- Vig-Free — a devigged price pair where implied probabilities sum to exactly 1.0. Can be computed from a single book's two-sided line OR from the MBA pair. Strips the vig.
- cross_side_flip
- The operation -P that converts a price on one side of a binary market into a target on the OTHER side. Just the negation of an American odds value.
- target_price
- The price you need to beat on the side you're considering, derived from the OTHER side's MBA or VF via the cross-side flip.
- evaluation_ladder
- Two-tier framework: VF target is the minimum threshold (clearing it means at least fair-probability +EV); MBA target is the true goal (clearing it means better than the consensus implicit position).
- major_books
- The curated set of sharp books used in MBA computation — typically Pinnacle, BetOnline, Circa, BetCRIS in Kairos.
When you're evaluating a quote, two reference price pairs matter: the MBA (Major Book Average) and the VF (Vig-Free) version of it. They are two stops on the same evaluation ladder — VF is the minimum threshold to clear, MBA is the true goal.
The mechanic for deriving the target on a side you actually want to bet is the same in both cases: take the OTHER side's MBA (or VF) value, and negate it. That negation is the cross-side flip.
What MBA is
MBA stands for Major Book Average. For each side of a market, take the customer-facing American odds quoted by each major book and average them — that's the MBA on that side.
MBA prices include the vig. They are the prices the books are actually willing to sell to customers, vig and all. MBA is not vig-free.
Example. Magic vs. Lakers. The major books across the industry quote, on average:
- Magic +150
- Lakers −165
So MBA-Magic = +150 and MBA-Lakers = −165. The implied probabilities (100 / 250 = 0.400 on Magic; 165 / 265 = 0.623 on Lakers) sum to 1.023 — the 2.3% excess is the vig the consensus is charging.
What VF is
VF stands for Vig-Free. To get VF, take a two-sided line — either a single book's quote or the MBA pair — and devig it. The devigged implied probabilities sum to exactly 1.0.
Continuing the Magic / Lakers example, devig the MBA pair:
- Implied prob Magic: 100 / 250 = 0.400
- Implied prob Lakers: 165 / 265 = 0.623
- Sum: 1.023 (the vig)
- Devigged Magic prob: 0.400 / 1.023 = 0.391
- Devigged Lakers prob: 0.623 / 1.023 = 0.609
- Sum: 1.000 ✓
Convert back to American:
- VF-Magic: p = 0.391 < 0.5 → underdog → +(1 / 0.391 − 1) × 100 = +156
- VF-Lakers: p = 0.609 ≥ 0.5 → favorite → −(0.609 / 0.391) × 100 = −156
So the VF pair is Magic +156 / Lakers −156 — a balanced, no-vig version of the same market. Note the symmetry: VF on a binary market always produces a numerically equal (sign-flipped) pair when the devig method is symmetric.
How MBA derives a target
If you want to bet Lakers, the MBA target on Lakers is the cross-side flip of MBA-Magic:
MBA target on Lakers = −(MBA-Magic) = −(+150) = −150
Plain English: when the major books sell Magic +150, they're implicitly long Lakers at −150 — that's their breakeven on the Lakers side, given what they took for the Magic side. The major-book consensus implicit position on Lakers is −150. To be better than that consensus, you need a Lakers price better than −150 — a softer book offering −145, or a Kalshi NO at the equivalent of −145, etc.
How VF derives a target
If you want to bet Lakers, the VF target on Lakers is the cross-side flip of VF-Magic:
VF target on Lakers = −(VF-Magic) = −(+156) = −156
Plain English: this is the line where there's no vig and no edge in either direction — pure 50/50 in pure-probability EV terms. Beating −156 means you've squeezed out positive EV against a no-vig fair line. It's the floor.
Evaluation hierarchy
For Lakers, from worst to best for the bettor:
| Lakers price | What it means |
|---|---|
| −165 | Book's offered price (full vig). Avoid. |
| −156 | VF target. Minimum threshold — beating this means you're at least fair-probability +EV. |
| −150 | MBA target. True goal — beating this means you're +EV against the consensus implicit position. |
| less negative than −150 (e.g. −145, +120) | You're winning against the consensus. |
A Lakers price of −160: beats the book's offer (−165), doesn't beat VF (−156). Still −EV. Skip.
A Lakers price of −155: beats VF (−156), doesn't beat MBA (−150). Marginally +EV. Acceptable but not strong.
A Lakers price of −148: beats both. Strong bet — better than the major-book consensus implicit position.
VF can be computed from a single book OR from the MBA
Two ways to get a VF reference:
- Single-book VF. Take one book's two-sided line (e.g. that book's Magic +148 / Lakers −163), devig it, get that book's own VF pair. Useful when you're evaluating a single book in isolation.
- MBA-derived VF. Average across major books to get MBA, then devig the MBA pair. Useful when you want the consensus's vig-free belief, not just one book's. This is the canonical Mimir recommendation for evaluation against "what the market thinks."
The math is the same either way. The choice is just about scope: single book or consensus.
Cross-strike line translation (spread/total markets)
For moneyline markets, MBA computation is straightforward — every book quotes the same outcome (Magic wins / Lakers wins), so averaging across books works directly.
For spread and total markets, books often quote at different strike points. Book X has Patriots −3.5; Book Y has Patriots −4. You can't average those directly — they're prices on different products (Patriots winning by 4+ vs. winning by 5+). The fix is the "common denominator" step: translate each book's quote to a common target line first, THEN compute MBA at the target.
In Kairos, this lives in kairos/core/spread_mba.py::mba_at_target_line. The procedure:
- Pick a target line (e.g. Patriots −3.5).
- For each major book, translate that book's native odds to the target via
convert_line_odds. The half-point conversion uses a default of 9 American-odds points per half-point of line, applied via a step-scale (american_to_step/step_to_american) that's monotonic but non-linear in American odds. - Average the converted American odds in implied-probability space — equal weight across the sharp-book list (
pinnacle,betonline,circa,betcris). - Output: MBA pair at the chosen target line.
The line-translation step is the only thing spread/total-specific. Once everyone is at the common target, MBA computation and target derivation work the same as moneyline.
Worked example: cross-strike
Three sharp books quote a Patriots-vs-Jets spread; you want MBA at target line Patriots −3.5:
| Book | Native (Patriots) | Native odds |
|---|---|---|
| Pinnacle | −3.5 | −110 / −110 |
| BetOnline | −4 | +100 / −120 |
| Circa | −3.5 | −108 / −112 |
Pinnacle and Circa are already at the target — pass through. BetOnline at −4 needs translation to −3.5: moving Patriots from −4 to −3.5 makes the bet easier for Patriots to cover (they only need to win by 4+ instead of 5+), so Patriots' converted odds get worse (less plus-money). The Jets side moves the opposite way: at +4, Jets cover when the margin is 1, 2, or 3 (a margin of 4 is a push); at +3.5, that push becomes a loss, so Jets cover in fewer outcomes — harder bet, Jets' odds at +3.5 get better. Cross-strike conversion always moves the two sides in opposite directions because the strike change shifts the push outcome.
Once translated, the three books are apples-to-apples and the standard MBA averaging applies.
Where this lives in Kairos
- Cross-side flip:
opp_side_price(o) = -float(o)inkairos/core/odds.py. - Single-book devig (for VF):
kairos/core/odds.pydevig methods, with probit as default. Seedevigging. - MBA across books for moneyline: combination of
opp_side_priceand book averaging. - MBA across books for spread/total (with line translation):
mba_at_target_lineinkairos/core/spread_mba.py. - Probability-space averaging helper:
_avg_american_via_probinkairos/core/spread_mba.py. Same helper documented inconsensus-fair-line.
Gotchas
- MBA includes vig; VF doesn't. They're two different objects, not synonyms. MBA is what the books offer customers (vig and all). VF is what those prices would be without vig.
- MBA and VF aren't competing — they're a ladder. VF target is the minimum (you're at least fair-probability +EV); MBA target is the true goal (you beat the consensus). Bets that clear VF but not MBA are marginal +EV — acceptable, not strong.
- The target is on the SAME side as the bet you're considering, but derived from the OTHER side's MBA/VF via cross-side flip. Easy to mis-compute by averaging the same-side prices instead.
- Don't compare your line to the customer-facing MBA on the same side directly. The book's quoted Lakers price (−165 in our example) includes vig and is not your evaluation target. The MBA-derived Lakers target (−150) comes from cross-side-flipping the Magic side.
- VF requires a two-sided line. If only one side is posted, you can't compute VF — there's nothing to devig. MBA only requires that each major book quotes the side(s) you care about.
- For spread/total markets, line translation is required first. Without it, you're averaging prices on different products. The step-scale conversion is non-linear in American odds — a half-point near pick'em swings odds harder than the same half-point near a heavy favorite.
- Sharp-book selection matters. Kairos's MBA averages over a curated list (
pinnacle,betonline,circa,betcris). Including soft books would pollute the consensus. - Devig method affects VF, but not MBA. MBA is just an arithmetic average — no method choice. VF depends on the devig method (probit per Mimir's canonical, see
devigging).
Open questions
- Whether VF should always be computed from MBA (cross-book) or sometimes from a single book's two-sided line. Both are valid; the choice affects what "fair" means in the evaluation. Kairos uses single-book VF in some places and cross-book elsewhere.
- Whether the line-translation step in spread/total MBA should use a sport-aware conversion table (different points-per-half-point near key numbers like 3 and 7 in NFL) instead of the flat 9-point default. Currently flat.
- Whether the MBA sharp-book list should be configurable per market (e.g. tighter list for spreads where line shopping matters more, broader list for moneylines) instead of one fixed list.