Agrupando visitantes únicos por useragent, ip, session_id


15

Dados os dados de acesso ao site no formulário session_id, ip, user_agente, 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

Respostas:


9

Uma possibilidade aqui (e essa é realmente uma extensão do que Sean Owen postou) é definir um "usuário estável".

Para as informações fornecidas, você pode imaginar criar um user_id que é um hash de ip e algumas informações do agente do usuário (pseudo-código):

uid = MD5Hash(ip + UA.device + UA.model)

Em seguida, você sinaliza esses IDs como "estável" ou "instável" com base nas heurísticas de uso observadas para seus usuários. Esse pode ser um limite de número de visitas em uma determinada janela de tempo, período de tempo em que os cookies persistem, alguma ação final no seu site (eu sei que isso não foi declarado no seu log original), etc.

A idéia aqui é separar os usuários que não descartam cookies daqueles que o fazem.

A partir daqui, você pode atribuir session_ids a uids estáveis ​​de seus logs. Você terá "session_ids" restantes para usuários instáveis ​​com os quais você está relativamente inseguro. Você pode estar contando mais ou menos sessões, atribuindo comportamento a várias pessoas quando há apenas uma, etc ... Mas isso é pelo menos limitado aos usuários sobre os quais você agora "tem menos certeza".

Em seguida, você realiza análises no seu grupo estável e as projeta no grupo instável. Pegue uma contagem de usuários, por exemplo, você sabe o número total de sessões, mas não tem certeza de quantos usuários geraram essas sessões. Você pode encontrar o número de # sessões / usuário estável exclusivo e usá-lo para projetar o número "estimado" de usuários únicos no grupo instável, pois você sabe o número de sessões atribuídas a esse grupo.

projected_num_unstable_users = num_sess_unstable / num_sess_per_stable_uid

Isso não ajuda na investigação por nível de usuário em usuários instáveis, mas você pode pelo menos obter alguma milhagem de uma coorte de usuários estáveis ​​que persistem por algum tempo. Você pode, por vários métodos, projetar o comportamento e contar no grupo instável. O exemplo acima é um exemplo simples de algo que você talvez queira saber. A idéia geral é novamente definir um conjunto de usuários em quem você confia persistir, medir o que deseja medir e usar certas verdades básicas (número de pesquisas, visitas, cliques, etc.) para projetar no espaço do usuário desconhecido e estimar conta para eles.

Esse é um problema de longa data na contagem, registro de usuários únicos, etc ... para serviços que não exigem login.


Uma resposta muito boa! Para aqueles que leem, gostaria de acrescentar que, no caso de cookies de terceiros, muitas versões móveis do safari não aceitam essas configurações por padrão, e outros navegadores têm o mesmo em seus pipelines. Mantenha isso em mente e trate-os separadamente.
AdrianBR

1
A rotatividade de cookies é um problema e tanto para serviços que não exigem login. Muitos usuários simplesmente não entendem os cookies; portanto, é provável que você tenha alguma coorte que possa seguir por um período considerável de tempo.
Cwharland

6

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.


O contexto pode ser rastreado por informações em um único site com um cookie de terceiros, via iframe. O site seria comércio eletrônico. Acho que o Google Analytics analisa principalmente IP, às vezes com useragent, e consigo obter números muito semelhantes olhando apenas para IP em um período de tempo. Mas o Google Analytics é conhecido por excesso de relatório até 30% ish, dependendo do contexto
AdrianBR

Olhando para páginas de produtos visitados não ajuda muito, como a estrutura da loja é tal que leva os usuários por caminhos pré-determinados, levando a um comportamento muito semelhante
AdrianBR

1
Além disso, estou ciente de que ML não se enquadra no contexto desta questão. Em vez disso, algoritmos codificados são usados ​​pela maioria das soluções de rastreamento que oferecem resultados sensatos. Os últimos graus de precisão, que seriam alcançáveis ​​com o ML, são menos relevantes, pois essas informações são usadas para observar tendências.
AdrianBR 15/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.