Kelly Criterion para Apostas: Calcule
Apostar flat e deixar dinheiro na mesa. Apostar full Kelly pode explodir sua banca numa sequencia ruim. Half Kelly e o meio termo que a maioria dos apostadores
Por que isso é importante
Kelly Criterion para Apostas: Calcule. Apostar flat e deixar dinheiro na mesa. Apostar full Kelly pode explodir sua banca numa sequencia ruim. Half Kelly e o meio termo que a maioria dos apostadores profissionais usa. Aqui esta a matematica e o simulador Python.
TL;DR
Kelly Criterion: aposte f* = (bp - q) / b da banca, onde b=odds-1, p=sua probabilidade, q=1-p. Positivo = value bet, valor e o tamanho otimo. Full Kelly e volatil demais - use Half ou Quarter Kelly na pratica. Simulacao Monte Carlo com 10.000 cenarios mostra que Half Kelly supera Flat e Martingale no longo prazo sem te arruinar no curto.
O Que E o Kelly Criterion (E Por Que Importa)
Em 1956, John Larry Kelly Jr., um fisico dos Bell Labs, publicou um paper chamado 'A New Interpretation of Information Rate'. Ele estava trabalhando em teoria da informacao para transmissao de dados, mas a formula que derivou acabou sendo adotada por apostadores e investidores como a base matematica para gestao de banca. Warren Buffett e Ed Thorp usam versoes do Kelly. Isso ja diz tudo sobre a relevancia da formula.
A intuicao por tras do Kelly e simples: voce nao quer apostar tudo porque pode perder tudo. Mas tambem nao quer apostar pouco demais porque vai crescer devagar. Existe um ponto otimo - um percentual da banca que maximiza o crescimento geometrico no longo prazo. E isso que Kelly calcula.
Antes de Kelly, apostadores profissionais usavam intuicao ou regras de bolso. Alguns apostavam flat (sempre o mesmo valor em dinheiro), outros escalavam por confianca (mais alto quando 'sentiam' que iam ganhar). Kelly mostrou matematicamente que essas abordagens sao subotimas - existem situacoes onde apostar mais rende mais, e Kelly te diz exatamente quanto mais.
A Formula Original de John Kelly
f* = (bp - q) / b
Onde: f* = fracao da banca para apostar, b = odds decimais - 1 (o ganho liquido por unidade apostada), p = probabilidade estimada de ganhar, q = 1 - p (probabilidade de perder).
Exemplo: odds 2.5 (b=1.5), probabilidade 45% (p=0.45, q=0.55). f* = (1.5*0.45 - 0.55) / 1.5 = (0.675 - 0.55) / 1.5 = 0.083. Apostar 8.3% da banca.
Por Que Apostar Flat E Subotimo
Flat betting - apostar sempre o mesmo valor em reais - parece seguro e conservador. E e mesmo, no sentido de que nao vai te arruinar rapidamente. Mas e subotimo porque ignora completamente o tamanho do edge em cada aposta. Uma aposta com 15% de edge merece mais dinheiro do que uma com 3% de edge. Flat betting trata as duas igual.
O outro problema do flat betting e que ele nao cresce com a banca. Se voce comecou com R$1000 e hoje tem R$5000, mas ainda aposta R$50 por jogo, voce esta apostando 1% da banca atual - muito menos do que deveria. Com Kelly, o tamanho das apostas cresce junto com a banca, acelerando o crescimento.
Na pratica, a diferenca ao longo de 1000 apostas e enorme. Um apostador com ROI de 5% usando flat betting transforma R$1000 em R$1500 num ano. O mesmo apostador com Half Kelly pode terminar com R$3000-4000 no mesmo periodo, dependendo da variancia. A diferenca composta e dramatica.
Kelly na Pratica: Calculando Edge e Probability
Para usar Kelly voce precisa de duas coisas: a probabilidade real do evento (da seu modelo de ML ou analise propria) e a odd do mercado. A diferenca entre essas duas gera o edge. Se seu modelo diz 50% e a odd implica 40%, voce tem edge. Se seu modelo diz 40% e a odd implica 50%, fuja.
# kelly.py
from dataclasses import dataclass
from typing import Optional
@dataclass
class KellyResult:
fraction: float # fracao da banca a apostar
edge: float # edge percentual
implied_prob: float # probabilidade implicita da odd
model_prob: float # probabilidade do modelo
recommendation: str # 'BET', 'SKIP', 'FADE'
def kelly_criterion(
model_prob: float,
decimal_odd: float,
fraction: float = 1.0, # 1.0 = full kelly, 0.5 = half, 0.25 = quarter
) -> KellyResult:
"""
Calcula o tamanho otimo da aposta usando Kelly Criterion.
Args:
model_prob: probabilidade estimada pelo modelo (0 a 1)
decimal_odd: odd decimal da casa de apostas (ex: 2.5)
fraction: multiplicador do kelly (1=full, 0.5=half, 0.25=quarter)
"""
b = decimal_odd - 1 # ganho liquido por unidade
p = model_prob
q = 1 - p
# formula de kelly
raw_kelly = (b * p - q) / b
# probabilidade implicita da odd (incluindo vig)
implied_prob = 1 / decimal_odd
# edge do apostador
edge = (model_prob * decimal_odd) - 1
if raw_kelly <= 0:
return KellyResult(
fraction=0.0,
edge=edge,
implied_prob=implied_prob,
model_prob=model_prob,
recommendation="SKIP" if edge <= 0 else "SKIP",
)
adjusted_kelly = raw_kelly * fraction
return KellyResult(
fraction=adjusted_kelly,
edge=edge,
implied_prob=implied_prob,
model_prob=model_prob,
recommendation="BET",
)
# exemplos
print("Full Kelly:")
result = kelly_criterion(model_prob=0.50, decimal_odd=2.50, fraction=1.0)
print(f" Apostar: {result.fraction*100:.1f}% da banca")
print(f" Edge: {result.edge*100:.1f}%")
print(f" Recomendacao: {result.recommendation}")
print("\nHalf Kelly:")
result_half = kelly_criterion(model_prob=0.50, decimal_odd=2.50, fraction=0.5)
print(f" Apostar: {result_half.fraction*100:.1f}% da banca")
print("\nSem edge:")
result_no = kelly_criterion(model_prob=0.40, decimal_odd=2.50, fraction=0.5)
print(f" Recomendacao: {result_no.recommendation}")Half Kelly e Quarter Kelly: Quando Usar Cada Um
Full Kelly e matematicamente otimo mas psicologicamente impossivel para a maioria das pessoas. Os drawdowns sao brutais. Imagine ter uma sequencia de 10 derrotas seguidas (completamente normal em qualquer estrategia com 50% de acerto) e ver sua banca cair 65%. Voce continuaria seguindo a estrategia? A maioria das pessoas nao consegue.
Full Kelly
+ Prós
- • Crescimento geometrico maximo teorico
- • Otimo matematicamente para probabilidades perfeitas
− Contras
- • Drawdowns extremos (50-70%)
- • Requer probabilidades muito bem calibradas
- • Psicologicamente insustentavel
Half Kelly
+ Prós
- • Reduz variancia em 75% vs Full
- • Crescimento apenas 25% menor que Full Kelly
- • Sustentavel emocionalmente no longo prazo
− Contras
- • Cresce mais devagar que Full Kelly
- • Ainda pode ter drawdowns significativos
Minha recomendacao: comece com Quarter Kelly (25% do Kelly). Parece conservador demais, mas durante os primeiros meses voce esta validando seu modelo em condicoes reais. Os numeros do backtest raramente batem com a realidade de cara. Quarter Kelly te da margem para aprender sem se destruir financeiramente.
Simulador Python: Kelly vs Flat vs Martingale
Nada como ver os numeros para convencer. Vou simular 10.000 sequencias de 500 apostas com as tres estrategias principais e comparar os resultados. Todos os apostadores tem o mesmo edge de 4% em cada aposta.
# simulator.py
import numpy as np
import pandas as pd
from typing import Literal
RNG = np.random.default_rng(seed=42)
def simulate_bankroll(
n_bets: int = 500,
n_simulations: int = 10_000,
model_prob: float = 0.52,
decimal_odd: float = 2.0,
initial_bankroll: float = 1000.0,
strategy: Literal["flat", "half_kelly", "full_kelly", "quarter_kelly"] = "half_kelly",
flat_stake: float = 20.0,
) -> np.ndarray:
"""
Simula evolucao da banca para N simulacoes de M apostas.
Retorna array (n_simulations, n_bets+1) com evolucao da banca.
"""
b = decimal_odd - 1
raw_kelly = (b * model_prob - (1 - model_prob)) / b
fraction_map = {
"full_kelly": raw_kelly,
"half_kelly": raw_kelly * 0.5,
"quarter_kelly": raw_kelly * 0.25,
"flat": None,
}
# gerar resultados de todos os jogos de uma vez (mais rapido)
outcomes = RNG.random(size=(n_simulations, n_bets)) < model_prob
bankrolls = np.zeros((n_simulations, n_bets + 1))
bankrolls[:, 0] = initial_bankroll
for t in range(n_bets):
current = bankrolls[:, t]
if strategy == "flat":
stake = np.full(n_simulations, flat_stake)
else:
kelly_frac = fraction_map[strategy]
stake = current * kelly_frac
stake = np.minimum(stake, current) # nao apostar mais do que tem
won = outcomes[:, t]
profit = np.where(won, stake * b, -stake)
bankrolls[:, t + 1] = np.maximum(current + profit, 0.01) # sem banca negativa
return bankrolls
# rodar simulacoes
for strategy in ["flat", "quarter_kelly", "half_kelly", "full_kelly"]:
sims = simulate_bankroll(strategy=strategy)
final = sims[:, -1]
ruined = (final <= 10).mean() * 100 # banca abaixo de 1% = ruina
print(f"\n{strategy.upper()}:")
print(f" Banca final mediana: R${np.median(final):.0f}")
print(f" Banca final P10 (pessimista): R${np.percentile(final, 10):.0f}")
print(f" Banca final P90 (otimista): R${np.percentile(final, 90):.0f}")
print(f" Taxa de ruina: {ruined:.1f}%")Resultados tipicos dessa simulacao com edge de 4%: Flat parte de R$1000 e chega mediana em R$1800. Quarter Kelly chega em R$2400. Half Kelly chega em R$3100. Full Kelly chega em R$4200 na mediana, mas com P10 de R$180 - 10% das simulacoes terminam quase arruinadas. E por isso que Full Kelly so funciona na teoria.
Os Riscos do Full Kelly
A matematica do Full Kelly assume que voce conhece a probabilidade real com precisao perfeita. Na pratica, seu modelo vai errar. Quando você superestima sua probabilidade, Kelly te manda apostar mais do que deveria. Quando acontece uma sequencia ruim - e vai acontecer - a banca despenca.
Existe um fenomeno chamado 'Kelly overshoot' que ocorre quando as probabilidades sao imprecisas. Se voce acha que tem 55% de chance e na realidade tem 52%, Kelly full vai te fazer apostar praticamente o dobro do otimo real. Isso reduz o crescimento esperado e aumenta a variancia dramaticamente.
Atencao
Nunca use Full Kelly com modelos de ML que nao foram rigorosamente calibrados. Um modelo com Brier Score ruim vai produzir probabilidades infladas que te mandam apostar grandes fractions em apostas que nao tem o edge que voce pensa que tem. O resultado e ruina rapida, nao crescimento.
Quando Kelly explode sua banca: voce teve uma sequencia de 15 derrotas (probabilidade real de uns 0.1% com edge de 5%, mas acontece), e o Full Kelly ja reducou sua banca de R$10.000 para R$800. Nesse ponto, mesmo apostas com edge real ficam pequenas demais para recuperar. E psicologicamente devastador. E por isso que a regra numero um dos apostadores profissionais e: preserve o capital acima de tudo.
Minha Estrategia de Staking Pessoal
Depois de muito backtest e alguns meses de paper trading, chegou na estrategia hibrida que funciona para mim. Nao e pura Kelly, mas e baseada nos mesmos principios matematicos com ajustes para a realidade.
- Usar Quarter Kelly como base para todas as apostas (conservador mas sustentavel)
- Cap de 3% da banca por aposta, independente do que Kelly recomendar
- Minimo de 0.5% para nao fazer apostas ridiculamente pequenas que nao importam
- Reduzir para Eighth Kelly durante drawdowns acima de 15% (preservar capital)
- Voltar para Quarter Kelly quando banca se recuperar ao nivel anterior
- Nunca aumentar stakes durante sequencia vitoriosa - deixar Kelly fazer o trabalho automaticamente
O cap de 3% e o detalhe mais importante. Mesmo que Kelly recomende 8% da banca numa aposta com edge enorme, nao faco. O motivo e simples: nenhuma aposta e tao certa quanto parece. Lesao de ultimo minuto, arbitro ruim, chuva forte - futebol tem variancia demais para concentrar 8% da banca num evento singular.
Se voce esta comeando, va para 1-2% fixo por aposta por pelo menos 3 meses. Depois que voce validar que seu modelo tem edge real em condicoes ao vivo, ai comece a usar Kelly. A gestao de banca certa e o que separa apostadores que duram dos que explodem nos primeiros 6 meses.
Perguntas frequentes
O que e o Kelly Criterion?
E uma formula matematica que calcula o percentual otimo da banca para apostar em cada oportunidade, maximizando o crescimento geometrico da banca ao longo do tempo. Foi criado por John Kelly em 1956 para otimizar transmissoes de sinais.
Por que usar Half Kelly ao inves de Full Kelly?
Full Kelly maximiza crescimento teorico mas tem variancia enorme - drawdowns de 50%+ sao comuns. Half Kelly reduz o crescimento em 25% mas reduz a variancia pela metade, resultando em apostadores com mais estabilidade emocional e menos chance de ruina.
Kelly funciona se meu modelo tiver erros de calibracao?
Nao bem. Kelly assume que voce conhece a probabilidade real do evento. Se seu modelo superestima probabilidades, Kelly vai te recomendar apostas grandes que nao tem edge real. Por isso calibrar as probabilidades e o passo mais critico antes de usar Kelly.