All for Joomla All for Webmasters
Ciência de Dados Python

Campeonato Brasileiro: rankeando os times utilizando os métodos de Massey e Colley (em python)

Nota: Este artigo foi desenvolvido para a disciplina de ‘Métodos e aplicações de Ranking’ pelo mestrado da UFSJ, sob orientação do professor Vinícius Vieira. O código-fonte da implementação em python pode ser obtido aqui.

Estamos constantemente desempenhando a tarefa rearranjar um determinado grupo de itens sob algum critério de importância. Seja para definir os melhores discos do ano, melhores séries de determinado serviço de streaming ou mesmo os livros favoritos da biblioteca pessoal, essa é uma demanda que comumente desempenhamos de forma instintiva sob critérios que muitas vezes não estão muito claros ou muito menos quantificáveis. Ao analisarmos formas particulares de avaliar determinado conjunto é importante, portanto, ter em mente que esses métodos de classificação o fazem sempre tendo em foco determinado critério, nunca se tratando de um ranking definitivo. Tendo esse pano de fundo em mente, a tarefa de rankear determinado grupo se resume a ordená-lo segundo determinado score atribuído.

O campeonato brasileiro, competição esportiva de maior visibilidade nacional, há alguns anos vem determinando sua pontuação com base no número de vítorias/empates/derrotas (mais critérios de desempate) de suas equipes, que realizam jogos de ida e volta com os demais times.  Em situações com essa estrutura onde os elementos do conjunto realizam confrontos entre si, algumas outras formas de se avaliar esses confrontos se apresentam na literatura. Aqui neste post, vamos explorar os métodos de ranking de Massey e de Colley, aplicados a uma base com os dados de jogos do campeonato brasileiro entre 2000 e 2021, disponibilizados aqui. A implementação será demonstrada na linguagem python, com o auxílio das bibliotecas pandasnumpy.

Método de Massey

O Método de Massey, criado pelo professor de matemática Kenneth Massey enquanto um estudante de graduação no Bluefield College em 1997, é um dos métodos atualmente usados pelo Bowl Championship Series, um sistema de classificação que determina quais os scores dos times do futebol universitário da NCAA. Esse método faz uso da diferença de pontos (que em um jogo de futebol se dá como gols feitos menos gols sofridos) e as classificações obtidas também podem ser desenvolvidas para produzir um score ofensivo e  defensivo para cada equipe.  Em suma, para qualquer jogo entre a equipe i e a equipe j, o diferencial de pontos para a equipe i é a pontuação da equipe i menos a pontuação da equipe j. Em qualquer ponto de um torneio, o ponto diferencial para a equipe i será a soma de seus diferenciais de pontos para os jogos que disputou. ilustrar um exemplo, vamos tomar como base o seguinte cenário de confrontos, da NCAA 2005:

Duke Miami UNC UVA VT V-D Dif
Duke 7-52 21-24 7-38 0-45 0-4 -124
Miami 52-7 34-16 25-17 27-7 4-0 91
UNC 24-21 16-34 7-5 3-30 2-2 -40
UVA 38-7 17-25 5-7 14-52 1-3 -17
VT 45-0 7-27 30-3 52-14 3-1 90

Para este exemplo, podemos obter um vetor de rankings através do sistema Mr = p , dado como:

Onde o vetor p é o vetor das diferenças nos pontos (tabela anterior), o vetor r é o vetor a ser obtido onde cada posição i corresponde ao rating do time correspondente, e a matriz M é preenchida seguindo as regras:

  • Os elementos da diagonal principal Mii guardam o número de jogos realizados pelo time i
  • Os elementos fora da diagonal principal Mij , i ≠ j, guardam a negação do número que um time i jogou contra um time j.
  • No caso em questão, como cada time jogou uma vez com todos os outros times, sua negação fora da diagonal principal contém sua negação (-1), enquanto a diagonal principal contém os 4 jogos de cada time.
  • Por definição, as linhas de M somam zero (linearmente dependentes). Para que a matriz seja rank completa, substituímos a última linha de M por 1 e a última posição de p por 0.

A solução do sistema é dada por:

No exemplo a ser trabalhado, o ranking dos times do campeonato brasileiro pode ser calculado como mostra o código abaixo, utilizando o auxílio das bibliotecas pandas  e numpy , voltadas para aplicações em de ciência de dados:

O método de Massey avança ainda para calcular não somente um score geral para cada time, mas também seus índices de ataque ( o  – offensee defesa ( d  – defense). A partir do sistema original, podemos escrever a matriz M como a diferença de duas matrizes T e P, onde a primeira contém os elementos fora da diagonal principal, enquanto a última contém os elementos principais. Substituindo no sistema anterior e desenvolvendo algebricamente:

Agora a equação obtida em (5) pode ser dividida em:

  • To – Pd = f
  • Po – Td = a

A primeira equação diz que o total de pontos marcados por um time pode ser obtido pela multiplicação do score de ataque pelo número de jogos realizados subtraído pela soma dos scores de defesa dos seus oponentes. Trabalhando apenas com To -Pd = f para resolver o  e d , temos:

De onde temos que Tr -f  é um vetor de constantes se r já estiver calculado. Assim, o método de Massy para encontrar d  (dado r ) fica: (T+P)d = Tr - f  (este lado já resolvido). Uma vez que resolvemos e temos r  e d  disponíveis, pode ser computado utilizando a equação r = o+d . Para o dataframe que estamos trabalhando, esses valores podem ser obtidos como demonstra o código abaixo:

 

Método de Colley

O método de classificação de Colley, que foi usado nas classificações BCS antes da mudança no sistema, é uma modificação do método mais simples de classificação, de porcentagem de vitórias. O método de Colley nos dá, de forma semelhante, um score para cada equipe, que podemos usar para encontrar uma classificação para as equipes. A porcentagem de vitórias é o principal método de rating para a maior parte das ligas. Entretanto, esse sistema possui algumas falhas:

  • Empates nas notas ocorrem com frequência em esportes onde os times jogam a mesma quantidade de vezes com os mesmos times
  • A força dos oponentes não é considerada na análise (derrotar o oponente mais fraco na liga traz a mesma pontuação que derrotar o mais forte)
  • Times que não vencem ficam com nota 0 (não reflete de fato a realidade)

O método de Colley começa com uma pequena modificação na porcentagem de vitórias, tal que:

Onde o vetor de ratings r  do time i é obtido em função da quantidade de vitórias e jogos totais como w  e t , respectivamente. Essa modificação, embora modesta, traz uma série de vantagens:

  • Em vez de iniciar com o rating ininterpretável 0, cada time começa com 1/2.
  • Se um time perde o primeiro jogo, sua nota cai para 1/3, o que Colley argumenta que faz muito mais sentido que 0.
  • Um time deve receber uma recompensa maior do que por enfrentar um time mais fraco, uma vez que a nota a ser obtida está relacionada à nota de seu oponente

Na representação matricial, para obtermos um sistema, a equação de Colley pode ser escrita de maneira compacta como Cr = b , onde:

  • r é o vetor de incógnitas, de tamanho n
  • é o vetor de termos independentes de tamanho n tal que bi = 1 + (wi – li)/2
  • C é a matriz de coeficientes definida por:
    Onde nij é o número de vezes que o time i jogou com o time j. Utilizando o exemplo anterior da liga NCAA, o sistema seria montado da seguinte forma:

Resolvendo o sistema, temos:

Para aplicar esses conceitos e obter os ratings na base do campeonato brasileiro, a implementação segue assim:

Como no método de Massey, o vetor r obtido contém os ratings de cada time, que possibilitam a ordenação para obter a classificação segundo o método.

Executando o script python

No código disponibilizado para download, o arquivo principal pode ser executado da seguinte forma:

Para o ano de 2019, por exemplo, obtemos a seguinte saída:

# Clubes PG J V E D GP GC SG r – Massey o d r – Colley
1 Flamengo 90 38 28 6 4 86 37 49 1.22 1.68 -0.45 0.78
2 Santos 74 38 22 8 8 60 33 27 0.675 0.98 -0.31 0.66
3 Palmeiras 74 38 21 11 6 61 32 29 0.725 1.01 -0.28 0.67

Na amostra acima é possível verificar, por exemplo, que segundo ambos os rankings, o Palmeiras teria ultrapassado o Santos em sua classificação. Outros anos como 2009 e 2020, cuja disputa do campeonato se estendeu até a última rodada, também vale a análise e interpretação dos resultados. Quaisquer dúvidas ou sugestões, por favor utilize a área de comentários ou entre em contato!

Você Também Pode Gostar

Nenhum Comentário

Deixe uma Resposta