Do tick à assinatura
Como uma rede neural aprende a reconhecer um jogador só pelo jeito de mexer o mouse e andar, explicado do zero. Todas as figuras vêm de dados reais de partidas profissionais; o jogador de exemplo aparece como "jogador A".
Tudo começa na demo
Uma demo é a gravação oficial da partida: o estado completo do jogo, 64 vezes por segundo (cada instante é um tick). Dela extraímos, para cada jogador, para onde a mira aponta, onde ele está, que teclas pressiona e quando atira.
| Acervo | Quantidade |
|---|---|
| Partidas profissionais (séries) | 554 |
| Mapas analisados | 1.310 |
| Jogadores distintos | 603 |
| Janelas de 2 segundos | 17.127.274 |
Doze linhas de movimento, dois segundos por vez
A posição absoluta não diz quem é a pessoa; o movimento diz. Por isso convertemos os ticks em 12 canais: giro horizontal e vertical da mira, as acelerações dos dois, velocidade de deslocamento, ângulo entre andar e mirar, as teclas W, A, S e D, o tiro e o agachar. Depois cortamos em janelas de 128 ticks (2 s), descartando tempo morto, congelamento e trechos parados.
Junto com a grade vão 24 números-resumo da janela: média e dispersão dos giros, quanto a mira passa do ponto e volta, ticks entre parar de andar e atirar, fração do tempo parado, número de tiros, tempo de strafe, maior flick. É a "ficha técnica" da gravação.
Filtros que deslizam no tempo
Uma rede neural é uma função com milhões de números ajustáveis, os pesos. A nossa é uma CNN 1D: cada neurônio olha um trecho curto da janela e desliza por ela aplicando os mesmos pesos, como um filtro. Um filtro pode aprender a reagir a "parada brusca de mira", outro a "burst de três tiros". A rede tem centenas, todos aprendidos a partir dos exemplos.
A rede tem cerca de 2,1 milhões de pesos em cinco estágios. Os blocos usam dilatação (o filtro pula 1, 2, 4 e 8 ticks) para enxergar trechos cada vez mais longos; no último, cada neurônio vê os 2 segundos inteiros.
256 números e um cosseno
A saída para uma janela é um vetor de 256 números de tamanho 1: o embedding, ou assinatura. O que importa é a direção. A rede foi treinada para que todas as janelas de uma pessoa apontem para o mesmo lado, e as de pessoas diferentes para lados diferentes. Comparar duas assinaturas é medir o ângulo entre elas, pelo cosseno: 1 quando apontam para o mesmo lado, 0 quando não têm nada a ver.
Como a IA aprende
No começo os pesos são aleatórios. O treino repete milhões de vezes um ciclo de quatro passos: mostra um lote de janelas com o nome de quem jogou (vem da própria demo, ninguém rotula à mão); mede o erro, a loss; calcula para cada peso em que direção mexer para o erro cair, o gradiente; e dá um passo pequeno nessa direção.
O erro é medido com ArcFace, a mesma função usada em reconhecimento facial: cada jogador é uma direção, e a janela só conta como acerto se cair bem dentro do setor dele, com uma margem de 17,2° de folga. Isso força a rede a separar pessoas de verdade, não a passar raspando.
Como sabemos que ela não decorou
Uma partida inteira vai para um único conjunto: treino, validação ou teste. Se a rede viu uma partida no treino, não vê nenhuma janela dela no teste. O teste tem 565 partidas nunca vistas, 743 mil janelas, e é medido uma única vez, no fim.
Por que uma janela acerta 87 % e a partida acerta 100 %: cada partida tem mais de mil janelas. Os erros de janelas individuais apontam para lados diferentes e se cancelam na média; sobra a direção comum, a do jogador.
O que ainda não está provado
- Conjunto fechado. O teste pergunta "qual dos 25?". O produto precisa responder "é fulano ou é um desconhecido?", com limiar por jogador e taxa de falsos positivos medida contra centenas de desconhecidos. É o próximo passo, com os 578 outros jogadores do acervo.
- Escala. A próxima rodada usa 100 jogadores. A acurácia por janela deve cair; a por partida, esperamos que continue alta.
- Evasão. Macros, ruído injetado, mudança deliberada de estilo. Precisamos de uma bateria de testes adversariais antes de confiar no sinal sozinho.
- Amadores. Tudo o que medimos é em profissionais, a 64 ticks. Plataformas competitivas gravam a 128 ticks e os jogadores são menos consistentes.
A base científica é pública: arXiv 2608.24893 (verificação de mesma pessoa em CS2, AUC 0,931 com uma partida e 0,986 com dez) e uma tese de mestrado da NTNU na mesma linha.