0/70 completed
Market Analysis Interactive

Adverse Selection

When informed bettors have an edge, they bet more. The book's customer pool becomes adversely selectedโ€”dominated by those who beat the line.

๐ŸŽฏ The Adverse Selection Problem

If your prices are wrong, the people who know they're wrong will bet more. You end up trading disproportionately with informed counterparties.

The Lemons Problem

Like used car markets: only owners of bad cars want to sell at average price. In betting: only bettors with edge want to bet against you.

Who Bets?

  • Sharp (+EV): Bets when edge > cost
  • Public (-EV): Bets for entertainment

If sharps see +EV, they load up. Book's mix shifts toward losers (for the book).

Market Parameters

Sharp % of Pool 10
1 30
Sharp Edge (%) 5
0 10
Hold Rate (%) 5
2 10

๐Ÿ“Š Book's Expected Profit

+6.30%
per dollar wagered
From Sharps 0.00%
From Public 6.30%

Betting Pool Composition

Sharps (you lose to)
10%
Public (you win from)
90%

โœ“ Healthy mix. Public volume covers sharp losses.

Common Adverse Selection Scenarios

Early Lines

โš ๏ธ Sharps bet first, get best prices

โœ“ Lower limits on openers

Injury News

โš ๏ธ Informed bettors exploit slow line moves

โœ“ Faster line updates, API monitoring

Prop Bets

โš ๏ธ DFS players have research edge

โœ“ Wider spreads on props

Live Betting

โš ๏ธ Bettors watching game vs book with delay

โœ“ Faster feeds, wider spreads

๐Ÿ›ก๏ธ Mitigation Strategies

Screen

Limit/ban sharp bettors

Price

Widen spreads on vulnerable markets

Speed

Faster line updates reduce info edge

Pool

Attract more recreational bettors

R Code Equivalent

# Adverse selection model
calculate_book_profit <- function(sharp_pct, sharp_edge, public_edge, hold) { 
  sharp_ev <- sharp_edge - hold
  public_ev <- public_edge - hold
  
  # Book's profit is negative of bettor EV
  sharp_loss <- sharp_pct / 100 * sharp_ev * -1
  public_win <- (1 - sharp_pct / 100) * public_ev * -1
  
  return(sharp_loss + public_win)
}

# Find break-even sharp %
break_even_sharp <- function(sharp_edge, public_edge, hold) { 
  # At break-even: sharp_loss = public_win
  # s * (sharp_edge - hold) = (1-s) * (hold - public_edge)
  s <- (hold - public_edge) / (sharp_edge - public_edge)
  return(s * 100)
}

profit <- calculate_book_profit(10, 5, -2, 5)
cat(sprintf("Book profit: %+.2f%%\n", profit))

โœ… Key Takeaways

  • โ€ข Adverse selection: informed bettors bet more
  • โ€ข Book's pool skews toward those with edge
  • โ€ข Must win enough from public to cover sharp losses
  • โ€ข Screen: limit sharp bettors
  • โ€ข Price: widen spreads on vulnerable markets
  • โ€ข Speed: faster updates reduce info asymmetry

Pricing Models & Frameworks Tutorial

Built for mastery ยท Interactive learning