Kelly Criterion

Overview

The Kelly criterion (or Kelly bet/Kelly strategy) is a formula for sizing a sequence of bets to maximize the long-term expected value of the logarithm of wealth (equivalently, to maximize the long-term expected geometric growth rate). It was described by John Larry Kelly Jr. of Bell Labs in 1956.

The key insight: bet size should be proportional to your edge, not your confidence. A 60% win probability with odds of2.00 (b=1) gives Kelly fraction f* = (0.6×1 − 0.4)/1 = 0.20 (20% of bankroll). The formula works for any odds and probability.

Kelly has been demonstrated for gambling and is widely used in sports betting, blackjack, and financial markets. Warren Buffett and Bill Gross are commonly cited as using Kelly-style approaches. The criterion assumes known outcome probabilities — which in sports betting are never truly known.

Why It Matters

Kelly criterion is the foundation of bankroll management for sports bettors because:
1. Mathematically optimal: Kelly maximizes long-term geometric growth — no other staking strategy produces higher expected bankroll over time.
2. Automatic risk management: Kelly reduces stake size when edge is small or uncertain, eliminating overbetting.
3. Compounding built in: Kelly implicitly reinvests winnings by sizing bets as a fraction of current bankroll.
4. Framework for fractional Kelly: Full Kelly is too aggressive for real-world use; fractional Kelly provides the theoretical foundation for practical staking.

Key Formula

Kelly fraction (binary outcome):

$$f^* = \frac{bp - q}{b} = \frac{p(b+1) - 1}{b}$$

Where f* = fraction of bankroll to bet, p = probability of winning, q = 1 − p, b = decimal_odds − 1.

Simplified Kelly (b=1, even money):

$$f^* = 2p - 1$$

A 60% win probability → f* = 0.20 (20% of bankroll).

Expected geometric growth rate:

$$G(f) = p \ln(1 + fb) + q \ln(1 - f)$$

Kelly maximizes G(f) by setting dG/df = 0.

Worked Example

Bankroll = $10,000, model says Brazil 60% win, odds = 1.80 (b = 0.80)

Full Kelly:
f* = (0.60 × 0.80 − 0.40) / 0.80 = (0.48 − 0.40) / 0.80 = 0.10

Stake = $10,000 × 0.10 = $1,000

If win: bankroll = $10,800 (+8%)
If loss: bankroll = $9,000 (−10%)

Half Kelly: f* = 0.05, stake = $500

Code Snippet

def kelly_fraction(p, decimal_odds):
    """Calculate full Kelly fraction."""
    b = decimal_odds - 1
    q = 1 - p
    if b <= 0:
        return 0.0
    f = (p * b - q) / b
    return max(f, 0)  # no bet if no edge

def half_kelly(p, decimal_odds):
    """Half Kelly — standard practice."""
    return kelly_fraction(p, decimal_odds) * 0.5

def kelly_stake(bankroll, p, decimal_odds, fraction=0.5):
    """Calculate Kelly stake in dollars."""
    f = kelly_fraction(p, decimal_odds)
    return bankroll * f * fraction

# Example
bankroll = 10000
p, odds = 0.60, 1.80
f_full = kelly_fraction(p, odds)
f_half = half_kelly(p, odds)
stake_half = kelly_stake(bankroll, p, odds, fraction=0.5)
print(f"Full Kelly: {f_full:.3f} ({f_full*100:.1f}%)")  # 0.167
print(f"Half Kelly: {f_half:.3f} ({f_half*100:.1f}%)")  # 0.083
print(f"Stake: ${stake_half:.2f}")  # $833.33

Pitfalls

  • Requires accurate probabilities: If your probabilities are systematically overestimated, Kelly will overbet and increase risk of ruin.
  • High volatility: Full Kelly has ~33% chance of halving your bankroll before doubling it. Use fractional Kelly.
  • Bankroll dependency: Kelly stake sizes are proportional to bankroll, which changes over time — rebase regularly.
  • World Cup sample size: With only 64 matches, actual results will deviate significantly from theoretical Kelly growth.

See Also