← Back to detector

Alt Account Detector

Você já pensou em comparar duas contas de xadrez para descobrir se elas pertencem ao mesmo jogador?

Aposto que sim.

A primeira coisa que me vem à mente é comparar os códigos ECO (ou a sequência dos primeiros lances) que elas jogam.
Isso pode ser feito facilmente com ferramentas como Chessbase, OpeningTree ou até o próprio Lichess.

No entanto, apesar dessa abordagem ser visual e até certo ponto quantitativa, ela ainda exige muito trabalho manual — e muito esforço mental — para entender o que realmente está acontecendo.


Um breve histórico

Não muito tempo atrás, eu indexei minhas próprias partidas PGN no Elasticsearch para gerar algumas estatísticas e decidir onde deveria focar meus estudos.

Isso significava que meu primeiro objetivo já havia sido alcançado: eu sabia como ingerir dados PGN e extrair informações úteis deles.
Então, naturalmente, o próximo passo foi: o que mais posso fazer com isso?

Decidi dar um passo além e experimentar com duas contas que eu já sabia que pertenciam ao mesmo jogador.
Isso me deu uma base concreta para validar minhas ideias.

Nesse ponto, eu já estava baixando dados PGN e ingerindo-os no Elasticsearch.
Agora eu precisava de uma forma de comparar jogadores.


A ideia: impressões digitais de abertura

Eu tive uma ideia simples:

E se cada jogador tivesse uma "impressão digital de abertura"?

Para construir isso, eu:

Depois, armazenei esses vetores no Elasticsearch.

E foi aí que a diversão começou.


Comparando jogadores

Uma vez que cada jogador é representado como um vetor, compará-los se torna um problema de similaridade.

Usando similaridade vetorial (similaridade de cosseno, neste caso), posso perguntar:

“Quais jogadores têm impressões digitais de abertura semelhantes?”

Em vez de comparar árvores de abertura manualmente, o sistema ranqueia automaticamente os jogadores por similaridade.


Escalando (e automatizando a parte divertida)

Depois de validar a ideia com contas conhecidas, era hora de escalar.

Eu evoluí o código para:

Isso removeu bastante atrito e, ao mesmo tempo, tornou todo o processo muito mais divertido de explorar.


Pipeline atual

Em alto nível, o sistema funciona assim:

Partidas PGN (Lichess / Chess.com)
↓
Extração de ECO
↓
Histogramas de abertura (brancas / pretas)
↓
Representação vetorial
↓
Armazenamento no Elasticsearch
↓
Comparação por similaridade vetorial
↓
Ranqueamento de contas semelhantes
↓
(Opcional) agrupamento de pares semelhantes

O sistema também acompanha o status dos perfis, então contas com:

são tratadas explicitamente e não são reprocessadas desnecessariamente.


O que o score significa

O score de similaridade reflete o quão semelhantes duas contas são em termos de suas escolhas de abertura.

Um score alto significa:

“Essas contas jogam aberturas semelhantes.”

Isso não significa:

“Essas contas pertencem à mesma pessoa.”


Aviso importante

Esta é uma ferramenta experimental voltada para exploração.

A similaridade de aberturas é apenas um sinal. Dois jogadores completamente diferentes podem:

Portanto, mesmo que a ferramenta destaque semelhanças interessantes, ela nunca deve ser usada como prova de identidade.


Limitações (por enquanto)

A versão atual foca principalmente nas escolhas de abertura.

Ela ainda não analisa:

Esses são próximos passos naturais.


Por que Elasticsearch?

O Elasticsearch é usado para:

Ele transforma um processo manual e sujeito a erros em algo automatizado e escalável.


Nota final

Este projeto começou como uma curiosidade.

Virou uma ferramenta.

E agora… é um playground de ideias.