O modelo calcula a probabilidade de cada time ser campeão, ser rebaixado ou se classificar à Libertadores e SulAmericana. Para a Série B, calcula a probabilidade de ser campeão da série, subir para a Série A ou ser rebaixado para a Série C.

O processo é feito em VBA, simulando os resultados a partir de uma distribuição Poisson, pelo Método de Monte Carlo.

A partir dos resultados dos jogos que já ocorreram, são feitas quatro médias para cada time:

  • LMP = Gols feitos em casa
  • LVP = Gols feitos visitando
  • LMC = Gols levados em casa
  • LVC = Gols levados visitando

Cada um destes quatro valores é limitado inferiormente em 1, para não estrangular a projeção. Estes valores não serão alterados a cada rodada projetada, permanecendo sempre fixos enquanto a simulação estiver sendo feita, para reduzir o tempo de execução do programa.

Essas médias são utilizadas para simular duas variáveis aleatórias, Xj e Yj, para cada jogo j que ainda não foi realizado, após serem feitas as seguintes transformações e considerando os parâmetros de cada time:

λj,X = PGF × LMPX + PGL × LVCY

λj,Y = PGF × LVPY + PGL × LMCX

Sendo PGF o peso dos gols feitos e PGL o peso dos gols levados, com ambos entre 0% e 100%, e PGL = 1 – PGF. Para esta versão do modelo, os valores escolhidos para PGF e PGL são 80% e 20%, respectivamente, subjetivamente.

Desta forma,

Xj ~ Poisson(λj,X)

Yj ~ Poisson(λj,Y)

Após todos os jogos ainda não realizados terem sido simulados, é feito um snapshot da posição final de cada time, e esta tabela é somada aos runs anteriores, considerando todas as respostas buscadas.

Em seguida, os jogos simulados são limpos e uma nova simulação se inicia, se repetindo tudo (exceto a definição das médias).

Após o número de simulações ter sido atingido ou o usuário interromper o programa, o resultado final das posições é consolidado, mostrando a frequência.

Além de marcar quem está garantido na Libertadores, é possível adicionar ou remover pontos e gols relacionados a punições.

Arquivo da posição em 22/2/2021, com a Série B concluída e a Série A na 37ª rodada. As sheets funcionam da seguinte forma:

  • jogos: recebe os jogos e resultados já decorridos (falaremos em outro post sobre scraping, para facilitar a coleta).
  • Garantido: recebe uma marcação se algum time já tiver sido garantido na Libertadores, em decorrência de alguma outra conquista.
  • Punições: dá/tira pontos ou gols para algum dos times, em função de decisões externas ao campo.
  • Tabela: consolida a tabela dada a situação atual e contém os parâmetros do campeonato, assim como a quantidade de simulações. Geralmente, basta clicar em “Simular”, se nada de relevante mudar.
  • classificação: resultado das simulações até o momento.

Como o Excel não é muito eficiente para Monte Carlo, e como há rápida convergência, geralmente vamos parar de rodar o modelo antes de completar todas as simulações solicitadas. Escrevi um script com “gentle quitting“, para concluir a simulação atual antes de interromper de fato. Basta pressionar [Esc] diversas vezes até ele perguntar se deseja interromper, e confirmar.

Como sempre, o código está completamente aberto e adoraríamos ver melhorias e ports para outras linguagens mais eficientes.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.