Pricing Framework Interactive
Vig / Juice / Hold
The house edge built into pricing. Understanding how to balance profitability with user experience and competitive positioning.
๐ Terminology
Vig (Vigorish)
The commission charged by the house. A $110 to win $100 bet has 10% vig on the profit.
Juice
Same as vig. "The juice is -110" means you pay $110 to win $100.
Hold
The percentage of total wagered that the house keeps. Also called the "overround" or "margin."
Market Settings
20% 80%
0% 15%
10$ 1000$
๐ House Edge
Overround 4.5%
Expected Profit $4.50
Bettor Disadvantage $8.61
Implied Odds (with Vig)
OVER
-109
Implied: 52.3%
True: 50% | Vig bump: +2.3%
UNDER
-109
Implied: 52.3%
True: 50% | Vig bump: +2.3%
Total Implied 104.5%
Fair market = 100%. Anything over 100% is the house edge.
Payout Impact
Fair Payout (0% vig)
$200.00
Actual Payout (4.5% vig)
$191.39
Bettor Loses
$8.61
๐ Competitive Landscape
Sharp Book
2.5%
-110/-110 โ -114/114
Standard
4.5%
-110/-110 โ -125/125
Retail
6%
-110/-110 โ -133/133
High Margin
10%
-110/-110 โ -155/155
Trade-off: Lower vig attracts sharp bettors and volume, but reduces per-bet profit. Higher vig maximizes profit per bet but loses price-sensitive customers.
โ๏ธ Vig Optimization
When to Lower Vig
- โ High-volume markets (NFL, NBA primetime)
- โ Attracting sharp money for price discovery
- โ Competitive markets with many alternatives
- โ Building user acquisition and retention
When to Raise Vig
- โ Exotic/niche markets (lower volume)
- โ Uncertain pricing (injury news, weather)
- โ High-correlation parlay combinations
- โ One-sided action requiring balance
R Code Equivalent
# Calculate vig/hold from odds
calculate_hold <- function(odds_over, odds_under) {
implied_over <- 1 / odds_over
implied_under <- 1 / odds_under
hold <- (implied_over + implied_under - 1) * 100
return(hold)
}
# Remove vig to get true probabilities
remove_vig <- function(odds_over, odds_under) {
implied_over <- 1 / odds_over
implied_under <- 1 / odds_under
total <- implied_over + implied_under
true_over <- implied_over / total
true_under <- implied_under / total
return(list(over = true_over, under = true_under))
}
# Add vig to true probability
add_vig <- function(true_prob, total_vig) {
# Split vig evenly
implied <- true_prob + total_vig / 2 / 100
decimal_odds <- 1 / implied
return(decimal_odds)
}
# Example
hold <- calculate_hold(1.9139, 1.9139)
cat(sprintf("Hold: %.2f%%\n", hold))โ Key Takeaways
- โข Standard -110/-110 = 4.5% hold
- โข Overround = sum of implied probs - 100%
- โข Higher vig = more profit per bet, less volume
- โข Sharp books run 2-3%, retail up to 10%+
- โข Vig is split across both sides of market
- โข Remove vig to calculate true probabilities