Ir para o conteúdo
Rodrigo Arraes LinkedIn (abre em nova aba)

Início / Courtvision

Courtvision

Durante uma partida da NBA, quem está produzindo acima do próprio padrão, e por quanto?

Meu papel
Concepção, critérios dos sinais, testes e refinamento
Construção
Com Claude Code; regras estatísticas, sem machine learning
Tecnologia
Python (biblioteca padrão), HTML, CSS e JavaScript
Dados
Públicos da ESPN, lidos a cada 15 segundos
Abertura do vídeo · trecho animado

Em que momento a pontuação supera o desempenho esperado?

Um lance real abre a pergunta. Depois, uma simulação mostra como o Courtvision percebe o momento em que um jogador passa do próprio padrão.

Transcrição da abertura
  1. Uma foto de LeBron James numa bandeja aparece dentro da quadra do “u” da marca. Ao lado: “Ele está pontuando. Mas está acima do próprio padrão?”
  2. A foto escurece; a linha de lance livre e o ponto completam o “u”, que recolhe para o logotipo.
  3. Entra o aviso: “Simulação com LeBron James — dados ilustrativos”.
  4. A referência: média ilustrativa de 25,0 pontos por jogo, distribuída pelos 48 minutos de partida.
  5. A evolução: fim do 1º quarto, 7 pontos para 6,25 esperados; metade do 2º, 10 para 9,375.
  6. Ainda sem sinal: 3º quarto, 9:00, 19 pontos para 14,06 esperados; desvio 1,32, abaixo do mínimo de 1,5.
  7. O sinal: 3º quarto, 6:00, 24 pontos para 15,6 esperados; desvio 2,12, com piso, desvio e excesso futuro atendidos.
  8. O mesmo caso no card do Courtvision, recriado com o visual do app; no fim, a marca se forma.

Foto de abertura: “LeBron James Layup (Cleveland vs Brooklyn 2018)”, de Erik Drost, licença CC BY 2.0, via Wikimedia Commons. Recortada, com ajuste de cor; na animação, aparece dentro de uma máscara no formato da quadra, com zoom, dessaturação e escurecimento. A foto é só contexto: os números da demonstração são uma simulação e não se referem a essa partida. Projeto independente, sem relação com LeBron James ou com a NBA.

Ideia

O problema

Oito pontos no intervalo podem ser pouco para um titular e muito para um reserva. Placares e estatísticas mostram o total, mas não dizem se aquele total foge do padrão de quem o produziu. O Courtvision compara cada jogador com a própria média, ao longo da partida, e destaca os casos que se afastam dela.

Demonstração

O app respondendo à pergunta

Sete passos, da pergunta ao sinal no card do app. Avança sozinho; use as setas ou os botões para ir no seu ritmo.

1 / 7 · A pergunta

Uma grande atuação chama atenção.

Mas como perceber, durante o jogo, quem está produzindo acima do próprio padrão?

2 / 7 · O jogador e a referência

LeBron James, numa simulação.

A régua é a média dele: 25,0 pontos por jogo, valor ilustrativo. Distribuída pelos 48 minutos de partida, vira a linha do que seria esperado a cada momento.

3 / 7 · A evolução

Dentro do padrão, por enquanto.

O app lê os dados da partida a cada 15 segundos. No fim do 1º quarto, 7 pontos para 6,25 esperados. Na metade do 2º, 10 para 9,375.

4 / 7 · Quase

Acima do esperado, mas sem sinal.

Com 9 minutos restantes no 3º quarto, 19 pontos para 14,06 esperados. O desvio é 1,32, abaixo do mínimo de 1,5.

5 / 7 · O sinal

Cinco pontos em três minutos.

Com 6 minutos restantes no 3º quarto, 24 pontos. O desvio sobe para 2,12 e as três condições fecham ao mesmo tempo: piso, desvio mínimo e excesso futuro.

6 / 7 · A lógica

Uma conta curta, com valores completos.

A média distribuída por igual pelo tempo de partida dá o esperado. O que passa disso é o excesso. O desvio põe o excesso na escala do esperado.

É uma régua prática, não probabilidade nem previsão. O app mostra o excesso arredondado: +8,4.

7 / 7 · Na interface

O sinal, na tela do Courtvision.

O caso entra na lista de Pontos, com excesso, força e desvio. A força (1,29) ordena os sinais de uma mesma categoria.

Pontos · minutos de partidaSimulação com LeBron James — dados ilustrativos
LeBron Jamessimulação
Desvio
—
piso: 24 ≥ 10desvio: 2,12 ≥ 1,5excesso futuro: +5,0 ≥ 3
esperado25,0 × 30 ÷ 48 = 15,625
excesso24 − 15,625 = +8,375
desvio8,375 ÷ √15,625 = +2,12
Valores completos na conta; o arredondamento vem só no fim.
O caso no card do Courtvision, recriado com o visual do app e os valores da simulação. Confronto e placar inventados.
PHI 24–67 ORL
AgoraQ3 · 06:00Ao vivo
LeBron James
PHI · FEm quadra1 falta

Aviso no Q3 · 06:00

24PTS96% da média
Atual24
Média25,0
Excesso
+8,4
Força
1,29
Posição PTS
1º de 1

Desvio +2,12

Simulação · dados ilustrativosDetalhes ▾

Foto de rosto de LeBron James: ESPN, a mesma imagem que o Courtvision exibe nos cards. Os números são uma simulação; o confronto 76ers x Magic e o placar do card são inventados. Logos dos times: ESPN. Projeto independente, sem relação com LeBron James, a ESPN ou a NBA.

Aprofundamento

Como o cálculo funciona

Os números abaixo são os da simulação com LeBron James, calculados pelas funções reais do aplicativo.

Cinco medidas que não se confundem

  • Tempo de partida (t)

    Minutos decorridos no relógio do jogo: 2 quartos de 12 min e mais 6 min do 3º. É o mesmo para todos os jogadores.

    30min de jogo
  • Minutos em quadra

    Quanto o atleta jogou. Aparece como contexto e não entra no cálculo.

    22min do atleta
  • Média por jogo

    Pontos por partida na temporada regular. No início da temporada, combina o ano anterior e o atual; a partir de 20 jogos, usa só o atual.

    25,0pts por jogo (ilustrativo)
  • Expectativa proporcional

    A média distribuída por igual pelos 48 minutos regulamentares, até o tempo t.

    15,6pts até aqui (15,625)
  • Indicador do aplicativo

    O excesso sobre a expectativa, escalado pelo tamanho dela (desvio), e a força, que ordena os sinais.

    +2,12desvio · força 1,29

A conta

Esperado
25,0 × 30 ÷ 4815,625
Excesso
24 − 15,625+8,375
Desvio
8,375 ÷ √15,625 = 8,375 ÷ 3,953+2,12

Uma simplificação assumida. Supor que a média se distribui por igual ao longo do jogo é uma régua prática, não uma descrição de como um jogador realmente pontua: há tempo no banco, rotações e ritmo variável. O desvio também não é probabilidade, previsão nem z-score convencional, porque não usa o desvio-padrão observado do jogador, e seus limites não foram calibrados. A conta usa os valores completos; o arredondamento vem só no fim, como no app.

Quando um sinal aparece

  • Piso de produção

    Pelo menos 10 pontos, 3 rebotes ou 3 assistências. Evita alertas por números pequenos.

    24 pts ✓
  • Desvio mínimo

    Desvio de pelo menos 1,5 no tempo de jogo.

    +2,12 ✓
  • Excesso futuro

    Mantido o ritmo, quanto ainda abriria sobre a média até o fim: (24 ÷ 30 − 25,0 ÷ 48) × 18. Descarta casos com pouco jogo pela frente.

    +5,0 ✓ (mín. 3)

Com as três condições atendidas, a força ordena os sinais de uma mesma categoria: (excesso ÷ dispersão por jogo do jogador) × (48 ÷ t)0,25 = (8,375 ÷ 7,284) × 1,60,25 = 1,29. A dispersão combina o desvio-padrão do jogador com um valor de referência, para não depender de poucos jogos. A força é heurística: ajuda a ordenar, não indica chance de nada acontecer.

propradar/signals.pytrecho

def deviation(actual, media, t):
    """(esperado, desvio) em tempo de jogo"""
    if media is None or t is None or t <= 0:
        return None, None
    expected = media * t / 48
    return expected, (actual - expected) / math.sqrt(
        max(expected, C.EXPECTED_FLOOR))

exist = {"piso": actual >= C.FLOORS[cat],
         "desvio": dev >= C.DEVIATION_MIN,
         "excesso_futuro": futuro >= C.FUTURE_EXCESS_MIN[cat]}
Painel de detalhes do Courtvision, seção Regra r4.1 nesta leitura: piso 24 pontos, desvio +2,12, excesso futuro +5,0, todos atendidos; esperado 15,6; excesso +8,4; força 1,29.
O mesmo caso no painel de detalhes do aplicativo, na simulação com LeBron James.

Limitações

  • Os limites (piso, desvio mínimo, excesso futuro) são pontos de partida para observação, sem calibração estatística.
  • A força é heurística: ajuda a ordenar casos e não indica chance de nada acontecer.
  • Depende dos dados públicos da ESPN; atrasos e falhas de leitura aparecem como avisos, sem esconder o sinal.
  • As regras são testadas com respostas reais gravadas da ESPN (intervalo, último minuto, prorrogação, fim de jogo) e com testes automatizados.

Como a demonstração foi feita

Um modo de demonstração separado, guardado no repositório do Courtvision, alimenta o processamento real do app (leitura, sinais, registro e interface) com dados locais, sem consultar a ESPN. A média, o desvio-padrão e os pontos de LeBron James são ilustrativos; o confronto 76ers x Magic e o placar do card (24 x 67) são inventados, sem relação com nenhuma partida real. A foto de rosto de LeBron James que acompanha o gráfico e o card é o headshot da ESPN, a mesma imagem que o Courtvision usa; o card foi recriado em HTML com o visual do app, para mostrar o caso com a aparência do produto. Não há data, adversário nem placar históricos, e não há participação nem endosso do atleta ou da NBA.