Saber exatamente quantas pessoas leem uma página na internet parece simples à primeira vista. Atualizar um contador total a cada carregamento exige apenas um número único e quase nada de memória, mas visualizações de páginas não equivalem a pessoas reais. Um único leitor pode abrir o mesmo link várias vezes ao longo do dia, o que inflacionaria um registro básico. Para medir visitantes únicos com precisão absoluta, um site precisaria manter uma lista com o registro de cada indivíduo. Quando multiplicamos isso por artigos, publicações em redes sociais ou anúncios publicitários, os dados se acumulam em montanhas colossais. É exatamente nesse cenário que entra o algoritmo HyperLogLog.
Ele abdica de contagens exatas em troca de estimativas extremamente próximas, consumindo apenas uma fração da memória exigida por listas completas de identificadores. A relevância dessa tecnologia é dupla: além de ser amplamente aplicada por ferramentas como o Google Analytics, genômica e cibersegurança, sua lógica interna é de uma elegância surpreendente.
O jogo das moedas e sequências Para compreender o princípio fundamental por trás da ferramenta, imagine um teste em que uma moeda é lançada repetidamente até cair com a face voltada para cima, registrando quantas coroas vieram antes. Ao repetir esse processo diversas vezes, o operador acompanha apenas um dado: a maior sequência consecutiva de coroas antes do surgimento da primeira cara.
Se o recorde obtido após uma tarde inteira de lançamentos for de 10 coroas seguidas, é possível deduzir o volume de rodadas jogadas. Uma sequência de 10 coroas aparece apenas cerca de uma vez em cada 1.000 rodadas, visto que a chance de um lançamento individual resultar em cara é de 50%. A primeira jogada dá coroa em 1⁄2 das vezes, duas seguidas em 1⁄4, três em 1⁄8, e assim sucessivamente até que 10 ocorrências consecutivas surjam em uma proporção de uma para cada 1.024 rodadas. Assim, um recorde dessa magnitude aponta logicamente para algo em torno de 1.000 jogadas totais.
O HyperLogLog opera sob a mesma premissa, na qual cada rodada corresponde a um visitante. Em vez de exigir listas gigantescas, o sistema precisa apenas monitorar a maior sequência de coroas gerada entre todos os usuários para estimar o público total.
A transformação de dados em bits Na prática, os visitantes não jogam moedas fisicamente. O algoritmo processa o identificador único de cada usuário através de uma função de hash, amplamente utilizada na ciência da computação. As funções de hash convertem uma entrada em uma saída que parece totalmente aleatória, mas que permanece estritamente determinística — ou seja, fornecem sempre o mesmo resultado para o mesmo dado de entrada.
Portanto, um nome de usuário como user_8675309 é transformado em uma sequência de 1 e 0, a exemplo de 01100101000100101000. Esses bits passam a ser tratados como lançamentos de moedas, onde o zero representa coroa e o um simboliza cara.
Divisão em grupos e precisão estatística Para evitar que eventos raros e atípicos — como um usuário sortudo que consiga uma sequência gigantesca de coroas — distorçam o resultado, o algoritmo divide a audiência em múltiplos grupos. As primeiras posições da sequência de cada pessoa definem o seu grupo de destino.
Se o sistema estipular quatro grupos, os visitantes cujas sequências começam com 11 vão para um lado, os com 10 para outro, e o mesmo ocorre para 01 e 00. O programa desconsidera esses dois primeiros dígitos iniciais e avalia a maior sequência de coroas nos dígitos seguintes dentro de cada subdivisão. Como a triagem inicial distribui o público de forma homogênea, cada grupo abriga cerca de um quarto da audiência total.
Ao calcular a média dos resultados de todos os grupos e aplicar ajustes estatísticos avançados, como a média harmônica para reduzir o peso de discrepâncias, o impacto de qualquer valor atípico torna-se irrelevante. Com isso, as estimativas do HyperLogLog apresentam tipicamente uma margem de erro inferior a 1%, permitindo monitorar bilhões de usuários únicos consumindo uma quantidade de memória equivalente ao espaço necessário para armazenar este artigo.
What do you feel about this post?
Like
Love
Happy
Haha
Sad
