Meu TCC na FATEC Sorocaba, orientado pela Profa. Dra. Maria das Graças J. M. Tomazela. Uma pergunta: modelos Random Forest especializados por posição (goleiro, defensor, meio-campista, atacante) conseguem prever a nota de um jogador no Sofascore antes da partida com erro menor que um único modelo genérico?
Pipeline
Três etapas, cada uma lendo do disco só a saída da etapa anterior, então qualquer uma pode ser rodada de novo sozinha.
- Coleta. Um crawler educado pra API interna do Sofascore: limite de requisições, novas tentativas com backoff, checkpoint/retomada e validação com Pydantic em cada linha. 11.977 registros de jogador por partida, de todos os 380 jogos do Brasileirão Série A 2025.
- Limpeza. Uma função por etapa. A parte interessante é que uma célula vazia pode significar três coisas diferentes, cada uma com sua própria regra.
- Modelagem. Só features pré-jogo: mando de campo, força do adversário e o histórico do próprio jogador até a partida sendo prevista. Validação walk-forward nas últimas 80 partidas, intervalos de confiança por bootstrap sobre partidas inteiras, importância por permutação.
Resultado
A especialização não reduziu o erro. O modelo genérico superou em 6% uma baseline de média por posição (MAE 0,374 contra 0,398), e prever goleiros antes do jogo se mostrou um caso perdido. A maior parte da nota de uma partida se decide durante a partida.
Notas
A história em ordem: as armadilhas dos dados, o primeiro modelo, bom demais pra ser verdade, e o que saiu quando o modelo só podia ver o passado.
Stack: Python, httpx, tenacity, Pydantic v2, pandas, scikit-learn, pytest.
