CS FINGERPRINT
Como funciona

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".

1 · Os dados

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.

Dez segundos reais de um jogador: giro da mira, mira vertical, velocidade e tiros
Dez segundos reais do jogador A. Em cima, quanto a mira girou a cada tick (os picos são flicks); depois a mira vertical, a velocidade e, embaixo, cada tiro. A velocidade cai perto dos tiros: é a coordenação "parar e atirar", um dos sinais mais pessoais.
AcervoQuantidade
Partidas profissionais (séries)554
Mapas analisados1.310
Jogadores distintos603
Janelas de 2 segundos17.127.274
2 · O que a rede enxerga

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.

Uma janela de 2 segundos com os 12 canais
Uma janela real: 128 valores de cada um dos 12 canais. É exatamente esta grade que entra na rede. Em 2 segundos o jogador anda, gira a mira, ajusta, atira em burst e contrastrafa.

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.

3 · A rede neural

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.

Dois filtros aplicados a um segundo de giro da mira
Dois filtros feitos à mão, só para mostrar a ideia: um suaviza e realça o movimento lento; o outro responde a mudanças bruscas e realça os flicks. Os da rede são aprendidos e bem mais sofisticados.

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.

entrada
a grade dos 12 canais
12 × 128
stem
64 filtros de 7 ticks: detectores básicos
64 × 128
4 blocos residuais
128 a 256 filtros, dilatação 1, 2, 4 e 8
256 × 128
resumo no tempo
média e máximo de cada filtro ao longo dos 128 ticks
512
porta lateral
os 24 números-resumo, por uma camada de 64 neurônios
64
cabeça
projeta em 256 números e normaliza para tamanho 1
256
4 · A assinatura

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.

AnalogiaCada assinatura é uma agulha de bússola num espaço de 256 dimensões. Todas as agulhas do jogador A apontam para o "norte do jogador A". A média delas é o centróide, e identificar uma partida nova é ver de qual norte ela está mais perto.
Mapa 2D dos 25 jogadores: pontos próximos jogam parecido
Os centróides dos 25 jogadores projetados em duas dimensões. Pontos próximos jogam de forma parecida; nenhum par chega perto de se confundir.
5 · O aprendizado

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.

Descida do gradiente num vale de erro
Com dois pesos, o erro é a altitude de um vale e cada passo desce a encosta mais íngreme. Com 2,1 milhões de pesos é o mesmo princípio.

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.

Setores angulares com margem
Cada jogador é uma direção no círculo (de verdade são 256 dimensões). A margem é o que deixa as partidas do próprio jogador a 0,998 e as dos outros abaixo de 0,89.
Curva de treino: acerto por janela sobe e erro cai
A última rodada, época por época: o acerto por janela na validação sobe de 33 % para 87 %; o erro de treino cai de 10,4 para 1,05. Cada época é uma passagem por 2,27 milhões de janelas e leva 7,7 minutos numa GPU alugada.
6 · A prova

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.

565/565
partidas de teste atribuídas ao jogador certo
0,867
acerto por janela isolada de 2 s
0,999
cosseno mediano ao centróide certo
0,907
pior cosseno entre as 565, ainda acertada
Cosseno das 565 partidas de teste por jogador
As 565 partidas de teste, uma por ponto. A maioria passa de 0,99; as poucas abaixo de 0,95 são partidas curtas ou atípicas, e mesmo assim ficaram mais perto do dono do que de qualquer outro.
Partidas do jogador A contra partidas de outros
Verificação, "é o jogador A ou não é?": 22 partidas dele nunca vistas ficam entre 0,998 e 1,000; 398 partidas de outros ficam entre 0,49 e 0,89. Há um abismo entre os grupos.

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.

7 · Limites

O que ainda não está provado

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.