Half-Kelly¶
Overview¶
Half-Kelly is the practice of betting 50% of the mathematically optimal Kelly fraction. It is the industry standard for sports betting applications because it strikes a balance between growth maximization and risk management. The key insight is that full Kelly has very high volatility and risk of ruin — a full Kelly bettor has a ~33% chance of halving their bankroll before doubling it. Half-Kelly reduces this to ~11%.
The Kelly criterion mathematically maximizes long-term geometric growth, but it assumes perfectly accurate probability estimates. In practice, sports bettors' models are always somewhat wrong, making full Kelly too aggressive. Half-Kelly (and in some cases quarter-Kelly) is used as a safety buffer.
The client's spec explicitly calls for Half-Kelly implementation as the staking strategy.
Why It Matters¶
Half-Kelly is the practical standard for sports betting because:
1. Volatility reduction: Half-Kelly reduces bankroll variance to ~25% of full Kelly while sacrificing only ~40% of the growth rate.
2. Model error tolerance: Real models have probability estimation errors. Half-Kelly provides a buffer against this uncertainty.
3. Risk of ruin: Full Kelly's ~33% chance of halving before doubling is unacceptable for most bettors. Half-Kelly's ~11% is more manageable.
4. Regulatory alignment: Many betting operations use half-Kelly for risk management reasons.
Mathematical Comparison¶
For a 60% win probability, even money bet (b=1):
| Strategy | Kelly Fraction | Growth Rate | Risk of Halving |
|---|---|---|---|
| Full Kelly | 20% | 2.0%/bet | ~33% |
| Half Kelly | 10% | 1.2%/bet | ~11% |
| Quarter Kelly | 5% | 0.7%/bet | ~3% |
Growth rate of half-Kelly is ~60% of full Kelly; variance is ~25% — a favorable tradeoff.
Worked Example¶
Bankroll = $10,000, model says Brazil 60% win, odds = 1.80
Full Kelly: f = 0.167, stake = $1,670
Half Kelly: f = 0.083, stake = $830
Over 100 identical bets:
- Full Kelly expected bankroll: $10,000 × (1.02)^100 ≈ $72,400
- Half Kelly expected bankroll: $10,000 × (1.012)^100 ≈ $33,200
Full Kelly grows faster but with much higher variance.
Code Snippet¶
def half_kelly_stake(bankroll, model_prob, bookie_odds, fair_odds=None):
"""
Calculate half-Kelly stake for a value bet.
"""
b = bookie_odds - 1
q = 1 - model_prob
f_full = max((model_prob * b - q) / b, 0)
f_half = f_full * 0.5
stake = bankroll * f_half
ev = model_prob * bookie_odds - 1
return {
'full_kelly_fraction': f_full,
'half_kelly_fraction': f_half,
'stake': stake,
'stake_pct': f_half * 100,
'expected_value': ev,
'edge': (bookie_odds / fair_odds) - 1 if fair_odds else None
}
# Example
result = half_kelly_stake(
bankroll=10000,
model_prob=0.60,
fair_odds=1/0.60,
bookie_odds=1.80
)
print(result)
# {'full_kelly_fraction': 0.167, 'half_kelly_fraction': 0.083,
# 'stake': 833.33, 'stake_pct': 8.3, 'expected_value': 0.08, 'edge': 0.08}
Pitfalls¶
- Small sample distortion: With only 64 World Cup matches, actual results will deviate significantly from theoretical growth. Don't overinterpret short-term results.
- Bankroll changes stakes: After a losing streak, half-Kelly stakes shrink proportionally. This is correct behavior but can feel counterintuitive.
- Model must be well-calibrated: If the model systematically overestimates win probabilities, half-Kelly will still overbet relative to true edge.
- Consider a maximum stake cap: Never bet more than 5% of bankroll on a single wager, even if Kelly suggests otherwise.
See Also¶
- kelly-criterion — the theoretical foundation
- value-bet-identification — half-Kelly requires +EV bets to apply
- expected-value-ev — EV drives the Kelly fraction calculation