Étant donné les données d'accès au site Web sous la forme session_id, ip, user_agent
, et éventuellement l'horodatage, en suivant les conditions ci-dessous, comment regrouperiez-vous au mieux les sessions en visiteurs uniques?
session_id
: est un identifiant donné à chaque nouveau visiteur. Il n'expire pas, mais si l'utilisateur n'accepte pas les cookies / efface les cookies / change de navigateur / change d'appareil, il ne sera plus reconnu
IP
peuvent être partagés entre différents utilisateurs (Imaginez un café wi-fi gratuit ou votre FAI réaffectant des IP), et ils en auront souvent au moins 2, à la maison et au travail.
User_agent
est la version navigateur + OS, permettant de distinguer les appareils. Par exemple, un utilisateur est susceptible d'utiliser à la fois un téléphone et un ordinateur portable, mais il est peu probable qu'il utilise des ordinateurs portables Windows + Apple. Il est peu probable que le même identifiant de session ait plusieurs agents utilisateurs.
Les données peuvent ressembler au violon ici: http://sqlfiddle.com/#!2/c4de40/1
Bien sûr, nous parlons d'hypothèses, mais il s'agit de se rapprocher le plus possible de la réalité. Par exemple, si nous rencontrons le même ip et useragent dans un laps de temps limité avec un session_id différent, ce serait une supposition juste qu'il s'agit du même utilisateur, à quelques exceptions près.
Edit: La langue dans laquelle le problème est résolu est irellevant, il s'agit principalement de logique et non d'implémentation. Le pseudocode est très bien.
Edit: en raison de la nature lente du violon, vous pouvez également lire / exécuter le 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
la source
Il n'y a pas grand-chose que vous pouvez faire avec seulement ces données, mais le peu que vous pouvez faire ne repose pas sur l'apprentissage automatique.
Oui, les sessions à partir de la même IP mais de différents User-Agents sont presque certainement des utilisateurs distincts. Les sessions avec la même IP et le même User-Agent sont généralement le même utilisateur, sauf dans le cas de proxy / points d'accès Wi-Fi. Ceux que vous pourriez identifier en examinant la distribution du nombre de sessions par IP pour identifier les IP «agrégées» probables. Les sessions du même IP / User-Agent qui se chevauchent dans le temps sont presque sûrement distinctes.
Pour mieux distinguer les utilisateurs, vous auriez besoin de plus d'informations. Par exemple, les sites ou les adresses IP auxquels l'utilisateur se connecte constitueraient une base très solide pour différencier les sessions. Ensuite, vous pourriez entrer dans un apprentissage plus sophistiqué pour savoir quand les sessions sont les mêmes ou des utilisateurs différents.
la source