Dados os dados de acesso ao site no formulário session_id, ip, user_agent
e, opcionalmente, o carimbo de data / hora, seguindo as condições abaixo, como você agruparia melhor as sessões em visitantes únicos?
session_id
: é um ID fornecido a cada novo visitante. Ele não expira; no entanto, se o usuário não aceitar cookies / limpar cookies / alterar o navegador / alterar o dispositivo, ele não será mais reconhecido
IP
podem ser compartilhados entre diferentes usuários (imagine um café wi-fi gratuito ou o seu provedor de serviços de Internet), e eles geralmente terão pelo menos dois em casa e no trabalho.
User_agent
é a versão do navegador + do SO, permitindo distinguir entre dispositivos. Por exemplo, é provável que um usuário use telefone e laptop, mas é improvável que use laptops Windows + Apple. É improvável que o mesmo ID de sessão tenha vários agentes de usuário.
Os dados podem parecer o violino aqui: http://sqlfiddle.com/#!2/c4de40/1
É claro que estamos falando de suposições, mas é sobre chegar o mais próximo possível da realidade. Por exemplo, se encontrarmos o mesmo ip e useragent em um período de tempo limitado com um session_id diferente, seria uma suposição justa de que é o mesmo usuário, com algumas exceções de casos extremos.
Edit: O idioma em que o problema foi resolvido é irrelevante, principalmente sobre lógica e não implementação. Pseudocódigo está bom.
Edit: devido à natureza lenta do violino, você pode ler / executar o mysql:
select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id
from
(select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr
from
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a
join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b
order by 1
)d
inner join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 )e
on d.nr>=e.nr
fonte
Não há muito o que fazer com apenas esses dados, mas o pouco que você pode fazer não depende do aprendizado de máquina.
Sim, sessões do mesmo IP, mas diferentes User-Agents são quase certamente usuários distintos. As sessões com o mesmo IP e User-Agent geralmente são o mesmo usuário, exceto no caso de proxies / pontos de acesso wi-fi. Aqueles que você pode identificar observando a distribuição da contagem de sessões por IP para identificar prováveis IP 'agregados'. As sessões do mesmo IP / User-Agent que se sobrepõem no tempo são quase certamente distintas.
Para distinguir ainda mais os usuários, você precisará de mais informações. Por exemplo, os sites ou endereços IP aos quais o usuário está se conectando seriam uma base muito forte para diferenciar as sessões. Depois, você poderá aprender com mais sofisticação para descobrir quando as sessões são iguais ou diferentes usuários.
fonte