ESPORTE
COM VALOR
← Página inicial

Distribuição de Poisson nas apostas esportivas: modelo de gols passo a passo

Por Bruno Favoretto · 22/09/2026

Gráfico de Distribuição de Poisson

Um gol é um evento raro, que acontece em qualquer momento do jogo e (numa primeira aproximação) sem “combinar” com o gol anterior.

É exatamente o tipo de fenômeno que a distribuição de Poisson descreve: dado o número médio de eventos esperados (λ, “lambda”), ela calcula a probabilidade de acontecerem 0, 1, 2, 3… eventos.

P(k gols) = e^(−λ) × λ^k / k!

Se um time deve marcar em média 1,5 gol, então:

Gols012345
Prob.22,3%33,5%25,1%12,6%4,7%1,4%

Repare que 1 gol é o resultado mais provável, embora a média seja 1,5. Essa é a primeira lição do modelo: a média não é o placar esperado, é o centro de uma distribuição.

Passo 1: reúna os dados

Você precisa de gols marcados e sofridos por time, separados em casa e fora, de uma mesma liga e temporada (ou janela recente). Fontes comuns: FBref, Understat, Football-Data.co.uk (este tem histórico em CSV).

Calcule também a média da liga:

  • média de gols do mandante por jogo (ex.: 1,50)
  • média de gols do visitante por jogo (ex.: 1,15)

Passo 2: calcule as forças de ataque e defesa

Compare cada time com a média da liga:

  • Ataque = gols marcados pelo time (no mando em questão) ÷ média da liga naquele mando
  • Defesa = gols sofridos pelo time ÷ média da liga. Acima de 1,00 significa defesa pior que a média.

Exemplo hipotético, Time A (mandante) contra Time B (visitante):

  • A marca 1,80 em casa → ataque = 1,80 / 1,50 = 1,20
  • B sofre 1,50 fora → defesa = 1,50 / 1,50 = 1,00
  • B marca 1,00 fora → ataque = 1,00 / 1,15 = 0,87
  • A sofre 1,15 em casa → defesa = 1,15 / 1,15 = 1,00

Passo 3: estime o λ de cada time no jogo

λ = ataque do time × defesa do adversário × média da liga (do mando)

  • λ do Time A = 1,20 × 1,00 × 1,50 = 1,80
  • λ do Time B = 0,87 × 1,00 × 1,15 = 1,00

Passo 4: gere a distribuição de cada time

Gols012345
Time A (λ = 1,8)16,5%29,8%26,8%16,1%7,2%2,6%
Time B (λ = 1,0)36,8%36,8%18,4%6,1%1,5%0,3%

Passo 5: cruze as duas distribuições

Assumindo que os gols dos dois times são independentes, a probabilidade de um placar é o produto das probabilidades. Exemplo: 1-1 = 29,8% × 36,8% ≈ 10,9%.

Some as células da matriz de placares e você obtém os mercados:

  • Vitória do A: placares em que A marca mais → ≈ 56%
  • Empate: diagonal da matriz → ≈ 23%
  • Vitória do B: ≈ 21%
  • Mais de 2,5 gols: o total de gols também é Poisson, com λ = 1,8 + 1,0 = 2,8. P(≤ 2 gols) ≈ 47%, logo over 2,5 ≈ 53%
  • Ambos marcam: (1 − 16,5%) × (1 − 36,8%) ≈ 53%

Um detalhe que costuma surpreender o leitor: o placar mais provável (1-0 ou 1-1, empatados em ~10,9%) tem só cerca de 1 chance em 9. Nenhum placar isolado é “provável”, e é por isso que apostar em placar exato é tão difícil.

Passo 6: transforme probabilidade em odd justa

Odd justa = 1 / probabilidade:

  • Vitória do A: 1 / 0,561 ≈ 1,78
  • Empate: 1 / 0,231 ≈ 4,33
  • Vitória do B: 1 / 0,208 ≈ 4,81

Se a casa paga 1,90 pela vitória do A, a odd está acima da sua odd justa, e seu modelo enxerga valor. Como vimos no artigo sobre Kelly, isso só vale se a probabilidade estimada for confiável, e um primeiro modelo simples quase nunca é preciso o bastante para isso. Comece usando-o para entender o mercado, não para apostar.

Passo 7: faça o mesmo em código

from math import exp, factorial
def poisson(k, lam):
return exp(-lam) * lam**k / factorial(k)
lam_casa, lam_fora = 1.8, 1.0
N = 10 # placares de 0 a 9 gols por time
m = [[poisson(i, lam_casa) * poisson(j, lam_fora) for j in range(N)] for i in range(N)]
p_casa = sum(m[i][j] for i in range(N) for j in range(N) if i > j)
p_emp = sum(m[i][i] for i in range(N))
p_fora = sum(m[i][j] for i in range(N) for j in range(N) if i < j)
print(f"Casa {p_casa:.1%} | Empate {p_emp:.1%} | Fora {p_fora:.1%}")
print(f"Odds justas: {1/p_casa:.2f} | {1/p_emp:.2f} | {1/p_fora:.2f}")

Também dá para fazer numa planilha com a função POISSON.DIST (o nome pode variar entre Excel e Sheets em português).

Onde o modelo falha (e por que isso é bom para aprender)

  1. Independência é uma simplificação. A formulação clássica de Poisson pode apresentar problemas na modelagem de alguns placares baixos, especialmente 0-0 e 1-1. A correção de Dixon-Coles foi desenvolvida, entre outras coisas, para tratar essa dependência específica.
  2. Amostra pequena engana. Com poucos jogos, um time com sorte na finalização parece ter ataque de elite. O ideal é usar xG em vez de gols, ou “encolher” as médias em direção à média da liga.
  3. Dados velhos pesam demais. Times mudam. Modelos melhores dão mais peso aos jogos recentes.
  4. O modelo não sabe de escalação. Lesões, suspensões, rodízio e motivação não entram na conta.
  5. Gols têm mais variância que Poisson prevê. Em algumas bases reais, observa-se maior variância do que a prevista pelo Poisson, fenômeno conhecido como overdispersion.
  6. Estado do jogo altera o comportamento. Quem está ganhando recua, quem está perdendo se expõe, e isso quebra a ideia de ritmo constante.

Conclusão

O valor do Poisson não está em “prever o jogo”, e sim em forçar você a pensar em probabilidades: o que o mercado está dizendo, o que os dados dizem, e onde as duas leituras divergem. É um bom primeiro degrau antes de xG, Dixon-Coles e modelos bayesianos.