Usando IA para montar um time do Cartola

Jonathan Carvalho
Datarisk.io
Published in
7 min readSep 11, 2020

Geralmente, quando pensamos em Inteligência Artificial, temos o costume de associá-la a problemas elaborados, que envolvem dados volumosos e complexos, e a previsões que nunca conseguiríamos fazer sozinhos. No entanto, a IA na prática acaba sendo mais utilizada em atividades que um ser humano poderia realizar sozinho, mas excesso de demora e repetição, o que não é escalável. Um exemplo disso são os jogos, onde somos totalmente capazes de melhorarmos sozinhos com treino ou estudo, mas podemos usar a IA para aprender também alguns padrões que podem nos ajudar para melhorar nossa performance.

O Cartola FC é o jogo onde você pode montar seu próprio time com os jogadores reais da Série A do Campeonato Brasileiro. Você pode acompanhar o campeonato de maneira divertida competindo com os seus amigos e outros cartoleiros para ver quem sabe tudo de futebol e escolhe os melhores atletas.

Um exemplo disso é o CartolaFC, onde escalamos um time fantasia com jogadores de equipes do Brasileirão e ganhamos pontos conforme a performance desses profissionais na vida real. O desempenho do jogador no campeonato de verdade também influencia seu preço no Cartola, tornando-o mais caro ou barato conforme o campeonato avança. Normalmente, isso envolve ir acompanhando todos os jogos para saber quais jogadores estão bem, analisar histórico das estatísticas de jogo, decidir qual o melhor momento para vender um jogador e comprar outro, escolher manter um jogador que pode valorizar mais para frente entre outras escolhas. Nada que não conseguimos fazer com um pouco de tempo e amor pelo futebol. Mas o que será que acontece quando usamos inteligência artificial para fazer essas escolhas?

Escalei todo mundo do meu time favorito e meu time perdeu…

Neste artigo vamos passar por algumas abordagens de como usar IA para esse tipo de problema. Vamos aproveitar os dados desse repositório, que já tem organizado os dados de campeonatos passados e pontuação de jogadores, para nossos modelos. Usaremos os dados do campeonato de 2019, que já temos os dados de todas as rodadas.

XGBoost

Podemos começar com algo simples. Vamos usar os dados da rodada atual para prever os pontos dos jogadores na próxima. Só precisamos transformar algumas variáveis categóricas (clube, posição e status, por exemplo) e passar para o modelo. Nesse caso usamos o RankCount para transformar as variáveis e o XGBoost como modelo de regressão. Não vamos entrar em detalhes de como essas técnicas funcionam porque já temos alguns posts sobre os temas para conferirem (aqui e aqui). Para a métrica do modelo, vamos usar o erro absoluto médio. Basicamente fazemos a diferença do valor real pelo previsto e calculamos a média desses erros. Usamos o módulo do valor para que a soma dos erros com valores iguais mais com erros de sinais inversos não se anulem. Nesse caso, tivemos um erro médio de 1.3, ou seja, quando o modelo prever a pontuação dos jogadores, na média podemos errar 1 ponto pra mais ou para menos. Não é tão ruim, considerando que o máximo de pontos que um jogador fez na nossa base foi 37. Mas vamos dar uma olhada nas previsões para ter certeza de como estamos.

Vemos que o modelo até acerta bem os jogadores com pontuação mediana, mas ele não acerta os jogadores com pontuação muito boa ou muito ruim. Isso significa que já podemos usá-lo em situações onde temos quase todo o time montado com os melhores jogadores, e estamos na dúvida de em quais jogadores vamos gastar com o resto do dinheiro que sobrou. Mas se montarmos o time todo baseado nele, provavelmente ainda não iremos fazer muitos pontos. Vamos passar para uma abordagem um pouco mais complicada.

Redes Neurais Recorrentes

Redes neurais tem tido muito destaque recentemente por conseguir lidar com dados complexos como fotos, textos e sons (já usamos redes neurais aqui também para resolver alguns problemas com fotos). Elas funcionam muito bem com dados em que um estado anterior afeta o estado atual, por isso é muito usada em problemas com texto (onde a última palavra ou frase importa para entender o significado da próxima) ou séries temporais (se quiser estudar mais a respeito veja esse link). No próprio repositório dos dados, já temos um exemplo de modelo usando redes recorrentes, que aproveitamos para adaptar ao nosso objetivo. Em vez de usar apenas os dados da rodada anterior para prever a próxima, vamos aproveitar o poder das redes recorrentes e usar os dados das últimas 3 rodadas para sermos mais assertivos.

Com esse modelo conseguimos um erro médio de 1.4. Isso quer dizer que o modelo piorou?

Não. Com o XGBoost, raramente o modelo previa valores maiores que 5 pontos. Agora, ele consegue acompanhar o momento do jogador, e está acertando muito melhor aqueles que estão indo muito bem, já que um jogador que estava em um momento bom nas últimas rodadas tem mais chances de continuar pontuando bem. Como o modelo agora está arriscando valores maiores, o erro médio aumenta um pouco, e nem sempre um jogador que está bem vai continuar assim. Também precisamos ter mais dados para esse tipo de modelo, mas estamos mais próximos de saber quais os melhores jogadores para o nosso time.

Com as informações que juntamos até agora e com o resultado do modelo, podemos fazer alguns questionamentos. Por exemplo, sabendo que um jogador nosso não vai ir tão bem, mantemos ele no time para vendê-lo depois que valorizar? Trocamos ele por algum jogador que vai se sair melhor?

No final, saber se o jogador vai ir bem ou mal é um pedaço do jogo, e usamos essa informação em conjunto de outras para tomar a melhor decisão segundo uma estratégia pré definida, mas ainda somos nós decidindo o que fazer. E se pudéssemos ir além?

Aprendizado por reforço

O aprendizado por reforço também não é muita novidade no campo da inteligência artificial, mas tem ganhado muito destaque ultimamente depois de um modelo ter ganhado do campeão mundial de Go, um jogo de tabuleiro que consideravam complexo demais para um computador aprender sozinho. O aprendizado por reforço consiste em criar um ambiente em que o algoritmo vai aprender a melhor ação para um determinado estado. No final, temos uma política, que nada mais é do que uma sequência de ações que atingem um resultado ótimo. Fazendo uma analogia a um jogo de tabuleiro, sempre que olhamos o tabuleiro antes de jogar temos nosso estado atual, nossa jogada é uma ação, e a sequência de jogadas é nossa política. Se ganharmos o jogo, nossa política foi boa. Se perdermos, foi ruim.

No nosso caso, não iríamos mais só prever a pontuação dos jogadores, tentaríamos saber qual a melhor escalação em cada rodada para maximizarmos os pontos no final. Montamos nosso ambiente onde passamos os dados das últimas 2 rodadas e pegamos o resultado dos 11 jogadores escalados. Após a nova escalação, calculamos os pontos ganhos e o dinheiro gasto. Se o time não tiver todos os jogadores ou gastar mais dinheiro do que temos, enviamos um resultado negativo para o modelo. Se a escalação for válida, usamos os pontos acumulados para recompensa- lo. Jogamos todos esses dados em um algoritmo do tipo Ator-Crítico, onde treinamos uma rede neural para decidir a melhor jogada (Ator) e outra para prever o resultado daquela jogada (Crítico). Estamos simplificando bem toda a lógica por trás (se quiser ler mais a respeito, sugiro esse e esse link), mas a ideia é ter um modelo que aprende todo o processo do jogo, não apenas a pontuação dos jogadores.

Abaixo temos um exemplo do resultado do modelo:

Vemos que o output do modelo já nos dá todos os dados necessários para escalar nosso time. Ainda não estamos pontuando tão bem (um jogador de regular a bom no Cartola costuma pontuar em média 60 pontos por rodada), mas para esse primeiro teste vimos que é possível treinar um modelo para montar o time completo. No futuro voltaremos com esse modelo para aprofundar melhor algumas técnicas de aprendizado por reforço.

Encerramos por aqui esse post onde exploramos desde modelos mais comuns até os mais elaborados para exemplificar o uso de IA em uma tarefa comum de lazer. E você, já teve alguma ideia de como IA poderia facilitar alguma tarefa do seu dia a dia?

--

--