Dados los datos de acceso al sitio web en el formulario session_id, ip, user_agent
, y opcionalmente la marca de tiempo, siguiendo las condiciones a continuación, ¿cómo agruparía mejor las sesiones en visitantes únicos?
session_id
: es una identificación dada a cada nuevo visitante. No caduca, sin embargo, si el usuario no acepta cookies / borra cookies / cambia el navegador / cambia el dispositivo, ya no será reconocido
IP
se pueden compartir entre diferentes usuarios (imagine un café con wifi gratuito o su ISP reasignando IP), y a menudo tendrán al menos 2, hogar y trabajo.
User_agent
es la versión del navegador + SO, lo que permite distinguir entre dispositivos. Por ejemplo, es probable que un usuario use tanto el teléfono como la computadora portátil, pero es poco probable que use computadoras portátiles Windows + Apple. Es poco probable que la misma ID de sesión tenga múltiples agentes de uso.
Los datos pueden verse como el violín aquí: http://sqlfiddle.com/#!2/c4de40/1
Por supuesto, estamos hablando de suposiciones, pero se trata de acercarse lo más posible a la realidad. Por ejemplo, si encontramos la misma ip y useragent en un período de tiempo limitado con un session_id diferente, sería una suposición justa que es el mismo usuario, con algunas excepciones de casos extremos.
Editar: El lenguaje en el que se resuelve el problema es irrelevante, se trata principalmente de lógica y no de implementación. El pseudocódigo está bien.
Editar: debido a la naturaleza lenta del violín, también puede leer / ejecutar 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
fuente
No puede hacer mucho con solo estos datos, pero lo poco que puede hacer no depende del aprendizaje automático.
Sí, las sesiones de la misma IP pero diferentes User-Agents son casi seguramente usuarios distintos. Las sesiones con la misma IP y User-Agent suelen ser el mismo usuario, excepto en el caso de proxies / puntos de acceso wi-fi. Aquellos que pueda identificar observando la distribución del recuento de sesiones por IP para identificar posibles IP 'agregadas'. Las sesiones del mismo IP / User-Agent que se superponen en el tiempo son casi seguramente distintas.
Para distinguir aún más a los usuarios, necesitaría más información. Por ejemplo, los sitios o las direcciones IP a las que se conecta el usuario serían una base muy sólida para diferenciar las sesiones. Entonces podría entrar en un aprendizaje más sofisticado para descubrir cuándo las sesiones son los mismos o diferentes usuarios.
fuente