Playground

Monte a chance.

Mova os jogadores. Veja como as posições mudam as entradas e a estimativa.

Por Leonardo Ferreira

Decisões, evidência e limites

Por trás da estimativa

Um playground para entender chances de gol e inspecionar como dados, escolhas de modelo e engenharia chegam ao número na tela.

O que o número significa

Uma estimativa de 0,20 xG representa cerca de 20 gols em 100 chutes comparáveis segundo este modelo. Não é uma probabilidade exata para um jogador específico. Aqui, a cena é inventada e simplifica o contexto real.

Fonte e população

Usamos StatsBomb Open Data com resultados observados de gol/não gol; o xG da fonte nunca é o alvo. A população inclui chutes com os pés de homens em jogo aberto. Cabeceios, pênaltis e outras situações ficam fora do treino. Frames do evento são a observação principal; disponibilidade de 360 não garante que todos os defensores estejam visíveis. Goleiros ausentes e casos singulares na linha do gol são excluídos, sem imputação.

StatsBomb Open Data

Oito entradas posicionais

Geometria descreve a oportunidade; contagens e distâncias descrevem os adversários observados. O cone é o triângulo finito entre chute e traves. Posições usam metros, independentemente do SVG. Com zero defensores, a distância usa a diagonal do campo como sentinela junto da contagem explícita. Outros atacantes, identidade, pé preferido, técnica, velocidade e contexto temporal são omitidos.

CaracterísticaRacional
Distância do chute (m)Distância ao centro do gol.
Ângulo de abertura (°)Abertura entre as traves.
Deslocamento lateral (m)Assimetria lateral sem distinguir esquerda/direita.
Defensores representadosQuantos adversários estão representados.
Defensores no coneOcupação do triângulo de chute.
Defensor mais próximo (m)Proximidade do adversário observado mais perto.
Goleiro até o gol (m)Posicionamento do goleiro em relação ao gol.
Goleiro até o chute (m)Proximidade entre goleiro e chute.

Treino, escolha e congelamento

Partidas inteiras são separadas em treino, calibração, seleção e teste, evitando compartilhar lances da mesma partida entre grupos. A busca limitada usa cinco folds só no treino; a padronização logística é ajustada dentro de cada fold. Três regressões logísticas isolam geometria, defensores e todas as entradas. XGBoost raso testa interações não lineares. Não há balanceamento de classes ou refit após a seleção.

Separação por partidas
PartiçãoPartidasChutesGols
Calibração1833.440314
Seleção1803.643324
Teste final3637.160Não aberto na seleção
Treino1.08720.7771.966

A regra declarada escolheu XGBoost pelo desempenho observado e pelo limite de deterioração de Brier para preferir simplicidade. Os intervalos de seleção não demonstraram superioridade conclusiva. A calibração sigmoide não cumpriu os critérios de adoção. Congelar significa fixar entradas, pré-processamento, árvores e calibração antes de abrir o teste final; a tela só executa esses parâmetros.

XGBoost
300 árvores · profundidade 2 · taxa de aprendizado 0,05 · peso mínimo de nó 5
Calibração
Sem recalibração (identidade)

Validação e teste final

Log loss penaliza probabilidades erradas com confiança; Brier mede o erro quadrático da probabilidade. Menor é melhor. Seleção escolhe o modelo; o teste final avalia o modelo já fixado. Não foi usado para retunar. Intervalos de 95% reamostram partidas inteiras, preservando a dependência dos chutes.

Seleção — não é o teste final

ModeloChutesGolsLog lossBrier
Prevalência constante3.6433240,3002650,08106
Logística: geometria3.6433240,2458760,069567
Logística: defensores3.6433240,2402040,067658
Logística completa3.6433240,2383550,067612
XGBoost completo3.6433240,2352080,066974

Teste final intocado até o congelamento

ModeloChutesGolsLog lossBrier
XGBoost completo7.1606550,2399650,068339
Logística completa7.1606550,2428710,069261
Prevalência constante7.1606550,3060080,083122

Diferenças pareadas no teste final

XGBoost menos referência: valores negativos favorecem XGBoost. Os intervalos globais favorecem o candidato neste teste; isso não garante vantagem em todo recorte nem transferência para outros campeonatos ou cenas.

ReferênciaMétricaDiferençaIntervalo de 95%
Prevalência constanteBrier-0,014783[-0,017492; -0,012139]
Prevalência constanteLog loss-0,066043[-0,075388; -0,056869]
Logística completaBrier-0,000922[-0,001781; -0,000067]
Logística completaLog loss-0,002906[-0,005424; -0,000343]

Calibração e amostras escassas

A diagonal indica concordância entre média prevista e frequência observada. Barras mostram intervalos de 95% da frequência observada por partidas; pontos vazados são bins escassos. Nenhum bin com suporte foi sinalizado, mas as faixas de alta probabilidade têm poucos exemplos e não sustentam precisão em cenas extremas.

Calibração e amostras escassasA diagonal indica concordância entre média prevista e frequência observada. Barras mostram intervalos de 95% da frequência observada por partidas; pontos vazados são bins escassos. Nenhum bin com suporte foi sinalizado, mas as faixas de alta probabilidade têm poucos exemplos e não sustentam precisão em cenas extremas.0%0%25%25%50%50%75%75%100%100%Média previstaFrequência observada
A diagonal indica concordância entre média prevista e frequência observada. Barras mostram intervalos de 95% da frequência observada por partidas; pontos vazados são bins escassos. Nenhum bin com suporte foi sinalizado, mas as faixas de alta probabilidade têm poucos exemplos e não sustentam precisão em cenas extremas.
Calibração e amostras escassas
Faixa previstaChutesMédia previstaFrequência observadaIntervalo de 95%Escasso
0%–10%5.3243,5%3,7%3,1% – 4,2%Com suporte
10%–20%81814,3%13,6%11,2% – 15,9%Com suporte
20%–30%42924,8%21,7%17,9% – 25,6%Com suporte
30%–40%28234,4%33,7%28,2% – 39,6%Com suporte
40%–50%16444,4%47%39,6% – 53,5%Com suporte
50%–60%6954,7%49,3%37,3% – 60,3%Escasso
60%–70%4164%58,5%44,2% – 73,3%Escasso
70%–80%1774,2%82,4%62,5% – 100%Escasso
80%–90%985,3%55,6%20% – 87,5%Escasso
90%–100%791,8%100%100% – 100%Escasso

O recorte adverso também importa

Com dois defensores dentro do cone, o XGBoost foi pior que a regressão logística neste teste. Isso se refere à contagem dentro do cone, não ao total no campo. Mantemos esse resultado visível; médias globais não apagam falhas locais.

Chutes: 815 · Com suporte

XGBoost − Logística completa
MétricaDiferençaIntervalo de 95%
Brier0,000877[-0,000344; 0,002305]
Log loss0,005375[0,000098; 0,011708]

Cenas ilustrativas e transferência

A referência descritiva usa vizinhos em características padronizadas apenas do treino, com um limiar de 99% e grupo separado para zero defensores. Não publicamos linhas de referência, então a tela não calcula suporte conjunto para cada edição. Quatro presets de jogo aberto ficam fora dessa referência; estar dentro também não prova realismo. Cenas raras continuam exploráveis. Comparações não são efeitos causais; visibilidade parcial, poucos defensores e outros domínios limitam a interpretação.

Execução e reprodução

TypeScript extrai as mesmas oito entradas do pipeline Python. O carregador valida e captura parâmetros imutáveis; XGBoost preserva comparações e acumulação float32 com tolerância de 1e-7. Árvores podem manter o resultado após pequenos movimentos. Entradas inválidas ou modelo indisponível não recebem heurística substituta. Pênaltis usam a convenção fixa de 0,76, separada do modelo aprendido.

A revisão científica foi aceita com limitações e a distribuição do artefato exato foi revisada no escopo gratuito/não comercial. O status automático original continua “needs_review”; revisão não autoriza publicação. O treino privado e a reprodução completa foram executados pelo autor; o assistente revisou agregados e checks, sem rerodar os dados privados.

Identidade e revisão
Artefato
758526873b8a3a2681f655c064dee52f8bd33749accd499d015420dbe8e11b9a
Execução de treino
222909fe801f4865897fea3541e023fed626f6736dca6ef69ceada1f7c57945a
Evidência
e579e10f9699077ddf05e7433af5ed63edf0e03c3ea8c7ca295844951d74ea08
Revisão científica · 11 de out. de 2026
Aceita com limitações
Status automático original
Revisão necessária
Autorização de publicação
Não
Teste final intocado até o congelamento
7.160 Chutes · 655 Gols