Acabou o primeiro turno do Brasileirão deste ano. Com isso temos dados de 19 rodadas para analisar o desempenho dos atletas. Escalar jogadores no Cartola é sempre um desafio de minimizar os riscos.
Cartoleiros letrados e numerados sempre começam olhando para as médias da temporada, probabilidade de vitória nos confrontos. Cartoleiros estudiosos também olham métricas mais refinadas tais como média em casa / fora, quantidade de chutes a gol, impedimentos, número de faltas…
Tentar classificar jogadores passa a ser então um problema bastante difícil de ser feito através da observação sistemática do atletas. Certo?
Neste tutorial, iremos tentar responder a pergunta usando um conjunto de técnicas bastante utilizadas entre cientistas de dados para tentar responder a seguinte questão.
É possível agrupar jogadores com estatísticas semelhantes no Cartola?
Para responder a esta questão, usaremos uma técnica de agrupamento conhecida por escalonamento multidimensional. De maneira resumida, iremos representar objetos com atributos multidimensionais numa matriz de dimensões reduzidas. Objetos com características mais semelhantes, estarão mais próximos. Isto é, combinar várias estatísticas dos jogadores do cartola num gráfico com dois eixos apenas e aqueles jogadores que possuírem características mais próximas estarão mais próximos uns dos outros.
Além de agrupar os jogadores com métricas similares, aplicaremos um algoritmo de agrupamento conhecido como Agrupamento por Propagação de Afinidade (do inglês, Affinity Propagation). Diferente de métodos clássicos de agrupamento como k-médias e k-medoides, o algoritmo de propagação por afinidade não requer que o número de clusteres seja definido de antemão pelo analista. Este algoritmo foi publicado na revista Science em 2007. Olhe as referências para satisfazer sua curiosidade.
Bem, primeiro vamos aos dados do Cartola. Em parceria com Arnaldo, eu organizo estatísticas do Cartola no repositório do Github caRtola. Nele você encontrará dados e estatísticas de 2014 até 2019. Vamos aproveitar uma base de 2019 que é atualizada toda rodada. :)
Vamos aproveitar a leitura e ver quais dados o arquivo nos fornece.
https://gist.github.com/6aa6cbc5347f1b274093fc2405c4c8e1
## Observations: 622
## Variables: 26
## $ player_slug <chr> "paulo-andre", "evandro", "betao", "ra…
## $ player_id <int> 37604, 37614, 37646, 37655, 37656, 376…
## $ player_nickname <chr> "Paulo André", "Evandro", "Betão", "Ra…
## $ player_team <int> 293, 277, 314, 290, 283, 275, 293, 341…
## $ player_position <chr> "zag", "mei", "zag", "ata", "gol", "za…
## $ price_cartoletas <dbl> 3.91, 5.04, 4.82, 3.26, 9.06, 6.97, 7.…
## $ score_mean <dbl> 0.7250000, 1.1200000, 2.2812500, 0.483…
## $ score_no_cleansheets_mean <dbl> -0.5250000, 1.1200000, 1.0312500, 0.48…
## $ diff_home_away_s <dbl> -0.07976546, -0.10409680, -1.08546112,…
## $ n_games <int> 4, 5, 16, 6, 16, 4, 5, 9, 17, 15, 7, 2…
## $ score_mean_home <dbl> 4.5000000, 1.1000000, 1.6428571, 0.433…
## $ score_mean_away <dbl> -0.5333333, 1.1333333, 2.7777778, 0.53…
## $ shots_x_mean <dbl> 0.0000000, 0.4000000, 0.1250000, 0.500…
## $ fouls_mean <dbl> 1.5000000, 1.2000000, 1.1250000, 1.166…
## $ RB_mean <dbl> 0.5000000, 1.0000000, 1.5000000, 0.333…
## $ PE_mean <dbl> 0.500000, 1.600000, 2.000000, 0.500000…
## $ A_mean <dbl> 0.00000000, 0.00000000, 0.00000000, 0.…
## $ I_mean <dbl> 0.00000000, 0.00000000, 0.00000000, 0.…
## $ FS_mean <dbl> 0.0000000, 0.6000000, 1.0000000, 0.666…
## $ FF_mean <dbl> 0.00000000, 0.20000000, 0.12500000, 0.…
## $ G_mean <dbl> 0.0000000, 0.0000000, 0.0000000, 0.000…
## $ DD_mean <dbl> 0.000, 0.000, 0.000, 0.000, 1.125, 0.0…
## $ DP_mean <dbl> 0.000, 0.000, 0.000, 0.000, 0.125, 0.0…
## $ status <chr> "Provável", "Provável", "Provável", "P…
## $ price_diff <dbl> 0.11, 0.56, 1.78, -0.53, -0.24, 0.56, …
## $ last_points <dbl> 1.7, 3.4, 7.2, -0.5, -2.6, 4.5, 17.7, …
Uma breve descrição das métricas. Temos apelido, código do time, e as médias acumuladas para quase todos os scouts do Cartola. Além disso, temos a média acumulada em casa/fora, a diferença entre as médias casa/fora padronizadas (diff_home_away_s), número de jogos na temporada entre outros.
Antes de iniciar de aplicar as técnicas de agrupamento, vamos preparar um pouco o banco de dados para conduzir as análise. A limpeza incluí: selecionar jogadores com no mínimo 10 jogos na temporada (estamos na 19 rodada no momento deste tutorial). Também, iremos nos concentrar apenas nos atacantes. Nos próximos posts iremos nos debruçar sobre os dados de outras posições.
https://gist.github.com/6dfd8f5c028b3f662fd070f7af05c33c
Antes de começar nossa análise de agrupamentos, nada melhor que conhecer nossos dados um pouco melhor. O que será que está mais correlacionado com a pontuação dos meias e atacantes?
https://gist.github.com/ff1cfd50de91079413e6dcad876bfe4d
Percebemos que as variáveis mais associadas à pontuação são: média de pontos em casa, média fora, média de gols e média de chutes esperados. As outras métricas possuem associação fraca.
https://gist.github.com/612597a32b2106428ca3b53da3412355
https://gist.github.com/d8efd14716e45c5c568cf0097c294fac
Ao analisar a figura acima, podemos perceber os agrupamentos criados pelo algoritmo. Temos ao total 9 agrupamentos de atacantes. O mais distante de todos, possui apenas uma observação. Gabigol é o nome da fera. As estatísticas do atacante de gol são semelhantes a dupla CR7 e Messi.
Deixando nosso outlier de lado, vamos aproveitar para interpretar o que seriam estas duas dimensões. Se Gabigol está distante, já podemos concluir que a primeira dimensão está ligada à pontuação do cartola. Vamos aproveitar e tentar identificar o que faz Bruno Henrique (Flamengo), Pedro (Fluminense) e Wellignton Silva estarem em extremos na segunda dimensão.
https://gist.github.com/fb4838856fd2ef7cfd2eac020c5e377b
player_slug | score_mean | diff_home_away_s | score_mean_home | score_mean_away | shots_x_mean | G_mean |
---|---|---|---|---|---|---|
wellington-silva | 2.97 | -1.75 | 1.15 | 5.70 | 1.00 | 0.10 |
gabriel | 10.77 | 2.03 | 13.87 | 8.06 | 3.27 | 1.07 |
bruno-henrique | 6.30 | 2.52 | 10.09 | 2.93 | 2.65 | 0.41 |
pedro | 5.89 | -1.37 | 4.14 | 7.64 | 2.00 | 0.50 |
Aparentemente já conseguimos entender as duas dimensões. Enquanto o eixo ‘x’ é ligado à quantidade de pontos, o ‘y’ está ligado a diferência da pontuação entre a média dentro e fora de casa. Pedro e Wellington Silva estão no topo e são jogadores que possuem média maior fora de casa do que dentro. Bruno Henrique, embora seja um grande pontuador dentro de casa, tem um desempenho ruim fora. Por isso fica na parte inferior do gráfico.
Próximo passo? Identificar características comuns entre agrupamentos de jogadores. Da direita em direção à esquerda, depois do ponto fora da curva temo (em cinza claro): Gilberto, Sasha, Everton, Bruno Henrique e Everaldo. Vamos olhar as características de cada um e tentar identificar porque Sasha e Everton estão tão próximos.
https://gist.github.com/f23cec4b73b294b69f07425d393f6507
player_slug | score_mean | diff_home_away_s | shots_x_mean | fouls_mean | RB_mean | G_mean | A_mean |
---|---|---|---|---|---|---|---|
gilberto | 7.33 | 0.82 | 1.80 | 1.00 | 0.67 | 0.67 | 0.13 |
eduardo-sasha | 6.54 | 1.21 | 1.83 | 0.78 | 1.22 | 0.44 | 0.06 |
everaldo | 5.60 | 2.03 | 3.17 | 2.28 | 0.50 | 0.44 | 0.06 |
everton | 6.62 | 1.44 | 1.40 | 0.53 | 1.13 | 0.47 | 0.13 |
bruno-henrique | 6.30 | 2.52 | 2.65 | 1.65 | 0.41 | 0.41 | 0.12 |
everaldo | 2.62 | 0.18 | 1.10 | 1.70 | 0.80 | 0.10 | 0.10 |
pedro | 5.89 | -1.37 | 2.00 | 0.60 | 0.40 | 0.50 | 0.00 |
Neste primeiro agrupamento é possível observar que os jogadores possuem como característica comum a média de pontos do cartola. Pedro distoa do grupo por ser um jogador que possui média fora de casa maior que dentro (diff_home_away < 0)). Sasha e Everton possuem métricas semelhantes na quantidade de pontos, quantidade de chutes, roubadas de bola e médias de gols.
E o que você pode fazer com isso tudo de informação? Talvez ainda não esteja claro, mas esse tipo de análise pode ser útil para escalar jogadores. Só ao olhar o gráfico, já temos noção de alguns grupos de jogadores que possuem pontuação distinta. Por enquanto, é tentar escalar Gabigol e escolher jogadores dos agrupamentos que possuem confrontos mais fáceis e considerar se os jogos serão em casa ou fora.
Times de futebol, podem usar estratégias semelhantes para encontrar jogadores características semelhantes em caso de venda ou compra dos jogadores para reduzir o risco do investimento em novos talentos. Naturalmente, as métricas devem ser mais elaboradas e fogem do escopo dos dados do cartola.
Quer ver uma análise semelhante para outras posições? Comente aqui.
H.G. :)